├── .gitignore ├── LICENSE ├── docs ├── schemas │ ├── job-schema.md │ └── batch-state-schema.md ├── plans │ ├── 2025-11-04-multi-job-implementation-summary.md │ └── 2025-11-04-multi-job-resume-tailoring-design.md └── testing │ └── multi-job-test-checklist.md ├── research-prompts.md ├── MARKETPLACE.md ├── matching-strategies.md ├── SUBMISSION_GUIDE.md ├── branching-questions.md ├── README.md ├── SKILL.md └── multi-job-workflow.md /.gitignore: -------------------------------------------------------------------------------- 1 | # IDE 2 | .vscode/ 3 | .idea/ 4 | 5 | # OS 6 | .DS_Store 7 | Thumbs.db 8 | 9 | # Test outputs 10 | test-outputs/ 11 | *.test.md 12 | 13 | # Temporary files 14 | *.tmp 15 | *.bak 16 | *~ 17 | .claude/settings.local.json 18 | 19 | # Git worktrees 20 | .worktrees/ 21 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Varun Ramesh 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /docs/schemas/job-schema.md: -------------------------------------------------------------------------------- 1 | # Job Schema 2 | 3 | ## Overview 4 | Represents a single job application within a multi-job batch. 5 | 6 | ## Lifecycle States 7 | 8 | ``` 9 | pending → in_progress → completed 10 | ↓ 11 | failed 12 | ``` 13 | 14 | ## Phase Progression 15 | 16 | Within `in_progress` status: 17 | 1. research 18 | 2. template 19 | 3. matching 20 | 4. generation 21 | 22 | ## Required Fields 23 | 24 | - job_id: Unique identifier within batch 25 | - company: Company name 26 | - role: Job title 27 | - jd_text: Job description text 28 | 29 | ## Optional Fields 30 | 31 | - jd_url: Source URL if scraped 32 | - priority: User-assigned priority 33 | - notes: User notes about this job 34 | - requirements: Extracted after intake 35 | - gaps: Identified after gap analysis 36 | - coverage: Calculated after matching 37 | - files_generated: Set true after generation 38 | 39 | ## Example 40 | 41 | ```json 42 | { 43 | "job_id": "job-1", 44 | "company": "Microsoft", 45 | "role": "Principal PM - 1ES", 46 | "jd_text": "We are seeking...", 47 | "jd_url": "https://careers.microsoft.com/...", 48 | "priority": "high", 49 | "notes": "Internal referral from Alice", 50 | "status": "completed", 51 | "current_phase": null, 52 | "coverage": 85, 53 | "files_generated": true, 54 | "requirements": [ 55 | "Kubernetes experience", 56 | "CI/CD pipeline management", 57 | "Cross-functional leadership" 58 | ], 59 | "gaps": [] 60 | } 61 | ``` 62 | -------------------------------------------------------------------------------- /docs/schemas/batch-state-schema.md: -------------------------------------------------------------------------------- 1 | # Batch State Schema 2 | 3 | ## Overview 4 | Tracks the state of multi-job resume tailoring sessions, supporting pause/resume and incremental job additions. 5 | 6 | ## Schema 7 | 8 | ### BatchState 9 | 10 | ```json 11 | { 12 | "batch_id": "batch-YYYY-MM-DD-{slug}", 13 | "created": "ISO 8601 timestamp", 14 | "current_phase": "intake|gap_analysis|discovery|per_job_processing|finalization", 15 | "processing_mode": "interactive|express", 16 | "jobs": [JobState], 17 | "discoveries": [DiscoveredExperience], 18 | "aggregate_gaps": AggregateGaps 19 | } 20 | ``` 21 | 22 | ### JobState 23 | 24 | ```json 25 | { 26 | "job_id": "job-{N}", 27 | "company": "string", 28 | "role": "string", 29 | "jd_text": "string", 30 | "jd_url": "string|null", 31 | "priority": "high|medium|low", 32 | "notes": "string", 33 | "status": "pending|in_progress|completed|failed", 34 | "current_phase": "research|template|matching|generation|null", 35 | "coverage": "number (0-100)", 36 | "files_generated": "boolean", 37 | "requirements": ["string"], 38 | "gaps": [GapItem] 39 | } 40 | ``` 41 | 42 | ### DiscoveredExperience 43 | 44 | ```json 45 | { 46 | "experience_id": "disc-{N}", 47 | "text": "string", 48 | "context": "string", 49 | "scope": "string", 50 | "addresses_jobs": ["job-id"], 51 | "addresses_gaps": ["string"], 52 | "confidence_improvement": { 53 | "gap_name": { 54 | "before": "number", 55 | "after": "number" 56 | } 57 | }, 58 | "integrated": "boolean", 59 | "bullet_draft": "string" 60 | } 61 | ``` 62 | 63 | ### AggregateGaps 64 | 65 | ```json 66 | { 67 | "critical_gaps": [ 68 | { 69 | "gap_name": "string", 70 | "appears_in_jobs": ["job-id"], 71 | "current_best_match": "number (0-100)", 72 | "priority": "number" 73 | } 74 | ], 75 | "important_gaps": [...], 76 | "job_specific_gaps": [...] 77 | } 78 | ``` 79 | 80 | ### GapItem 81 | 82 | ```json 83 | { 84 | "requirement": "string", 85 | "confidence": "number (0-100)", 86 | "gap_type": "critical|important|specific" 87 | } 88 | ``` 89 | -------------------------------------------------------------------------------- /research-prompts.md: -------------------------------------------------------------------------------- 1 | # Research Phase Prompts 2 | 3 | ## Job Description Parsing 4 | 5 | **Prompt template:** 6 | ``` 7 | Analyze this job description and extract: 8 | 9 | 1. EXPLICIT REQUIREMENTS (must-have vs nice-to-have) 10 | 2. TECHNICAL KEYWORDS and domain terminology 11 | 3. IMPLICIT PREFERENCES (cultural signals, hidden requirements) 12 | 4. RED FLAGS (overqualification risks, mismatches) 13 | 5. ROLE ARCHETYPE (IC technical / people leadership / cross-functional) 14 | 15 | Job Description: 16 | {JD_TEXT} 17 | 18 | Output as structured sections. 19 | ``` 20 | 21 | ## Company Research 22 | 23 | **WebSearch queries:** 24 | ``` 25 | 1. "{company_name} mission values culture" 26 | 2. "{company_name} engineering blog" 27 | 3. "{company_name} recent news product launches" 28 | 4. "{company_name} team structure engineering" 29 | ``` 30 | 31 | **Synthesis prompt:** 32 | ``` 33 | Based on these search results, summarize: 34 | 35 | 1. Company mission and values 36 | 2. Cultural priorities 37 | 3. Business model and customer base 38 | 4. Team structure (if available) 39 | 5. Company stage (startup/growth/mature) and implications 40 | 41 | Search results: 42 | {SEARCH_RESULTS} 43 | ``` 44 | 45 | ## Role Benchmarking 46 | 47 | **WebSearch + WebFetch strategy:** 48 | ``` 49 | 1. Search: "site:linkedin.com {job_title} {company_name}" 50 | 2. Fetch: Top 3-5 profiles 51 | 3. Fallback: "site:linkedin.com {job_title} {similar_company}" 52 | ``` 53 | 54 | **Analysis prompt:** 55 | ``` 56 | Analyze these LinkedIn profiles for people in similar roles: 57 | 58 | Extract patterns: 59 | 1. Common backgrounds and career paths 60 | 2. Emphasized skills and project types 61 | 3. Terminology they use to describe similar work 62 | 4. Notable accomplishments or themes 63 | 64 | Profiles: 65 | {PROFILE_DATA} 66 | ``` 67 | 68 | ## Success Profile Synthesis 69 | 70 | **Synthesis prompt:** 71 | ``` 72 | Combine job description analysis, company research, and role benchmarking into: 73 | 74 | ## Success Profile: {Role} at {Company} 75 | 76 | ### Core Requirements (Must-Have) 77 | - {Requirement}: {Evidence from JD/research} 78 | 79 | ### Valued Capabilities (Nice-to-Have) 80 | - {Capability}: {Why it matters in this context} 81 | 82 | ### Cultural Fit Signals 83 | - {Value}: {How to demonstrate} 84 | 85 | ### Narrative Themes 86 | - {Theme}: {Examples from similar role holders} 87 | 88 | ### Terminology Map 89 | Standard term → Company-preferred term 90 | 91 | ### Risk Factors 92 | - {Concern}: {Mitigation strategy} 93 | ``` 94 | -------------------------------------------------------------------------------- /MARKETPLACE.md: -------------------------------------------------------------------------------- 1 | # Resume Tailoring Skill - Marketplace Submission 2 | 3 | ## Skill Information 4 | 5 | **Name:** Resume Tailoring Skill 6 | 7 | **Category:** Productivity / Career Development 8 | 9 | **Tags:** resume, job-search, career, recruitment, cv, job-application, interview-prep 10 | 11 | **Short Description:** AI-powered resume generation that researches roles, surfaces undocumented experiences, and creates tailored resumes from your library. 12 | 13 | **Long Description:** 14 | 15 | Transform your job search with AI-powered resume tailoring that goes beyond simple keyword matching. This skill generates high-quality, tailored resumes optimized for specific job descriptions while maintaining factual integrity. 16 | 17 | **Key Features:** 18 | - 🔍 Deep Research: Analyzes company culture, role requirements, and success profiles 19 | - 💬 Branching Discovery: Surfaces undocumented experiences through conversational interviews 20 | - 🎯 Smart Matching: Confidence-scored content selection with transparent gap identification 21 | - 📄 Multi-Format Output: Professional MD, DOCX, PDF, and interview prep reports 22 | - 🔄 Self-Improving: Library grows with each successful resume 23 | 24 | **Perfect for:** 25 | - Job seekers applying to multiple roles 26 | - Career transitioners bridging domain gaps 27 | - Professionals with diverse experience backgrounds 28 | - Anyone who wants to optimize their application materials 29 | 30 | **Core Principle:** Truth-preserving optimization - never fabricates experience, but intelligently reframes and emphasizes relevant aspects. 31 | 32 | ## Installation 33 | 34 | ```bash 35 | git clone https://github.com/varunr89/resume-tailoring-skill.git ~/.claude/skills/resume-tailoring 36 | ``` 37 | 38 | ## Usage 39 | 40 | Simply say: 41 | ``` 42 | "I want to apply for [Role] at [Company]. Here's the JD: [paste]" 43 | ``` 44 | 45 | The skill guides you through: 46 | 1. Library analysis 47 | 2. Company/role research 48 | 3. Template optimization 49 | 4. Experience discovery 50 | 5. Content matching 51 | 6. Multi-format generation 52 | 53 | ## Requirements 54 | 55 | - Claude Code with skills enabled 56 | - Existing resume library (markdown format) 57 | - Optional: WebSearch, document-skills plugin 58 | 59 | ## Demo Video (Optional) 60 | 61 | [Link to demo video showing the skill in action] 62 | 63 | ## Screenshots 64 | 65 | 1. **Research Phase:** Shows company analysis and success profile synthesis 66 | 2. **Template Generation:** Demonstrates role consolidation and title reframing options 67 | 3. **Experience Discovery:** Displays branching interview process 68 | 4. **Content Matching:** Shows confidence-scored content selection 69 | 5. **Final Output:** Generated resume with metadata report 70 | 71 | ## Support & Documentation 72 | 73 | - **GitHub:** https://github.com/varunr89/resume-tailoring-skill 74 | - **Documentation:** See README.md for full documentation 75 | - **Issues:** https://github.com/varunr89/resume-tailoring-skill/issues 76 | 77 | ## License 78 | 79 | MIT License 80 | 81 | ## Author 82 | 83 | Varun Ramesh 84 | - GitHub: @varunr89 85 | 86 | ## Version History 87 | 88 | **v1.0.0** (2025-10-31) 89 | - Initial release 90 | - Full 5-phase workflow implementation 91 | - Multi-format output support 92 | - Comprehensive error handling 93 | - Experience discovery with branching interviews 94 | - Confidence-scored content matching 95 | 96 | ## Marketplace Category Suggestions 97 | 98 | **Primary:** Productivity 99 | **Secondary:** Career Development, Writing & Content 100 | 101 | ## Keywords for Search 102 | 103 | resume, CV, job application, career, recruitment, job search, interview prep, resume optimization, job description, tailored resume, ATS, cover letter, career transition, experience matching 104 | 105 | ## Pricing (if applicable) 106 | 107 | Free and Open Source (MIT License) 108 | 109 | ## Privacy & Data Handling 110 | 111 | - All processing happens locally within Claude Code 112 | - No external data transmission except for optional WebSearch queries 113 | - Resume data stays on your machine 114 | - Generated resumes saved to local filesystem 115 | - No telemetry or tracking 116 | -------------------------------------------------------------------------------- /matching-strategies.md: -------------------------------------------------------------------------------- 1 | # Content Matching Strategies 2 | 3 | ## Overview 4 | 5 | Match experiences from library to template slots with transparent confidence scoring. 6 | 7 | ## Matching Criteria (Weighted) 8 | 9 | **1. Direct Match (40%)** 10 | - Keywords overlap with JD/success profile 11 | - Same domain/technology mentioned 12 | - Same type of outcome required 13 | - Same scale or complexity level 14 | 15 | **Scoring:** 16 | - 90-100%: Exact match (same skill, domain, context) 17 | - 70-89%: Strong match (same skill, different domain) 18 | - 50-69%: Good match (overlapping keywords, similar outcomes) 19 | - <50%: Weak direct match 20 | 21 | **2. Transferable Skills (30%)** 22 | - Same capability in different context 23 | - Leadership in different domain 24 | - Technical problem-solving in different stack 25 | - Similar scale/complexity in different industry 26 | 27 | **Scoring:** 28 | - 90-100%: Directly transferable (process, skill generic) 29 | - 70-89%: Mostly transferable (some domain translation needed) 30 | - 50-69%: Partially transferable (analogy required) 31 | - <50%: Stretch to call transferable 32 | 33 | **3. Adjacent Experience (20%)** 34 | - Touched on skill as secondary responsibility 35 | - Used related tools/methodologies 36 | - Worked in related problem space 37 | - Supporting role in relevant area 38 | 39 | **Scoring:** 40 | - 90-100%: Closely adjacent (just different framing) 41 | - 70-89%: Clearly adjacent (related but distinct) 42 | - 50-69%: Somewhat adjacent (requires explanation) 43 | - <50%: Loosely adjacent 44 | 45 | **4. Impact Alignment (10%)** 46 | - Achievement type matches what role values 47 | - Quantitative metrics (if JD emphasizes data-driven) 48 | - Team outcomes (if JD emphasizes collaboration) 49 | - Innovation (if JD emphasizes creativity) 50 | - Scale (if JD emphasizes hyperscale) 51 | 52 | **Scoring:** 53 | - 90-100%: Perfect impact alignment 54 | - 70-89%: Strong impact alignment 55 | - 50-69%: Moderate impact alignment 56 | - <50%: Weak impact alignment 57 | 58 | ## Overall Confidence Score 59 | 60 | ``` 61 | Overall = (Direct × 0.4) + (Transferable × 0.3) + (Adjacent × 0.2) + (Impact × 0.1) 62 | ``` 63 | 64 | **Confidence Bands:** 65 | - 90-100%: DIRECT - Use with confidence 66 | - 75-89%: TRANSFERABLE - Strong candidate 67 | - 60-74%: ADJACENT - Acceptable with reframing 68 | - 45-59%: WEAK - Consider only if no better option 69 | - <45%: GAP - Flag as unaddressed requirement 70 | 71 | ## Content Reframing Strategies 72 | 73 | **When to reframe:** Good match (>60%) but language doesn't align with target terminology 74 | 75 | **Strategy 1: Keyword Alignment** 76 | ``` 77 | Preserve meaning, adjust terminology 78 | 79 | Before: "Led experimental design and data analysis programs" 80 | After: "Led data science programs combining experimental design and 81 | statistical analysis" 82 | Reason: Target role uses "data science" terminology 83 | ``` 84 | 85 | **Strategy 2: Emphasis Shift** 86 | ``` 87 | Same facts, different focus 88 | 89 | Before: "Designed statistical experiments... saving millions in recall costs" 90 | After: "Prevented millions in potential recall costs through predictive 91 | risk detection using statistical modeling" 92 | Reason: Target role values business outcomes over technical methods 93 | ``` 94 | 95 | **Strategy 3: Abstraction Level** 96 | ``` 97 | Adjust technical specificity 98 | 99 | Before: "Built MATLAB-based automated system for evaluation" 100 | After: "Developed automated evaluation system" 101 | Reason: Target role is language-agnostic, emphasize outcome 102 | 103 | OR 104 | 105 | After: "Built automated evaluation system (MATLAB, Python integration)" 106 | Reason: Target role values technical specificity 107 | ``` 108 | 109 | **Strategy 4: Scale Emphasis** 110 | ``` 111 | Highlight relevant scale aspects 112 | 113 | Before: "Managed project with 3 stakeholders" 114 | After: "Led cross-functional initiative coordinating 3 organizational units" 115 | Reason: Emphasize cross-org complexity over headcount 116 | ``` 117 | 118 | ## Gap Handling 119 | 120 | **When match confidence < 60%:** 121 | 122 | **Option 1: Reframe Adjacent Experience** 123 | ``` 124 | Present reframing option: 125 | 126 | TEMPLATE SLOT: {Requirement} 127 | BEST MATCH: {Experience} (Confidence: {score}%) 128 | 129 | REFRAME OPPORTUNITY: 130 | Original: "{bullet_text}" 131 | Reframed: "{adjusted_text}" 132 | Justification: {why this is truthful} 133 | 134 | RECOMMENDATION: Use reframed version? Y/N 135 | ``` 136 | 137 | **Option 2: Flag as Gap** 138 | ``` 139 | GAP IDENTIFIED: {Requirement} 140 | 141 | AVAILABLE OPTIONS: 142 | None with confidence >60% 143 | 144 | RECOMMENDATIONS: 145 | 1. Address in cover letter - emphasize learning ability 146 | 2. Omit bullet slot - reduce template allocation 147 | 3. Include best available match ({score}%) with disclosure 148 | 4. Discover new experience through brainstorming 149 | 150 | User decides how to proceed. 151 | ``` 152 | 153 | **Option 3: Discover New Experience** 154 | ``` 155 | If Experience Discovery not yet run: 156 | 157 | "This gap might be addressable through experience discovery. 158 | Would you like to do a quick branching interview about {gap_area}?" 159 | 160 | If already run: 161 | Accept gap, move forward. 162 | ``` 163 | -------------------------------------------------------------------------------- /SUBMISSION_GUIDE.md: -------------------------------------------------------------------------------- 1 | # Claude Skills Marketplace Submission Guide 2 | 3 | ## ✅ Repository Setup Complete! 4 | 5 | **GitHub Repository:** https://github.com/varunr89/resume-tailoring-skill 6 | 7 | **Status:** 8 | - ✅ Code pushed to GitHub 9 | - ✅ README with installation instructions 10 | - ✅ MIT License 11 | - ✅ All documentation files 12 | - ✅ 12 commits showing development history 13 | 14 | --- 15 | 16 | ## 📦 Marketplace Submission Information 17 | 18 | ### Basic Information 19 | 20 | **Skill Name:** Resume Tailoring Skill 21 | 22 | **Repository URL:** https://github.com/varunr89/resume-tailoring-skill 23 | 24 | **Installation Command:** 25 | ```bash 26 | git clone https://github.com/varunr89/resume-tailoring-skill.git ~/.claude/skills/resume-tailoring 27 | ``` 28 | 29 | **Category:** Productivity / Career Development 30 | 31 | **Tags:** `resume`, `job-search`, `career`, `recruitment`, `cv`, `job-application`, `interview-prep` 32 | 33 | --- 34 | 35 | ### Short Description (for listing) 36 | 37 | ``` 38 | AI-powered resume generation that researches roles, surfaces undocumented experiences, and creates tailored resumes from your library. 39 | ``` 40 | 41 | --- 42 | 43 | ### Long Description (for detail page) 44 | 45 | ``` 46 | Transform your job search with AI-powered resume tailoring that goes beyond simple keyword matching. This skill generates high-quality, tailored resumes optimized for specific job descriptions while maintaining factual integrity. 47 | 48 | **Key Features:** 49 | - 🔍 Deep Research: Analyzes company culture, role requirements, and success profiles 50 | - 💬 Branching Discovery: Surfaces undocumented experiences through conversational interviews 51 | - 🎯 Smart Matching: Confidence-scored content selection with transparent gap identification 52 | - 📄 Multi-Format Output: Professional MD, DOCX, PDF, and interview prep reports 53 | - 🔄 Self-Improving: Library grows with each successful resume 54 | 55 | **Perfect for:** 56 | - Job seekers applying to multiple roles 57 | - Career transitioners bridging domain gaps 58 | - Professionals with diverse experience backgrounds 59 | - Anyone who wants to optimize their application materials 60 | 61 | **Core Principle:** Truth-preserving optimization - never fabricates experience, but intelligently reframes and emphasizes relevant aspects. 62 | 63 | **Mission:** Your ability to get a job should be based on your experiences and capabilities, not on your resume writing skills. 64 | ``` 65 | 66 | --- 67 | 68 | ### Usage Example 69 | 70 | ``` 71 | "I want to apply for Principal PM role at Microsoft. Here's the JD: [paste]" 72 | 73 | The skill will automatically: 74 | 1. Build library from existing resumes 75 | 2. Research company and role 76 | 3. Create optimized template (with checkpoint) 77 | 4. Offer branching experience discovery 78 | 5. Match content with confidence scores (with checkpoint) 79 | 6. Generate MD + DOCX + PDF + Report 80 | 7. Optionally update library 81 | ``` 82 | 83 | --- 84 | 85 | ### Prerequisites 86 | 87 | **Required:** 88 | - Claude Code with skills enabled 89 | - Existing resume library (markdown format) 90 | 91 | **Optional:** 92 | - WebSearch capability (for company research) 93 | - document-skills plugin (for DOCX/PDF generation) 94 | 95 | --- 96 | 97 | ### Screenshots to Prepare (Optional but Recommended) 98 | 99 | 1. **Library Analysis** - Shows skill scanning resume directory 100 | 2. **Research Phase** - Company analysis and success profile 101 | 3. **Template Generation** - Role consolidation options 102 | 4. **Experience Discovery** - Branching interview in action 103 | 5. **Content Matching** - Confidence scores and gap analysis 104 | 6. **Final Output** - Generated resume files 105 | 106 | --- 107 | 108 | ### Marketplace Submission Steps 109 | 110 | 1. **Visit Claude Skills Marketplace submission page** 111 | - (Link will be provided by Anthropic) 112 | 113 | 2. **Fill in the form:** 114 | - Repository URL: `https://github.com/varunr89/resume-tailoring-skill` 115 | - Category: Productivity / Career Development 116 | - Tags: resume, job-search, career, recruitment, cv, job-application 117 | - Short description: (see above) 118 | - Long description: (see above) 119 | 120 | 3. **Upload screenshots** (if required) 121 | 122 | 4. **Submit for review** 123 | 124 | 5. **Wait for approval** 125 | 126 | --- 127 | 128 | ### Post-Submission 129 | 130 | Once approved, users can install your skill with: 131 | 132 | ```bash 133 | git clone https://github.com/varunr89/resume-tailoring-skill.git ~/.claude/skills/resume-tailoring 134 | ``` 135 | 136 | Or through the Claude Code skills marketplace interface. 137 | 138 | --- 139 | 140 | ### Maintenance 141 | 142 | **GitHub Issues:** https://github.com/varunr89/resume-tailoring-skill/issues 143 | **GitHub Discussions:** https://github.com/varunr89/resume-tailoring-skill/discussions 144 | 145 | Monitor these for user feedback and bug reports. 146 | 147 | --- 148 | 149 | ### Marketing (Optional) 150 | 151 | **Twitter/X announcement:** 152 | ``` 153 | 🚀 Just released Resume Tailoring Skill for @AnthropicAI Claude Code! 154 | 155 | ✨ AI-powered resume generation with: 156 | - Deep company research 157 | - Experience discovery interviews 158 | - Smart content matching 159 | - Multi-format output 160 | 161 | Your capabilities should get you the job, not your resume writing skills. 162 | 163 | https://github.com/varunr89/resume-tailoring-skill 164 | #ClaudeCode #JobSearch #AI 165 | ``` 166 | 167 | **LinkedIn post:** 168 | ``` 169 | Excited to share my new Claude Code skill: Resume Tailoring 🎉 170 | 171 | This AI-powered tool helps job seekers create tailored resumes by: 172 | - Researching companies and roles deeply 173 | - Surfacing undocumented experiences through conversational discovery 174 | - Matching content with transparent confidence scoring 175 | - Generating professional multi-format outputs 176 | 177 | Built on the principle of truth-preserving optimization - never fabricating experience, but intelligently reframing what you've actually done. 178 | 179 | Open source and free: https://github.com/varunr89/resume-tailoring-skill 180 | 181 | #AI #JobSearch #CareerDevelopment #OpenSource 182 | ``` 183 | 184 | --- 185 | 186 | ### Next Steps 187 | 188 | 1. ✅ Repository is live and ready 189 | 2. ⏳ Submit to Claude Skills Marketplace 190 | 3. ⏳ (Optional) Take screenshots for submission 191 | 4. ⏳ (Optional) Share on social media 192 | 5. ⏳ Monitor issues/discussions for feedback 193 | 194 | --- 195 | 196 | ## Support & Contact 197 | 198 | **GitHub:** https://github.com/varunr89/resume-tailoring-skill 199 | **Author:** Varun Ramesh (@varunr89) 200 | **License:** MIT 201 | 202 | Good luck with your marketplace submission! 🎉 203 | -------------------------------------------------------------------------------- /docs/plans/2025-11-04-multi-job-implementation-summary.md: -------------------------------------------------------------------------------- 1 | # Multi-Job Resume Tailoring - Implementation Summary 2 | 3 | **Status:** Design and Documentation Complete 4 | **Date:** 2025-11-04 5 | **Implementation Plan:** 2025-11-04-multi-job-resume-tailoring-implementation.md 6 | 7 | ## What Was Implemented 8 | 9 | ### Documentation Created 10 | 11 | 1. **Data Structures** 12 | - `docs/schemas/batch-state-schema.md` - Complete batch state schema 13 | - `docs/schemas/job-schema.md` - Job object schema 14 | 15 | 2. **Multi-Job Workflow** 16 | - `multi-job-workflow.md` - Complete multi-job workflow documentation 17 | - Phase 0: Intake & Batch Initialization 18 | - Phase 1: Aggregate Gap Analysis 19 | - Phase 2: Shared Experience Discovery 20 | - Phase 3: Per-Job Processing 21 | - Phase 4: Batch Finalization 22 | - Incremental Batch Support 23 | - Error Handling & Edge Cases 24 | 25 | 3. **Integration** 26 | - Modified `SKILL.md` with multi-job detection and workflow references 27 | - Modified `branching-questions.md` with multi-job context 28 | 29 | 4. **Testing** 30 | - `docs/testing/multi-job-test-checklist.md` - 12 comprehensive test cases 31 | 32 | ## Architecture Summary 33 | 34 | **Approach:** Shared Discovery + Per-Job Tailoring 35 | 36 | **Key Innovation:** Consolidate interactive experience discovery phase (most time-intensive) across all jobs while maintaining full research depth per individual application. 37 | 38 | **Workflow:** 39 | ``` 40 | Intake → Gap Analysis → Shared Discovery → Per-Job Processing → Finalization 41 | (1x) (1x) (1x) (Nx sequential) (1x) 42 | ``` 43 | 44 | **Time Savings:** 45 | - 3 jobs: ~40 min vs ~45 min sequential (11% savings) 46 | - 5 jobs: ~55 min vs ~75 min sequential (27% savings) 47 | 48 | **Quality:** Same depth as single-job workflow 49 | - Full company research per job 50 | - Full role benchmarking per job 51 | - Same matching and generation quality 52 | 53 | ## File Structure Created 54 | 55 | ``` 56 | resume-tailoring/ 57 | ├── SKILL.md (modified) 58 | ├── branching-questions.md (modified) 59 | ├── multi-job-workflow.md (new) 60 | ├── docs/ 61 | │ ├── plans/ 62 | │ │ ├── 2025-11-04-multi-job-resume-tailoring-design.md (existing) 63 | │ │ ├── 2025-11-04-multi-job-resume-tailoring-implementation.md (new) 64 | │ │ └── 2025-11-04-multi-job-implementation-summary.md (this file) 65 | │ ├── schemas/ 66 | │ │ ├── batch-state-schema.md (new) 67 | │ │ └── job-schema.md (new) 68 | │ └── testing/ 69 | │ └── multi-job-test-checklist.md (new) 70 | ``` 71 | 72 | ## Runtime Batch Structure 73 | 74 | When multi-job workflow runs, creates: 75 | 76 | ``` 77 | resumes/batches/batch-{YYYY-MM-DD}-{slug}/ 78 | ├── _batch_state.json # Workflow state tracking 79 | ├── _aggregate_gaps.md # Gap analysis results 80 | ├── _discovered_experiences.md # Discovery session output 81 | ├── _batch_summary.md # Final summary 82 | ├── job-1-{company}/ 83 | │ ├── success_profile.md 84 | │ ├── template.md 85 | │ ├── content_mapping.md 86 | │ ├── {Name}_{Company}_{Role}_Resume.md 87 | │ ├── {Name}_{Company}_{Role}_Resume.docx 88 | │ └── {Name}_{Company}_{Role}_Resume_Report.md 89 | ├── job-2-{company}/ 90 | │ └── (same structure) 91 | └── job-3-{company}/ 92 | └── (same structure) 93 | ``` 94 | 95 | ## Key Features Documented 96 | 97 | 1. **Multi-Job Detection** 98 | - Automatic detection when user provides multiple JDs 99 | - Clear opt-in confirmation with benefits explanation 100 | 101 | 2. **Aggregate Gap Analysis** 102 | - Cross-job requirement extraction 103 | - Deduplication (same skill in multiple JDs) 104 | - Prioritization: Critical (3+ jobs) → Important (2 jobs) → Specific (1 job) 105 | 106 | 3. **Shared Discovery** 107 | - Single branching interview covering all gaps 108 | - Multi-job context for each question 109 | - Experience tagging with job relevance 110 | - Real-time coverage tracking 111 | 112 | 4. **Processing Modes** 113 | - INTERACTIVE: Checkpoints for each job 114 | - EXPRESS: Auto-approve with batch review 115 | 116 | 5. **Incremental Batches** 117 | - Add jobs to existing completed batches 118 | - Incremental gap analysis (only new gaps) 119 | - Smart reuse of previous discoveries 120 | 121 | 6. **Error Handling** 122 | - 7 edge cases documented with handling strategies 123 | - Graceful degradation paths 124 | - Pause/resume support 125 | 126 | 7. **Backward Compatibility** 127 | - Single-job workflow unchanged 128 | - Multi-job only activates when detected 129 | 130 | ## Testing Strategy 131 | 132 | 12 test cases covering: 133 | - Happy path (3 similar jobs) 134 | - Diverse jobs (low overlap) 135 | - Incremental addition 136 | - Pause/resume 137 | - Error handling 138 | - Individual review 139 | - Batch revisions 140 | - Express mode 141 | - Job removal 142 | - Minimal library 143 | - Backward compatibility 144 | - No gaps scenario 145 | 146 | ## Next Steps for Implementation 147 | 148 | This plan creates comprehensive documentation. To implement the actual functionality: 149 | 150 | 1. **Execute this plan** using `superpowers:executing-plans` or `superpowers:subagent-driven-development` 151 | - This plan focuses on documentation 152 | - Actual skill execution logic would be implemented by Claude during runtime 153 | 154 | 2. **Test with real batches** using the testing checklist 155 | - Work through each test case 156 | - Validate time savings and quality 157 | 158 | 3. **Iterate based on usage** 159 | - Collect feedback from real job search batches 160 | - Refine error handling 161 | - Optimize time estimates 162 | 163 | ## Design Principles Applied 164 | 165 | 1. **DRY** - Single discovery phase serves all jobs 166 | 2. **YAGNI** - No features beyond 3-5 job batch use case 167 | 3. **TDD** - Testing checklist comprehensive from start 168 | 4. **User Control** - Checkpoints, modes, review options 169 | 5. **Transparency** - Clear progress, coverage metrics, gap tracking 170 | 6. **Graceful Degradation** - Failures don't block entire batch 171 | 172 | ## Success Criteria 173 | 174 | Implementation successful if: 175 | - [x] Documentation complete and comprehensive 176 | - [ ] 3 jobs process in ~40 minutes (11% time savings) 177 | - [ ] Quality maintained (≥70% JD coverage per job) 178 | - [ ] User experience clear and manageable 179 | - [ ] Library enriched with discoveries 180 | - [ ] Incremental batches work smoothly 181 | - [ ] Single-job workflow unchanged 182 | 183 | ## References 184 | 185 | - **Design Document:** `docs/plans/2025-11-04-multi-job-resume-tailoring-design.md` 186 | - **Implementation Plan:** `docs/plans/2025-11-04-multi-job-resume-tailoring-implementation.md` 187 | - **Original Single-Job Skill:** `SKILL.md` 188 | -------------------------------------------------------------------------------- /branching-questions.md: -------------------------------------------------------------------------------- 1 | # Branching Experience Discovery Questions 2 | 3 | ## Overview 4 | 5 | Conversational discovery with follow-up questions based on answers. NOT a static questionnaire - each answer informs the next question. 6 | 7 | ## Multi-Job Context 8 | 9 | When running discovery for multiple jobs (multi-job mode), provide context about which jobs the gap appears in: 10 | 11 | **Template:** 12 | ``` 13 | "{SKILL} experience appears in {N} of your target jobs ({Company1}, {Company2}, ...). 14 | 15 | This is a {HIGH/MEDIUM/LOW}-LEVERAGE gap - addressing it helps {N/some/one} application(s). 16 | 17 | Current best match: {X}% confidence ('{best_match_text}') 18 | 19 | {Standard branching question}" 20 | ``` 21 | 22 | **Leverage Classification:** 23 | - HIGH-LEVERAGE: Appears in 3+ jobs (critical gaps) 24 | - MEDIUM-LEVERAGE: Appears in 2 jobs (important gaps) 25 | - LOW-LEVERAGE: Appears in 1 job (job-specific gaps) 26 | 27 | **Example:** 28 | 29 | ``` 30 | "Cross-functional leadership appears in 2 of your target jobs (Microsoft, Google). 31 | 32 | This is a MEDIUM-LEVERAGE gap - addressing it helps 2 applications. 33 | 34 | Current best match: 67% confidence ('Led team of 3 engineers on AI project') 35 | 36 | Tell me about times you've led or coordinated across multiple teams or functions." 37 | ``` 38 | 39 | After providing context, proceed with standard branching patterns below. 40 | 41 | ## Technical Skill Gap Pattern 42 | 43 | **Template:** 44 | ``` 45 | INITIAL PROBE: 46 | "I noticed the job requires {SKILL}. Have you worked with {SKILL} or {RELATED_AREA}?" 47 | 48 | BRANCH A - If YES (Direct Experience): 49 | → "Tell me more - what did you use it for?" 50 | → "What scale? {Relevant metric}?" 51 | → "Was this production or development/testing?" 52 | → "What specific challenges did you solve?" 53 | → "Any metrics on {performance/reliability/cost}?" 54 | → CAPTURE: Build detailed bullet 55 | 56 | BRANCH B - If INDIRECT: 57 | → "What was your role in relation to the {SKILL} work?" 58 | → "Did you {action1}, {action2}, or {action3}?" 59 | → "What did you learn about {SKILL}?" 60 | → ASSESS: Transferable experience? 61 | → CAPTURE: Frame as support/enabling role if substantial 62 | 63 | BRANCH C - If ADJACENT: 64 | → "Tell me about your {ADJACENT_TECH} experience" 65 | → "Did you do {relevant_activity}?" 66 | → ASSESS: Close enough to mention? 67 | → CAPTURE: Frame as related expertise 68 | 69 | BRANCH D - If PERSONAL/LEARNING: 70 | → "Any personal projects, courses, or self-learning?" 71 | → "What did you build or deploy?" 72 | → "How recent was this?" 73 | → ASSESS: Strong enough if recent and substantive 74 | → CAPTURE: Consider if gap critical 75 | 76 | BRANCH E - If COMPLETE NO: 77 | → "Any other {broader_category} work?" 78 | → If yes: Explore that 79 | → If no: Move to next gap 80 | ``` 81 | 82 | ## Soft Skill / Experience Gap Pattern 83 | 84 | **Template:** 85 | ``` 86 | INITIAL PROBE: 87 | "The role emphasizes {SOFT_SKILL}. Tell me about times you've {demonstrated_that_skill}." 88 | 89 | BRANCH A - If STRONG EXAMPLE: 90 | → "What {entities} were involved?" 91 | → "What was the challenge?" 92 | → "How did you {drive_outcome}?" 93 | → "What was the result? Metrics?" 94 | → "Any {obstacle} you had to navigate?" 95 | → CAPTURE: Detailed bullet with impact 96 | 97 | BRANCH B - If VAGUE/UNCERTAIN: 98 | → "Let me ask differently - have you ever {reframed_question}?" 99 | → "What was that situation?" 100 | → "How many {stakeholders}?" 101 | → "What made it challenging?" 102 | → CAPTURE: Help articulate clearly 103 | 104 | BRANCH C - If PROJECT-SPECIFIC: 105 | → "Tell me more about that project" 106 | → "What was your role vs. others?" 107 | → "Who did you coordinate with?" 108 | → "How did you ensure alignment?" 109 | → ASSESS: Enough depth? 110 | → CAPTURE: Frame as leadership if substantial 111 | 112 | BRANCH D - If VOLUNTEER/SIDE WORK: 113 | → "Interesting - tell me more" 114 | → "What was scope and timeline?" 115 | → "What skills relate to this job?" 116 | → "Measurable outcomes?" 117 | → ASSESS: Relevant enough? 118 | → CAPTURE: Include if demonstrates capability 119 | ``` 120 | 121 | ## Recent Work Probe Pattern 122 | 123 | **Template:** 124 | ``` 125 | INITIAL PROBE: 126 | "What have you been working on in the last 6 months that isn't in your resumes yet?" 127 | 128 | BRANCH A - If DESCRIBES PROJECT: 129 | → "Tell me more - what was your role?" 130 | → "What technologies/methods?" 131 | → "What problem were you solving?" 132 | → "What was the impact?" 133 | → CHECK: "Does this address {gap_area}?" 134 | → CAPTURE: Create bullet if substantive 135 | 136 | BRANCH B - If MENTIONS MULTIPLE: 137 | → "Let's explore each. Starting with {first}..." 138 | → Go through systematically 139 | → Prioritize by gap relevance 140 | → CAPTURE: Multiple bullets if relevant 141 | 142 | BRANCH C - If "NOTHING NEW": 143 | → "What about small improvements, process changes, learning?" 144 | → "New tools or technologies?" 145 | → "Mentoring, teaching, knowledge sharing?" 146 | → "Anything that might seem too small?" 147 | → CAPTURE: Even small items can fill gaps 148 | ``` 149 | 150 | ## Key Principles 151 | 152 | **1. Start Broad, Go Narrow:** 153 | - Initial question is open-ended 154 | - Follow-ups drill into specifics based on what they share 155 | - Don't ask about details they already covered 156 | 157 | **2. Listen and Branch Dynamically:** 158 | - Promising answer → explore deeper 159 | - "No" answer → try adjacent probe or move on 160 | - Unclear → rephrase or provide examples 161 | - Stuck → offer concrete scenarios 162 | 163 | **3. Adapt to Communication Style:** 164 | - Verbose: "What's the key takeaway?" 165 | - Terse: Provide examples, "Was it like X or Y?" 166 | - Uncertain: Validate, offer prompts 167 | 168 | **4. Recognize When to Move On:** 169 | - After 2-3 attempts with nothing → gracefully move on 170 | - Don't exhaust user forcing content that doesn't exist 171 | - Some gaps okay - flag for cover letter 172 | 173 | **5. Cross-Reference During Discovery:** 174 | - "Earlier you mentioned {X}, does that relate here too?" 175 | - "This sounds similar to {Y} - connected?" 176 | - Build connections user might not see 177 | 178 | ## Example Complete Flow 179 | 180 | ``` 181 | SKILL: "I see the job requires CI/CD experience. Have you worked with CI/CD pipelines?" 182 | 183 | USER: "Yes, I set up GitHub Actions for my side project." 184 | 185 | SKILL: "Tell me more about that - what does the pipeline do?" [BRANCH: Depth] 186 | 187 | USER: "It runs tests and deploys to cloud when I push code." 188 | 189 | SKILL: "What testing framework do you use?" [BRANCH: Technical details] 190 | 191 | USER: "pytest for my Python code." 192 | 193 | SKILL: "Excellent. What's deployed - is this a production app?" [BRANCH: Impact/scale] 194 | 195 | USER: "Yeah, it's a tool used by 3 nonprofits right now." 196 | 197 | SKILL: "That's substantial! Have you dealt with any flaky tests or reliability issues?" 198 | [BRANCH: Real-world challenges] 199 | 200 | USER: "Actually yes, I had to add retries for some API-dependent tests." 201 | 202 | SKILL: "Perfect - that shows practical troubleshooting. Any metrics on build time 203 | or deployment frequency?" [BRANCH: Quantify] 204 | 205 | USER: "Deploys take about 3 minutes, and I deploy several times a week." 206 | 207 | [CAPTURED: Complete picture - hands-on CI/CD, pytest, flaky test handling, 208 | production deployment. Directly fills gap with concrete details.] 209 | ``` 210 | -------------------------------------------------------------------------------- /docs/testing/multi-job-test-checklist.md: -------------------------------------------------------------------------------- 1 | # Multi-Job Resume Tailoring - Testing Checklist 2 | 3 | ## Overview 4 | 5 | Manual testing checklist for validating multi-job workflow functionality. 6 | 7 | ## Pre-Test Setup 8 | 9 | - [ ] Resume library with at least 10 resumes in `resumes/` directory 10 | - [ ] 3-5 job descriptions prepared (mix of similar and diverse roles) 11 | - [ ] Clean test environment (no existing batches in progress) 12 | 13 | --- 14 | 15 | ## Test 1: Happy Path (3 Similar Jobs) 16 | 17 | **Objective:** Validate complete multi-job workflow with typical use case 18 | 19 | **Setup:** 20 | - 3 similar job descriptions (e.g., 3 TPM roles, 3 PM roles, 3 Engineering roles) 21 | - Resume library with 10+ resumes 22 | 23 | **Steps:** 24 | 1. [ ] Provide 3 job descriptions 25 | 2. [ ] Verify multi-job detection triggers 26 | 3. [ ] Confirm multi-job mode 27 | 4. [ ] Complete intake (all 3 jobs collected) 28 | 5. [ ] Verify batch directory created: `resumes/batches/batch-{date}-{slug}/` 29 | 6. [ ] Verify `_batch_state.json` created with 3 jobs 30 | 7. [ ] Complete gap analysis 31 | 8. [ ] Verify `_aggregate_gaps.md` generated 32 | 9. [ ] Check gap deduplication (fewer unique gaps than total gaps) 33 | 10. [ ] Complete discovery session (answer questions for gaps) 34 | 11. [ ] Verify `_discovered_experiences.md` created 35 | 12. [ ] Check experiences tagged with job IDs 36 | 13. [ ] Approve experiences for library integration 37 | 14. [ ] Process Job 1 (INTERACTIVE mode) 38 | - [ ] Research phase completes 39 | - [ ] Success profile presented 40 | - [ ] Template generated and approved 41 | - [ ] Content matching completed and approved 42 | - [ ] Files generated (MD + DOCX + Report) 43 | 15. [ ] Process Job 2 (switch to EXPRESS mode) 44 | - [ ] Auto-proceeds through research/template/matching 45 | - [ ] Files generated without checkpoints 46 | 16. [ ] Process Job 3 (EXPRESS mode) 47 | - [ ] Completes automatically 48 | - [ ] Files generated 49 | 17. [ ] Batch finalization 50 | - [ ] `_batch_summary.md` generated 51 | - [ ] All 3 jobs shown with metrics 52 | - [ ] Review options presented 53 | 18. [ ] Approve all resumes for library 54 | 19. [ ] Verify library updated with 3 new resumes 55 | 20. [ ] Verify discovered experiences added to library 56 | 57 | **Pass Criteria:** 58 | - [ ] All 9 files generated (3 jobs × 3 files) 59 | - [ ] Average JD coverage ≥ 70% 60 | - [ ] No errors in any phase 61 | - [ ] Time < (N × 15 min single-job time) 62 | - [ ] Batch state shows "completed" 63 | 64 | **Expected Time:** ~40 minutes for 3 jobs 65 | 66 | --- 67 | 68 | ## Test 2: Diverse Jobs (Low Overlap) 69 | 70 | **Objective:** Validate detection and handling of dissimilar jobs 71 | 72 | **Setup:** 73 | - 3 very different job descriptions (e.g., TPM, Data Scientist, Marketing Manager) 74 | 75 | **Steps:** 76 | 1. [ ] Provide 3 diverse job descriptions 77 | 2. [ ] Verify multi-job detection triggers 78 | 3. [ ] Complete intake 79 | 4. [ ] Run gap analysis 80 | 5. [ ] Verify diversity detection (< 40% overlap warning) 81 | 6. [ ] Verify recommendation to split batches 82 | 7. [ ] Choose to split into batches OR continue unified 83 | 8. [ ] Complete workflow 84 | 85 | **Pass Criteria:** 86 | - [ ] Diversity warning appears when overlap < 40% 87 | - [ ] Options presented clearly 88 | - [ ] User can choose to split or continue 89 | - [ ] Workflow adapts based on choice 90 | 91 | --- 92 | 93 | ## Test 3: Incremental Batch Addition 94 | 95 | **Objective:** Validate adding jobs to existing completed batch 96 | 97 | **Setup:** 98 | - Completed batch from Test 1 (3 jobs) 99 | - 2 additional job descriptions 100 | 101 | **Steps:** 102 | 1. [ ] Resume batch from Test 1 103 | 2. [ ] Request to add 2 more jobs 104 | 3. [ ] Verify batch loads previous state 105 | 4. [ ] Complete intake for new jobs (Job 4, Job 5) 106 | 5. [ ] Verify incremental gap analysis 107 | 6. [ ] Check that previous gaps are excluded from new analysis 108 | 7. [ ] Verify only NEW gaps identified 109 | 8. [ ] Complete incremental discovery (should be shorter) 110 | 9. [ ] Process new jobs (Job 4, Job 5) 111 | 10. [ ] Verify updated batch summary (now 5 jobs) 112 | 11. [ ] Approve new resumes 113 | 114 | **Pass Criteria:** 115 | - [ ] Previous jobs remain unchanged 116 | - [ ] Only new gaps trigger discovery questions 117 | - [ ] Time for 2 additional jobs < time for 2 from scratch 118 | - [ ] Batch summary shows 5 jobs total 119 | - [ ] Library updated with 2 additional resumes 120 | 121 | **Expected Time Savings:** ~10-15 minutes vs processing 2 jobs from scratch 122 | 123 | --- 124 | 125 | ## Test 4: Pause and Resume 126 | 127 | **Objective:** Validate batch can be paused and resumed later 128 | 129 | **Setup:** 130 | - Start multi-job batch with 3 jobs 131 | 132 | **Steps:** 133 | 1. [ ] Start batch processing 134 | 2. [ ] Complete intake and gap analysis 135 | 3. [ ] Complete discovery 136 | 4. [ ] Complete Job 1 processing 137 | 5. [ ] Pause during Job 2 (say "pause") 138 | 6. [ ] Verify batch state saved 139 | 7. [ ] Verify pause message shows current state 140 | 8. [ ] End session (simulate session close) 141 | 9. [ ] Start new session 142 | 10. [ ] Resume batch (say "resume batch {id}" or "continue my batch") 143 | 11. [ ] Verify batch loads at Job 2 144 | 12. [ ] Complete Job 2 and Job 3 145 | 13. [ ] Finalize batch 146 | 147 | **Pass Criteria:** 148 | - [ ] Batch state accurately saved at pause 149 | - [ ] Resume picks up at exact point (Job 2, correct phase) 150 | - [ ] No data loss (discoveries, completed jobs intact) 151 | - [ ] Workflow completes successfully 152 | 153 | --- 154 | 155 | ## Test 5: Error Handling - Research Failure 156 | 157 | **Objective:** Validate graceful degradation when research fails 158 | 159 | **Setup:** 160 | - 3 job descriptions, one for obscure/nonexistent company 161 | 162 | **Steps:** 163 | 1. [ ] Start batch with 3 jobs (one obscure company) 164 | 2. [ ] Complete intake and gap analysis 165 | 3. [ ] Complete discovery 166 | 4. [ ] Process Job 1 (normal company) - should succeed 167 | 5. [ ] Process Job 2 (obscure company) 168 | 6. [ ] Verify research failure detected 169 | 7. [ ] Verify warning message presented 170 | 8. [ ] Verify fallback to JD-only analysis offered 171 | 9. [ ] Choose fallback option 172 | 10. [ ] Verify Job 2 completes with JD-only analysis 173 | 11. [ ] Process Job 3 (normal company) - should succeed 174 | 12. [ ] Finalize batch 175 | 176 | **Pass Criteria:** 177 | - [ ] Research failure doesn't block entire batch 178 | - [ ] Warning message clear and actionable 179 | - [ ] Fallback options presented 180 | - [ ] Job 2 completes successfully with degraded info 181 | - [ ] Jobs 1 and 3 unaffected 182 | 183 | --- 184 | 185 | ## Test 6: Individual Job Review and Approval 186 | 187 | **Objective:** Validate reviewing and approving jobs individually 188 | 189 | **Setup:** 190 | - Completed batch from Test 1 191 | 192 | **Steps:** 193 | 1. [ ] Complete batch processing (3 jobs) 194 | 2. [ ] Choose "REVIEW INDIVIDUALLY" option 195 | 3. [ ] Review Job 1 196 | - [ ] Verify JD requirements shown 197 | - [ ] Verify coverage metrics shown 198 | - [ ] Verify discovered experiences highlighted 199 | 4. [ ] Approve Job 1 200 | 5. [ ] Review Job 2 201 | 6. [ ] Reject Job 2 (don't add to library) 202 | 7. [ ] Review Job 3 203 | 8. [ ] Request revision for Job 3 204 | 9. [ ] Make changes (e.g., "make summary shorter") 205 | 10. [ ] Re-review Job 3 206 | 11. [ ] Approve Job 3 207 | 12. [ ] Finalize batch 208 | 209 | **Pass Criteria:** 210 | - [ ] Job 1 added to library 211 | - [ ] Job 2 NOT added to library 212 | - [ ] Job 3 revised and then added to library 213 | - [ ] Library updated with only approved jobs (Jobs 1, 3) 214 | - [ ] Batch summary reflects individual decisions 215 | 216 | --- 217 | 218 | ## Test 7: Batch Revision 219 | 220 | **Objective:** Validate making changes across all resumes in batch 221 | 222 | **Setup:** 223 | - Completed batch from Test 1 224 | 225 | **Steps:** 226 | 1. [ ] Complete batch processing (3 jobs) 227 | 2. [ ] Choose "REVISE BATCH" option 228 | 3. [ ] Request batch-wide revision (e.g., "Emphasize leadership in all resumes") 229 | 4. [ ] Verify system identifies affected jobs (all 3) 230 | 5. [ ] Verify re-run of matching/generation for all jobs 231 | 6. [ ] Review revised resumes 232 | 7. [ ] Verify revision applied to all 3 233 | 8. [ ] Approve batch 234 | 235 | **Pass Criteria:** 236 | - [ ] Batch revision applied to all relevant jobs 237 | - [ ] All resumes regenerated correctly 238 | - [ ] Revision reflected in all final resumes 239 | - [ ] Batch finalizes successfully 240 | 241 | --- 242 | 243 | ## Test 8: Express Mode Throughout 244 | 245 | **Objective:** Validate EXPRESS mode with minimal user interaction 246 | 247 | **Setup:** 248 | - 3 similar job descriptions 249 | 250 | **Steps:** 251 | 1. [ ] Start batch 252 | 2. [ ] Complete intake and gap analysis 253 | 3. [ ] Complete discovery 254 | 4. [ ] Choose EXPRESS mode for all jobs 255 | 5. [ ] Verify Jobs 1, 2, 3 process without checkpoints 256 | 6. [ ] Verify files generated for all jobs 257 | 7. [ ] Review all resumes in batch finalization 258 | 8. [ ] Approve all 259 | 260 | **Pass Criteria:** 261 | - [ ] No checkpoints during per-job processing 262 | - [ ] All jobs complete automatically 263 | - [ ] Quality maintained (coverage ≥ 70%) 264 | - [ ] Time significantly faster (no waiting for approvals) 265 | 266 | **Expected Time:** ~30-35 minutes for 3 jobs (vs ~40 with INTERACTIVE) 267 | 268 | --- 269 | 270 | ## Test 9: Remove Job Mid-Process 271 | 272 | **Objective:** Validate removing a job during processing 273 | 274 | **Setup:** 275 | - Start batch with 3 jobs 276 | 277 | **Steps:** 278 | 1. [ ] Complete intake, gap analysis, discovery 279 | 2. [ ] Complete Job 1 processing 280 | 3. [ ] Request to remove Job 2 (say "remove Job 2") 281 | 4. [ ] Verify removal confirmation 282 | 5. [ ] Verify Job 2 files archived (not deleted) 283 | 6. [ ] Verify discovered experiences remain available 284 | 7. [ ] Continue to Job 3 285 | 8. [ ] Complete Job 3 286 | 9. [ ] Finalize batch 287 | 10. [ ] Verify batch summary shows 2 jobs (Jobs 1, 3) 288 | 289 | **Pass Criteria:** 290 | - [ ] Job 2 removed cleanly 291 | - [ ] No errors when continuing to Job 3 292 | - [ ] Batch completes with 2 jobs 293 | - [ ] Batch summary accurate 294 | 295 | --- 296 | 297 | ## Test 10: Minimal Library 298 | 299 | **Objective:** Validate handling of small resume library 300 | 301 | **Setup:** 302 | - Resume library with only 2 resumes 303 | - 3 job descriptions 304 | 305 | **Steps:** 306 | 1. [ ] Start batch with limited library 307 | 2. [ ] Verify warning about limited library 308 | 3. [ ] Complete gap analysis 309 | 4. [ ] Verify many gaps identified (low library coverage) 310 | 5. [ ] Complete discovery (should be longer than typical) 311 | 6. [ ] Verify many new experiences discovered 312 | 7. [ ] Complete batch processing 313 | 8. [ ] Verify resumes generated despite limited starting library 314 | 315 | **Pass Criteria:** 316 | - [ ] Warning about limited library appears 317 | - [ ] Discovery phase captures significant new content 318 | - [ ] Resumes still generated successfully 319 | - [ ] Coverage improves through discovery 320 | - [ ] Library enriched significantly (2 → 5 resumes) 321 | 322 | --- 323 | 324 | ## Test 11: Backward Compatibility (Single-Job) 325 | 326 | **Objective:** Ensure single-job workflow still works unchanged 327 | 328 | **Setup:** 329 | - Single job description (NOT multi-job) 330 | 331 | **Steps:** 332 | 1. [ ] Provide single job description 333 | 2. [ ] Verify multi-job detection does NOT trigger 334 | 3. [ ] Verify standard single-job workflow used (from SKILL.md) 335 | 4. [ ] Complete all phases (library, research, template, matching, generation) 336 | 5. [ ] Verify single resume generated 337 | 6. [ ] Verify no batch directory created 338 | 339 | **Pass Criteria:** 340 | - [ ] Single-job workflow completely unchanged 341 | - [ ] No multi-job artifacts (no batch directory, no batch state) 342 | - [ ] Resume quality same as before multi-job feature 343 | 344 | --- 345 | 346 | ## Test 12: No Gaps Found 347 | 348 | **Objective:** Validate handling when library already covers all requirements 349 | 350 | **Setup:** 351 | - Well-populated library 352 | - 3 job descriptions with requirements matching library well 353 | 354 | **Steps:** 355 | 1. [ ] Start batch 356 | 2. [ ] Complete intake 357 | 3. [ ] Run gap analysis 358 | 4. [ ] Verify high coverage (> 85% for all jobs) 359 | 5. [ ] Verify "no significant gaps" message 360 | 6. [ ] Verify option to skip discovery 361 | 7. [ ] Choose to skip discovery 362 | 8. [ ] Complete per-job processing 363 | 9. [ ] Finalize batch 364 | 365 | **Pass Criteria:** 366 | - [ ] System detects high coverage 367 | - [ ] Option to skip discovery presented 368 | - [ ] Batch completes successfully without discovery 369 | - [ ] Time faster than typical (no discovery phase) 370 | 371 | **Expected Time:** ~25 minutes for 3 jobs (vs ~40 with discovery) 372 | 373 | --- 374 | 375 | ## Regression Testing 376 | 377 | After any changes to multi-job workflow: 378 | 379 | - [ ] Re-run Test 1 (Happy Path) 380 | - [ ] Re-run Test 11 (Backward Compatibility) 381 | - [ ] Verify no existing functionality broken 382 | 383 | --- 384 | 385 | ## Performance Benchmarks 386 | 387 | **Time Targets:** 388 | 389 | | Scenario | Target Time | Sequential Baseline | Time Savings | 390 | |----------|-------------|---------------------|--------------| 391 | | 3 similar jobs | ~40 min | ~45 min (3 × 15) | ~11% | 392 | | 5 similar jobs | ~55 min | ~75 min (5 × 15) | ~27% | 393 | | Add 2 to existing batch | ~20 min | ~30 min (2 × 15) | ~33% | 394 | 395 | **Quality Targets:** 396 | 397 | - Average JD coverage: ≥ 70% 398 | - Direct matches: ≥ 60% 399 | - Critical gap resolution: 100% 400 | 401 | --- 402 | 403 | ## Bug Reporting Template 404 | 405 | If any test fails, report using this template: 406 | 407 | ```markdown 408 | ## Bug Report: {Test Name} - {Failure Description} 409 | 410 | **Test:** Test {N}: {Test Name} 411 | **Step Failed:** Step {N} 412 | **Expected:** {What should happen} 413 | **Actual:** {What actually happened} 414 | **Error Message:** {If applicable} 415 | **Batch State:** {Current batch_state.json contents} 416 | **Files Generated:** {List of files in batch directory} 417 | **Reproduction Steps:** 418 | 1. {Step 1} 419 | 2. {Step 2} 420 | ... 421 | 422 | **Environment:** 423 | - Resume library size: {N resumes} 424 | - Job count: {N jobs} 425 | - Batch ID: {batch_id} 426 | ``` 427 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Resume Tailoring Skill 2 | 3 | > AI-powered resume generation that researches roles, surfaces undocumented experiences, and creates tailored resumes from your existing resume library. 4 | 5 | **Mission:** Your ability to get a job should be based on your experiences and capabilities, not on your resume writing skills. 6 | 7 | [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) 8 | 9 | ## Table of Contents 10 | 11 | - [Overview](#overview) 12 | - [Installation](#installation) 13 | - [Prerequisites](#prerequisites) 14 | - [Quick Start](#quick-start) 15 | - [Key Features](#key-features) 16 | - [Architecture](#architecture) 17 | - [Usage Examples](#usage-examples) 18 | - [Contributing](#contributing) 19 | - [License](#license) 20 | 21 | ## Overview 22 | 23 | This Claude Code skill generates high-quality, tailored resumes optimized for specific job descriptions while maintaining factual integrity. It goes beyond simple keyword matching by: 24 | 25 | - **Multi-Job Batch Processing:** Process 3-5 similar jobs efficiently with shared experience discovery (NEW!) 26 | - **Deep Research:** Analyzes company culture, role requirements, and success profiles 27 | - **Experience Discovery:** Surfaces undocumented experiences through conversational branching interviews 28 | - **Smart Matching:** Uses confidence-scored content selection with transparent gap identification 29 | - **Multi-Format Output:** Generates professional MD, DOCX, PDF, and interview prep reports 30 | - **Self-Improving:** Library grows with each successful resume 31 | 32 | ## Installation 33 | 34 | ### Option 1: Install from GitHub (Recommended) 35 | 36 | 1. **Clone the repository:** 37 | ```bash 38 | git clone https://github.com/varunr89/resume-tailoring-skill.git ~/.claude/skills/resume-tailoring 39 | ``` 40 | 41 | 2. **Verify installation:** 42 | ```bash 43 | ls ~/.claude/skills/resume-tailoring 44 | ``` 45 | You should see: `SKILL.md`, `research-prompts.md`, `matching-strategies.md`, `branching-questions.md`, `README.md` 46 | 47 | 3. **Restart Claude Code** (if already running) 48 | 49 | ### Option 2: Manual Installation 50 | 51 | 1. **Create the skill directory:** 52 | ```bash 53 | mkdir -p ~/.claude/skills/resume-tailoring 54 | ``` 55 | 56 | 2. **Download the files:** 57 | - Download all files from this repository 58 | - Place them in `~/.claude/skills/resume-tailoring/` 59 | 60 | 3. **Verify installation:** 61 | - Open Claude Code 62 | - Type `/skills` to see available skills 63 | - `resume-tailoring` should appear in the list 64 | 65 | ## Prerequisites 66 | 67 | **Required:** 68 | - Claude Code with skills enabled 69 | - Existing resume library (at least 1-2 resumes in markdown format) 70 | 71 | **Optional but Recommended:** 72 | - WebSearch capability (for company research) 73 | - `document-skills` plugin (for DOCX/PDF generation) 74 | - 10+ resumes in your library for best results 75 | 76 | **Resume Library Setup:** 77 | 78 | Create a `resumes/` directory in your project: 79 | ```bash 80 | mkdir -p ~/resumes 81 | ``` 82 | 83 | Add your existing resumes in markdown format: 84 | ``` 85 | ~/resumes/ 86 | ├── Resume_Company1_Role1.md 87 | ├── Resume_Company2_Role2.md 88 | └── Resume_General_2024.md 89 | ``` 90 | 91 | ## Quick Start 92 | 93 | ### Single Job Application 94 | **1. Invoke the skill in Claude Code:** 95 | ``` 96 | "I want to apply for [Role] at [Company]. Here's the JD: [paste job description]" 97 | ``` 98 | 99 | **2. The skill will automatically:** 100 | 1. Build library from existing resumes 101 | 2. Research company and role 102 | 3. Create optimized template (with checkpoint) 103 | 4. Offer branching experience discovery 104 | 5. Match content with confidence scores (with checkpoint) 105 | 6. Generate MD + DOCX + PDF + Report 106 | 7. Optionally update library 107 | 108 | **3. Review and approve:** 109 | - Checkpoints at key decision points 110 | - Full transparency on content matching 111 | - Option to revise or approve at each stage 112 | 113 | ### Multiple Jobs (Batch Mode - NEW!) 114 | **1. Provide multiple job descriptions:** 115 | ``` 116 | "I want to apply for these 3 roles: 117 | 1. [Company 1] - [Role]: [JD or URL] 118 | 2. [Company 2] - [Role]: [JD or URL] 119 | 3. [Company 3] - [Role]: [JD or URL]" 120 | ``` 121 | 122 | **2. The skill will:** 123 | 1. Detect multi-job intent and offer batch mode 124 | 2. Build library once (shared across all jobs) 125 | 3. Analyze gaps across ALL jobs (deduplicates common requirements) 126 | 4. Conduct single discovery session addressing all gaps 127 | 5. Process each job individually (research + tailoring) 128 | 6. Present all resumes for batch review 129 | 130 | **3. Time savings:** 131 | - Shared discovery session (ask once, not 3-5 times) 132 | - 11-27% faster than processing jobs sequentially 133 | - Same quality as single-job mode 134 | 135 | ## Files 136 | 137 | ### Core Implementation 138 | - `SKILL.md` - Main skill implementation with single-job and multi-job workflows 139 | - `multi-job-workflow.md` - Complete multi-job batch processing workflow 140 | - `research-prompts.md` - Company/role research templates 141 | - `matching-strategies.md` - Content scoring algorithms 142 | - `branching-questions.md` - Experience discovery patterns 143 | 144 | ### Documentation 145 | - `README.md` - This file 146 | - `MARKETPLACE.md` - Marketplace listing information 147 | - `SUBMISSION_GUIDE.md` - Skill submission guidelines 148 | 149 | ### Supporting Documentation (`docs/`) 150 | - `docs/schemas/` - Data structure schemas for batch processing 151 | - `batch-state-schema.md` - Batch state tracking structure 152 | - `job-schema.md` - Job object schema 153 | - `docs/plans/` - Design documents and implementation plans 154 | - `2025-11-04-multi-job-resume-tailoring-design.md` - Multi-job feature design 155 | - `2025-11-04-multi-job-implementation-summary.md` - Implementation summary 156 | - `docs/testing/` - Testing checklists 157 | - `multi-job-test-checklist.md` - Comprehensive multi-job test cases 158 | 159 | ## Key Features 160 | 161 | **🚀 Multi-Job Batch Processing (NEW!)** 162 | - Process 3-5 similar jobs efficiently 163 | - Shared experience discovery (ask once, apply to all) 164 | - Aggregate gap analysis with deduplication 165 | - Time savings: 11-27% faster than sequential processing 166 | - Incremental batches (add more jobs later) 167 | 168 | **🔍 Deep Research** 169 | - Company culture and values 170 | - Role benchmarking via LinkedIn 171 | - Success profile synthesis 172 | 173 | **💬 Branching Discovery** 174 | - Conversational experience surfacing 175 | - Dynamic follow-up questions 176 | - Surfaces undocumented work 177 | - Multi-job context awareness 178 | 179 | **🎯 Smart Matching** 180 | - Confidence-scored content selection 181 | - Transparent gap identification 182 | - Truth-preserving reframing 183 | 184 | **📄 Multi-Format Output** 185 | - Professional markdown 186 | - ATS-friendly DOCX 187 | - Print-ready PDF 188 | - Interview prep report 189 | 190 | **🔄 Self-Improving** 191 | - Library grows with each resume 192 | - Successful patterns reused 193 | - New experiences captured 194 | 195 | ## Architecture 196 | 197 | ### Single-Job Workflow 198 | ``` 199 | Phase 0: Library Build (always first) 200 | ↓ 201 | Phase 1: Research (JD + Company + Role) 202 | ↓ 203 | Phase 2: Template (Structure + Titles) 204 | ↓ [CHECKPOINT] 205 | Phase 2.5: Experience Discovery (Optional, Branching) 206 | ↓ 207 | Phase 3: Assembly (Matching + Scoring) 208 | ↓ [CHECKPOINT] 209 | Phase 4: Generation (MD + DOCX + PDF + Report) 210 | ↓ [USER REVIEW] 211 | Phase 5: Library Update (Conditional) 212 | ``` 213 | 214 | ### Multi-Job Workflow (NEW!) 215 | ``` 216 | Phase 0: Intake & Batch Initialization 217 | ↓ 218 | Phase 1: Aggregate Gap Analysis (deduplicates across all jobs) 219 | ↓ 220 | Phase 2: Shared Experience Discovery (ask once, apply to all) 221 | ↓ 222 | Phase 3: Per-Job Processing (research + template + matching + generation for each) 223 | ↓ 224 | Phase 4: Batch Finalization (review all resumes, update library) 225 | ``` 226 | 227 | **Time Savings:** 228 | - 3 jobs: ~40 min vs ~45 min sequential (11% savings) 229 | - 5 jobs: ~55 min vs ~75 min sequential (27% savings) 230 | 231 | See `multi-job-workflow.md` for complete details. 232 | 233 | ## Design Philosophy 234 | 235 | **Truth-Preserving Optimization:** 236 | - NEVER fabricate experience 237 | - Intelligently reframe and emphasize 238 | - Transparent about gaps 239 | 240 | **Holistic Person Focus:** 241 | - Surface undocumented experiences 242 | - Value volunteer work, side projects 243 | - Build around complete background 244 | 245 | **User Control:** 246 | - Checkpoints at key decisions 247 | - Options, not mandates 248 | - Can adjust or go back 249 | 250 | ## Usage Examples 251 | 252 | ### Example 1: Internal Role Transfer 253 | 254 | ``` 255 | USER: "I want to apply for Principal PM role in 1ES team at Microsoft. 256 | Here's the JD: [paste]" 257 | 258 | RESULT: 259 | - Found 29 existing resumes 260 | - Researched Microsoft 1ES team culture 261 | - Featured PM2 Azure Eng Systems experience 262 | - Discovered: VS Code extension, AI side projects 263 | - 92% JD coverage, 75% direct matches 264 | - Generated tailored resume + interview prep report 265 | ``` 266 | 267 | ### Example 2: Career Transition 268 | 269 | ``` 270 | USER: "I'm a TPM transitioning to ecology PM. JD: [paste]" 271 | 272 | RESULT: 273 | - Reframed "Technical Program Manager" → "Program Manager, Environmental Systems" 274 | - Surfaced volunteer conservation work 275 | - Identified graduate research in environmental modeling 276 | - 65% JD coverage with clear gap analysis 277 | - Cover letter recommendations provided 278 | ``` 279 | 280 | ### Example 3: Career Gap Handling 281 | 282 | ``` 283 | USER: "I have a 2-year gap from starting a company. JD: [paste]" 284 | 285 | RESULT: 286 | - Included startup as legitimate role 287 | - Surfaced: fundraising, product development, team building 288 | - Framed gap as entrepreneurial experience 289 | - Generated resume showing initiative and diverse skills 290 | ``` 291 | 292 | ### Example 4: Multi-Job Batch (NEW!) 293 | 294 | ``` 295 | USER: "I want to apply for these 3 TPM roles: 296 | 1. Microsoft 1ES Principal PM 297 | 2. Google Cloud Senior TPM 298 | 3. AWS Container Services Senior PM" 299 | 300 | RESULT: 301 | - Detected multi-job mode, user confirmed 302 | - Built library once (29 resumes) 303 | - Gap analysis: 14 total gaps, 8 unique after deduplication 304 | - Shared discovery: 30-min session surfaced 5 new experiences 305 | * Kubernetes CI/CD for nonprofits 306 | * Azure migration for university lab 307 | * Cross-functional leadership examples 308 | - Processed 3 jobs: 85%, 88%, 78% JD coverage 309 | - Time: 40 minutes vs 45 minutes sequential (11% savings) 310 | - All 3 resumes + batch summary generated 311 | ``` 312 | 313 | ### Example 5: Incremental Batch Addition (NEW!) 314 | 315 | ``` 316 | WEEK 1: User processes 3 jobs (Microsoft, Google, AWS) in 40 minutes 317 | 318 | WEEK 2: 319 | USER: "I found 2 more jobs at Stripe and Meta. Add them to my batch?" 320 | 321 | RESULT: 322 | - Loaded existing batch with 5 previously discovered experiences 323 | - Incremental gap analysis: only 3 new gaps (vs 14 original) 324 | - Quick 10-min discovery session for new gaps only 325 | - Processed 2 additional jobs: 82%, 76% coverage 326 | - Time: 20 minutes (vs 30 if starting from scratch) 327 | - Total: 5 jobs, 8 experiences discovered 328 | ``` 329 | 330 | ## Usage Patterns 331 | 332 | **Internal role (same company):** 333 | - Features most relevant internal experience 334 | - Uses internal terminology 335 | - Leverages organizational knowledge 336 | 337 | **External role (new company):** 338 | - Deep company research 339 | - Cultural fit emphasis 340 | - Risk mitigation 341 | 342 | **Career transition:** 343 | - Title reframing 344 | - Transferable skill emphasis 345 | - Bridge domain gaps 346 | 347 | **With career gaps:** 348 | - Gaps as valuable experience 349 | - Alternative activities highlighted 350 | - Truthful, positive framing 351 | 352 | ## Testing 353 | 354 | ### Single-Job Tests 355 | See Testing Guidelines section in SKILL.md (lines 1244-1320) 356 | 357 | **Key test scenarios:** 358 | - Happy path (full workflow) 359 | - Minimal library (2 resumes) 360 | - Research failures (obscure company) 361 | - Experience discovery value 362 | - Title reframing accuracy 363 | - Multi-format generation 364 | 365 | ### Multi-Job Tests (NEW!) 366 | See `docs/testing/multi-job-test-checklist.md` for comprehensive test cases 367 | 368 | **Key multi-job scenarios:** 369 | - Happy path (3 similar jobs) 370 | - Diverse jobs (low overlap detection) 371 | - Incremental batch addition 372 | - Pause/resume functionality 373 | - Individual vs batch review 374 | - Express mode processing 375 | - Error handling and graceful degradation 376 | 377 | **Run tests:** 378 | ```bash 379 | cd ~/.claude/skills/resume-tailoring 380 | # Single-job: Follow test procedures in SKILL.md Testing Guidelines section 381 | # Multi-job: Follow docs/testing/multi-job-test-checklist.md 382 | ``` 383 | 384 | ## Contributing 385 | 386 | Contributions are welcome! Please follow these guidelines: 387 | 388 | 1. **Fork the repository** 389 | 2. **Create a feature branch:** `git checkout -b feature/amazing-feature` 390 | 3. **Make your changes:** 391 | - Update `SKILL.md` for implementation changes 392 | - Add tests if applicable 393 | - Update README if architecture changes 394 | 4. **Commit with descriptive messages:** `git commit -m "feat: add amazing feature"` 395 | 5. **Push to your fork:** `git push origin feature/amazing-feature` 396 | 6. **Open a Pull Request** 397 | 398 | **Before submitting:** 399 | - Run regression tests (see Testing section in SKILL.md) 400 | - Ensure all phases work end-to-end 401 | - Update documentation 402 | 403 | ## Troubleshooting 404 | 405 | **Skill not appearing:** 406 | - Verify files are in `~/.claude/skills/resume-tailoring/` 407 | - Restart Claude Code 408 | - Check SKILL.md has valid YAML frontmatter 409 | 410 | **Research phase failing:** 411 | - Check WebSearch capability is enabled 412 | - Skill will gracefully fall back to JD-only analysis 413 | 414 | **DOCX/PDF generation failing:** 415 | - Ensure `document-skills` plugin is installed 416 | - Skill will fall back to markdown-only output 417 | 418 | **Low match confidence:** 419 | - Try the Experience Discovery phase 420 | - Consider adding more resumes to your library 421 | - Review gap handling recommendations 422 | 423 | ## License 424 | 425 | This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. 426 | 427 | ## Acknowledgments 428 | 429 | - Built for Claude Code skills framework 430 | - Designed with truth-preserving optimization principles 431 | - Inspired by the belief that job opportunities should be based on capabilities, not resume writing skills 432 | 433 | ## Support 434 | 435 | - **Issues:** [GitHub Issues](https://github.com/varunr89/resume-tailoring-skill/issues) 436 | - **Discussions:** [GitHub Discussions](https://github.com/varunr89/resume-tailoring-skill/discussions) 437 | 438 | ## Roadmap 439 | 440 | - [ ] Cover letter generation integration 441 | - [ ] LinkedIn profile optimization 442 | - [ ] Interview preparation Q&A generation 443 | - [ ] Multi-language resume support 444 | - [ ] Custom industry templates 445 | -------------------------------------------------------------------------------- /docs/plans/2025-11-04-multi-job-resume-tailoring-design.md: -------------------------------------------------------------------------------- 1 | # Multi-Job Resume Tailoring - Design Document 2 | 3 | **Date:** 2025-11-04 4 | **Purpose:** Extend the resume-tailoring skill to handle multiple job applications efficiently while maintaining research depth and quality 5 | 6 | ## Overview 7 | 8 | The current resume-tailoring skill produces high-quality, deeply researched resumes but processes one job at a time. This creates inefficiency when applying to multiple similar positions - the interactive experience discovery phase repeats similar questions for each job, and discovered experiences can't benefit other applications. 9 | 10 | **Solution:** Shared Discovery + Per-Job Tailoring architecture that consolidates the most time-intensive interactive phase (experience discovery) across multiple jobs while maintaining full research depth for each individual application. 11 | 12 | **Target Use Case:** 13 | - Small batches (3-5 jobs at a time) 14 | - Moderately similar roles (e.g., TPM, Senior PM, Principal Engineer - adjacent roles with overlapping skills) 15 | - Continuous workflow (add jobs incrementally over days/weeks) 16 | - Preserve depth in: role benchmarking, interactive discovery, content matching 17 | 18 | ## Architecture: Shared Discovery + Per-Job Tailoring 19 | 20 | ### High-Level Workflow 21 | 22 | ``` 23 | INTAKE PHASE 24 | ├─ User provides 3-5 job descriptions (text or URLs) 25 | ├─ Library initialization (existing Phase 0) 26 | └─ Quick JD parsing for each job → extract requirements 27 | 28 | AGGREGATE GAP ANALYSIS 29 | ├─ For each JD: identify required skills/experiences 30 | ├─ Cross-reference ALL requirements against library 31 | ├─ Build unified gap list across all jobs 32 | └─ Deduplicate overlapping gaps (e.g., "Kubernetes" appears in 3 JDs) 33 | 34 | SHARED EXPERIENCE DISCOVERY (Interactive) 35 | ├─ Present aggregate gaps to user 36 | ├─ Single branching interview session covering all gaps 37 | ├─ Captured experiences tagged with which jobs they address 38 | └─ Enrich library with all discovered content 39 | 40 | PER-JOB PROCESSING (Sequential with optional express mode) 41 | ├─ For each job independently: 42 | │ ├─ Phase 1: Research (role benchmarking, company culture) 43 | │ ├─ Phase 2: Template generation 44 | │ ├─ Phase 3: Content matching (uses enriched library) 45 | │ └─ Phase 4: Generation (MD + DOCX + Report) 46 | └─ User reviews checkpoints (interactive) or auto-approves (express) 47 | 48 | BATCH FINALIZATION 49 | ├─ User reviews all N resumes together 50 | ├─ Approve/revise individual resumes 51 | └─ Optional: Update library with approved resumes 52 | ``` 53 | 54 | ### Key Architectural Decision 55 | 56 | **Why consolidate discovery but not research?** 57 | 58 | The time profile of single-job workflow: 59 | - Library Init: 1 min (one-time) 60 | - Research: 3 min (per-job, varies by company) 61 | - Template: 2 min (per-job, quick) 62 | - **Discovery: 5-7 min (per-job, highly interactive)** 63 | - Matching: 2 min (per-job, automated) 64 | - Generation: 1 min (per-job, automated) 65 | 66 | For 3 jobs with 60% overlapping requirements: 67 | - **Sequential single-job:** 3 × 7 min = 21 minutes of discovery, asking similar questions repeatedly 68 | - **Shared discovery:** 1 × 15 min = 15 minutes covering all gaps once 69 | 70 | Discovery is: 71 | 1. Most time-intensive interactive phase 72 | 2. Most repetitive across similar jobs (same gaps appear multiple times) 73 | 3. Most beneficial when shared (one discovered experience helps multiple applications) 74 | 75 | Research is: 76 | 1. Company-specific (not redundant across jobs) 77 | 2. Critical for quality differentiation (LinkedIn role benchmarking creates competitive advantage) 78 | 3. Fast enough that consolidation isn't worth complexity 79 | 80 | **Result:** Consolidate discovery (high leverage), maintain per-job research (high value). 81 | 82 | ## Detailed Phase Specifications 83 | 84 | ### Phase 0: Intake & Job Management 85 | 86 | **User Interaction:** 87 | 88 | ``` 89 | USER: "I want to apply for multiple jobs. Here are the JDs..." 90 | 91 | SKILL: "I see you have multiple jobs. Let me set up multi-job mode. 92 | 93 | How would you like to provide the job descriptions? 94 | - Paste them all now (recommended for batch efficiency) 95 | - Provide them one at a time 96 | 97 | For each job, I need: 98 | 1. Job description (text or URL) 99 | 2. Company name (if not in JD) 100 | 3. Role title (if not in JD) 101 | 4. Optional: Priority/notes for this job" 102 | ``` 103 | 104 | **Data Structure:** 105 | 106 | ```json 107 | { 108 | "batch_id": "batch-2025-11-04-job-search", 109 | "created": "2025-11-04T10:30:00Z", 110 | "jobs": [ 111 | { 112 | "job_id": "job-1", 113 | "company": "Microsoft", 114 | "role": "Principal PM - 1ES", 115 | "jd_text": "...", 116 | "jd_url": "https://...", 117 | "priority": "high", 118 | "notes": "Internal referral from Alice", 119 | "status": "pending" 120 | }, 121 | { 122 | "job_id": "job-2", 123 | "company": "Google", 124 | "role": "Senior TPM - Cloud Infrastructure", 125 | "jd_text": "...", 126 | "status": "pending" 127 | } 128 | ] 129 | } 130 | ``` 131 | 132 | **Quick JD Parsing:** 133 | 134 | For each job, lightweight extraction (NOT full research): 135 | - Must-have requirements 136 | - Nice-to-have requirements 137 | - Key technical skills 138 | - Soft skills 139 | - Domain knowledge areas 140 | 141 | Purpose: Just enough to identify gaps for discovery phase. 142 | 143 | ### Phase 1: Aggregate Gap Analysis 144 | 145 | **Goal:** Build unified gap list across all jobs to guide one efficient discovery session. 146 | 147 | **Process:** 148 | 149 | 1. **Extract requirements from all JDs:** 150 | ``` 151 | Job 1 (Microsoft 1ES): Kubernetes, CI/CD, cross-functional leadership, Azure 152 | Job 2 (Google Cloud): Kubernetes, GCP, distributed systems, team management 153 | Job 3 (AWS): Container orchestration, AWS services, program management 154 | ``` 155 | 156 | 2. **Match against current library:** 157 | - For each requirement across all jobs 158 | - Check library for matching experiences 159 | - Score confidence (using existing matching logic) 160 | - Flag as gap if confidence < 60% 161 | 162 | 3. **Build aggregate gap map:** 163 | 164 | ```markdown 165 | ## Aggregate Gap Analysis 166 | 167 | ### Critical Gaps (appear in 3+ jobs): 168 | - **Kubernetes at scale**: Jobs 1, 2, 3 (current best match: 45%) 169 | 170 | ### Important Gaps (appear in 2 jobs): 171 | - **CI/CD pipeline management**: Jobs 1, 2 (current best match: 58%) 172 | - **Cloud-native architecture**: Jobs 2, 3 (current best match: 52%) 173 | 174 | ### Job-Specific Gaps: 175 | - **Azure-specific experience**: Job 1 only (current best match: 40%) 176 | - **GCP experience**: Job 2 only (current best match: 35%) 177 | ``` 178 | 179 | 4. **Prioritize for discovery:** 180 | - Gaps appearing in multiple jobs first (highest leverage) 181 | - High-priority jobs get their specific gaps addressed 182 | - Critical gaps (confidence <45%) before weak gaps (45-60%) 183 | 184 | **Output to User:** 185 | 186 | ``` 187 | "I've analyzed all 3 job descriptions against your resume library. 188 | 189 | COVERAGE SUMMARY: 190 | - Job 1 (Microsoft): 68% coverage, 5 gaps 191 | - Job 2 (Google): 72% coverage, 4 gaps 192 | - Job 3 (AWS): 65% coverage, 6 gaps 193 | 194 | AGGREGATE GAPS (14 total, 8 unique after deduplication): 195 | - 3 critical gaps (appear in all jobs) 196 | - 4 important gaps (appear in 2 jobs) 197 | - 1 job-specific gap 198 | 199 | I recommend a 15-20 minute experience discovery session to address these gaps. 200 | This will benefit all 3 applications. Ready to start?" 201 | ``` 202 | 203 | ### Phase 2: Shared Experience Discovery 204 | 205 | **Core Principle:** Same branching interview process from `branching-questions.md`, but with multi-job context. 206 | 207 | **Single-Job Version:** 208 | ``` 209 | "I noticed the job requires Kubernetes experience. Have you worked with Kubernetes?" 210 | ``` 211 | 212 | **Multi-Job Version:** 213 | ``` 214 | "Kubernetes experience appears in 3 of your target jobs (Microsoft, Google, AWS). 215 | This is a high-leverage gap - addressing it helps multiple applications. 216 | 217 | Have you worked with Kubernetes or container orchestration?" 218 | ``` 219 | 220 | **Discovery Session Flow:** 221 | 222 | 1. **Start with highest-leverage gaps** (appear in most jobs) 223 | 224 | 2. **For each gap, conduct branching interview:** 225 | - Initial probe (contextualized with job relevance) 226 | - Branch based on answer (YES/INDIRECT/ADJACENT/PERSONAL/NO) 227 | - Drill into specifics (scale, metrics, challenges) 228 | - Capture immediately with job tags 229 | 230 | 3. **Tag discovered experiences with job relevance:** 231 | 232 | ```markdown 233 | ## Newly Discovered Experiences 234 | 235 | ### Experience 1: Kubernetes CI/CD for nonprofit project 236 | - Context: Side project, 2023-2024, production deployment 237 | - Scope: GitHub Actions pipeline, 3 nonprofits using it, pytest integration 238 | - **Addresses gaps in:** Jobs 1, 2, 3 (Kubernetes), Jobs 1, 2 (CI/CD) 239 | - Bullet draft: "Designed and implemented Kubernetes-based CI/CD pipeline 240 | using GitHub Actions and pytest, supporting production deployments for 241 | 3 nonprofit organizations" 242 | - Confidence improvement: 243 | - Kubernetes: 45% → 75% 244 | - CI/CD: 58% → 82% 245 | ``` 246 | 247 | 4. **Track coverage improvement in real-time:** 248 | 249 | ``` 250 | After discovering 3 experiences: 251 | 252 | UPDATED COVERAGE: 253 | - Job 1 (Microsoft): 68% → 85% (+17%) 254 | - Job 2 (Google): 72% → 88% (+16%) 255 | - Job 3 (AWS): 65% → 78% (+13%) 256 | 257 | Remaining gaps: 5 (down from 14) 258 | ``` 259 | 260 | 5. **Time-box intelligently:** 261 | - Critical gaps (3+ jobs): 5-7 minutes each 262 | - Important gaps (2 jobs): 3-5 minutes each 263 | - Job-specific gaps: 2-3 minutes each 264 | - Total: ~15-20 minutes for typical 3-job batch 265 | 266 | **Integration Decision Per Experience:** 267 | 268 | ``` 269 | "Great! I captured 5 new experiences addressing gaps across your jobs. 270 | 271 | For each experience, how should I integrate it? 272 | 273 | Experience 1 (Kubernetes CI/CD): 274 | └─ Addresses gaps in: Jobs 1, 2, 3 275 | Options: [Add to library for all jobs] [Add to library, use selectively] [Skip] 276 | 277 | Experience 2 (Azure migration project): 278 | └─ Addresses gap in: Job 1 only 279 | Options: [Add to library] [Skip] 280 | ``` 281 | 282 | **Result:** Enriched library ready for per-job processing. 283 | 284 | ### Phase 3: Per-Job Processing 285 | 286 | **Key Insight:** Once discovery is complete, each job can be processed independently. 287 | 288 | **For Each Job:** 289 | 290 | **3.1 Research** (same depth as current single-job workflow) 291 | - Company research via WebSearch (mission, values, culture, news) 292 | - Role benchmarking via LinkedIn (find 3-5 similar role holders) 293 | - Success profile synthesis 294 | - **Checkpoint:** Present success profile to user 295 | 296 | **3.2 Template Generation** 297 | - Role consolidation decisions 298 | - Title reframing options 299 | - Bullet allocation 300 | - **Checkpoint:** Approve template structure 301 | 302 | **3.3 Content Matching** 303 | - Match content using enriched library (includes discovered experiences) 304 | - Confidence scoring (Direct/Transferable/Adjacent) 305 | - Reframing suggestions 306 | - Gap identification (should be minimal after discovery) 307 | - **Checkpoint:** Approve content mapping 308 | 309 | **3.4 Generation** 310 | - Generate MD + DOCX + Report 311 | - No checkpoint - just generate files 312 | 313 | **Processing Modes:** 314 | 315 | ``` 316 | "Discovery complete! Now processing each job individually. 317 | 318 | Processing mode: 319 | 1. INTERACTIVE (default): I'll show you checkpoints for each job 320 | 2. EXPRESS: Auto-approve templates/matching using best judgement, 321 | you review all final resumes together 322 | 323 | Recommended: INTERACTIVE for first 1-2 jobs, then EXPRESS if you 324 | like the pattern." 325 | ``` 326 | 327 | **Why Sequential Not Parallel:** 328 | - User needs to review checkpoints (interactive mode) 329 | - Express mode could theoretically parallelize, but adds complexity 330 | - Sequential provides clear progress tracking 331 | - 3 jobs × 8 min/job = 24 minutes is acceptable 332 | 333 | ### Phase 4: Batch Finalization 334 | 335 | **Output to User:** 336 | 337 | ``` 338 | "All 3 resumes generated! Here's your batch summary: 339 | 340 | JOB SUMMARIES: 341 | ┌─────────────────────────────────────────────────────────────┐ 342 | │ Job 1: Principal PM - Microsoft 1ES │ 343 | │ Coverage: 85% | Direct matches: 78% | Files: ✓ MD ✓ DOCX │ 344 | │ Key strengths: Azure infra, cross-functional leadership │ 345 | │ Remaining gaps: None critical │ 346 | └─────────────────────────────────────────────────────────────┘ 347 | 348 | ┌─────────────────────────────────────────────────────────────┐ 349 | │ Job 2: Senior TPM - Google Cloud Infrastructure │ 350 | │ Coverage: 88% | Direct matches: 72% | Files: ✓ MD ✓ DOCX │ 351 | │ Key strengths: K8s experience, distributed systems │ 352 | │ Remaining gaps: GCP-specific (low priority) │ 353 | └─────────────────────────────────────────────────────────────┘ 354 | 355 | ┌─────────────────────────────────────────────────────────────┐ 356 | │ Job 3: Senior PM - AWS Container Services │ 357 | │ Coverage: 78% | Direct matches: 68% | Files: ✓ MD ✓ DOCX │ 358 | │ Key strengths: Container orchestration, program mgmt │ 359 | │ Remaining gaps: AWS-specific (addressed in cover letter) │ 360 | └─────────────────────────────────────────────────────────────┘ 361 | 362 | BATCH STATISTICS: 363 | - Total discovered experiences: 5 364 | - Average coverage improvement: +16% 365 | - Total files created: 9 (3 × MD + DOCX + Report) 366 | 367 | FILES LOCATION: 368 | resumes/batches/batch-2025-11-04-job-search/ 369 | ├── job-1-microsoft/ 370 | │ ├── Varun_Ramesh_Microsoft_1ES_Principal_PM_Resume.md 371 | │ ├── Varun_Ramesh_Microsoft_1ES_Principal_PM_Resume.docx 372 | │ └── Varun_Ramesh_Microsoft_1ES_Principal_PM_Resume_Report.md 373 | ├── job-2-google/ 374 | │ └── ... (3 files) 375 | ├── job-3-aws/ 376 | │ └── ... (3 files) 377 | ├── _batch_summary.md 378 | ├── _aggregate_gaps.md 379 | └── _discovered_experiences.md 380 | 381 | Review options: 382 | 1. APPROVE ALL - Save all resumes to library 383 | 2. REVIEW INDIVIDUALLY - Approve/revise each resume separately 384 | 3. REVISE BATCH - Make changes across multiple resumes 385 | 4. SAVE BUT DON'T UPDATE LIBRARY - Keep files, don't enrich library 386 | ``` 387 | 388 | **Individual Review Flow** (Option 2): 389 | - For each resume: show JD requirements vs. resume coverage 390 | - Highlight newly discovered experiences used 391 | - Allow revisions 392 | - Approve/reject for library individually 393 | 394 | **Batch Revision Flow** (Option 3): 395 | ``` 396 | "What would you like to change across the batch?" 397 | 398 | Common batch revisions: 399 | - "Make all summaries shorter" 400 | - "Emphasize leadership more in all resumes" 401 | - "Remove mentions of X technology from all" 402 | - "Use title 'Senior Technical Program Manager' consistently" 403 | 404 | System reruns matching/generation for affected resumes. 405 | ``` 406 | 407 | **Library Update:** 408 | ``` 409 | If approved: 410 | - Add all N resumes to library 411 | - Add discovered experiences to database (tagged with: discovered_date, 412 | addressed_gaps, used_in_jobs) 413 | - Rebuild library indices 414 | 415 | Result: 416 | "Library updated! 417 | - New resumes: 3 418 | - New experiences: 5 419 | - Your library now has 32 resumes total 420 | 421 | These experiences are now available for future applications." 422 | ``` 423 | 424 | ## Continuous Workflow Support 425 | 426 | ### Adding Jobs to Existing Batch 427 | 428 | **Scenario:** User processes 3 jobs today, finds 2 more jobs next week. 429 | 430 | ``` 431 | USER: "I found 2 more jobs I want to apply for. Can you add them to my batch?" 432 | 433 | SKILL: "Sure! I'll add them to your existing batch. 434 | 435 | Current batch: 3 jobs (completed) 436 | New jobs: 2 437 | 438 | I'll do an incremental gap analysis: 439 | - Check new JDs against your enriched library (includes the 5 experiences 440 | we discovered last week) 441 | - Identify only NEW gaps not covered by existing discoveries 442 | - Run discovery session ONLY for new gaps (not re-asking old questions) 443 | 444 | This should be much faster than the first session." 445 | ``` 446 | 447 | ### Incremental Gap Analysis 448 | 449 | ``` 450 | NEW GAP ANALYSIS: 451 | - Job 4 (Stripe): 82% coverage with existing library 452 | - Job 5 (Meta): 75% coverage with existing library 453 | 454 | NEW GAPS (3 total): 455 | - Payment systems experience (Job 4 only) 456 | - Large-scale social networking (Job 5 only) 457 | - React/frontend (Jobs 4, 5) 458 | 459 | Previous discoveries already cover: 460 | - Kubernetes ✓ (from first batch) 461 | - CI/CD ✓ (from first batch) 462 | - Cross-functional leadership ✓ (from first batch) 463 | 464 | Estimated discovery time: 5-10 minutes (vs 20 minutes for first batch) 465 | 466 | Ready for incremental discovery? 467 | ``` 468 | 469 | **Smart Reuse:** System remembers what's been asked, doesn't repeat questions, only explores genuinely new gaps. 470 | 471 | ## Data Persistence 472 | 473 | ### File Structure 474 | 475 | ``` 476 | resumes/batches/ 477 | └── batch-2025-11-04-job-search/ 478 | ├── _batch_state.json # Workflow state 479 | ├── _aggregate_gaps.md # Gap analysis results 480 | ├── _discovered_experiences.md # Discovery session output 481 | ├── _batch_summary.md # Final summary 482 | ├── job-1-microsoft/ 483 | │ ├── success_profile.md 484 | │ ├── template.md 485 | │ ├── content_mapping.md 486 | │ ├── Varun_Ramesh_Microsoft_1ES_Resume.md 487 | │ ├── Varun_Ramesh_Microsoft_1ES_Resume.docx 488 | │ └── Varun_Ramesh_Microsoft_1ES_Resume_Report.md 489 | ├── job-2-google/ 490 | │ └── ... (same structure) 491 | └── job-3-aws/ 492 | └── ... (same structure) 493 | ``` 494 | 495 | ### State Tracking 496 | 497 | **`_batch_state.json`:** 498 | 499 | ```json 500 | { 501 | "batch_id": "batch-2025-11-04-job-search", 502 | "created": "2025-11-04T10:30:00Z", 503 | "current_phase": "per_job_processing", 504 | "jobs": [ 505 | { 506 | "job_id": "job-1", 507 | "company": "Microsoft", 508 | "role": "Principal PM - 1ES", 509 | "status": "completed", 510 | "coverage": 85, 511 | "files_generated": true 512 | }, 513 | { 514 | "job_id": "job-2", 515 | "company": "Google", 516 | "status": "in_progress", 517 | "current_phase": "template_generation" 518 | }, 519 | { 520 | "job_id": "job-3", 521 | "status": "pending" 522 | } 523 | ], 524 | "discoveries": [ 525 | { 526 | "experience_id": "disc-1", 527 | "text": "Designed and implemented Kubernetes-based CI/CD pipeline...", 528 | "addresses_jobs": ["job-1", "job-2", "job-3"], 529 | "addresses_gaps": ["Kubernetes", "CI/CD"], 530 | "confidence_improvement": { 531 | "Kubernetes": {"before": 45, "after": 75}, 532 | "CI/CD": {"before": 58, "after": 82} 533 | }, 534 | "integrated": true 535 | } 536 | ] 537 | } 538 | ``` 539 | 540 | ### Resume Capability 541 | 542 | ``` 543 | USER: "I need to stop. Can I continue later?" 544 | 545 | SKILL: "Absolutely! I've saved all progress. 546 | 547 | Current state: 548 | - Library: Initialized ✓ 549 | - Gap analysis: Complete ✓ 550 | - Discovery: Complete (5 experiences) ✓ 551 | - Job 1: Complete ✓ 552 | - Job 2: In progress (template approved, matching pending) 553 | - Job 3: Pending 554 | 555 | When you return, just say 'resume my batch' and I'll pick up 556 | from Job 2 content matching." 557 | ``` 558 | 559 | ## Error Handling & Edge Cases 560 | 561 | ### Edge Case 1: Jobs Are More Diverse Than Expected 562 | 563 | ``` 564 | SCENARIO: User provides 5 jobs, but they're quite different 565 | (TPM, Data Scientist, Product Marketing Manager) 566 | 567 | DETECTION: During gap analysis, <40% gap overlap between jobs 568 | 569 | HANDLING: 570 | "⚠️ I notice these jobs are quite diverse: 571 | - Jobs 1, 2 (TPM roles): 85% requirement overlap 572 | - Jobs 3, 4 (Data Science): 80% requirement overlap 573 | - Job 5 (Marketing): Only 20% overlap with others 574 | 575 | RECOMMENDATION: 576 | Split into 2 batches for better efficiency: 577 | - Batch A: Jobs 1, 2 (TPM-focused discovery) 578 | - Batch B: Jobs 3, 4 (Data Science-focused discovery) 579 | - Job 5: Process separately 580 | 581 | OR proceed with unified discovery (will take longer, ~30 minutes) 582 | 583 | Your preference?" 584 | ``` 585 | 586 | ### Edge Case 2: Discovery Reveals Experience Relevant to Only 1 Job 587 | 588 | ``` 589 | SCENARIO: During discovery for "multi-job gap," user's answer only 590 | addresses one job 591 | 592 | EXAMPLE: 593 | SKILL: "Kubernetes appears in all 3 jobs. Have you worked with it?" 594 | USER: "Only in Azure (AKS), not GCP or AWS" 595 | 596 | HANDLING: 597 | "Got it - this addresses the Microsoft job (AKS) but not Google (GKE) 598 | or AWS (EKS). I'll tag this as Microsoft-specific. 599 | 600 | Should I still explore Kubernetes more broadly? You might have 601 | experience with container orchestration concepts that transfer." 602 | 603 | [Branch to adjacent probe for GKE/EKS] 604 | ``` 605 | 606 | ### Edge Case 3: One Job's Research Fails 607 | 608 | ``` 609 | SCENARIO: Company is obscure startup, minimal online presence 610 | 611 | HANDLING: 612 | "⚠️ Limited research for Job 3 (StartupXYZ): 613 | - No company info found 614 | - No LinkedIn profiles for similar roles 615 | 616 | Falling back to JD-only analysis for this job. 617 | 618 | Options: 619 | 1. Continue with JD-only (recommended) 620 | 2. Skip Job 3 for now, process others 621 | 3. You provide company context manually 622 | 623 | Other jobs (1, 2) have sufficient research data." 624 | 625 | [Don't let one failure block the batch] 626 | ``` 627 | 628 | ### Edge Case 4: User Wants to Add/Remove Jobs Mid-Process 629 | 630 | **Add Job:** 631 | ``` 632 | "I'll add Job 4 to the batch. Since discovery is already complete: 633 | - If Job 4 has new gaps: We'll do incremental discovery 634 | - If existing discoveries cover it: Proceed directly to processing" 635 | ``` 636 | 637 | **Remove Job:** 638 | ``` 639 | "Removing Job 2 from batch. Already-discovered experiences are still 640 | in the library and available for remaining jobs." 641 | ``` 642 | 643 | ### Edge Case 5: Library Update Conflicts 644 | 645 | ``` 646 | SCENARIO: User approves Job 1 resume, rejects Job 2, wants to revise Job 3 647 | 648 | HANDLING: 649 | "Library update options: 650 | 651 | INDIVIDUAL APPROVAL (recommended): 652 | - Add Job 1 to library now ✓ 653 | - Job 2 won't be added ✗ 654 | - Job 3 pending revision (decide after changes) 655 | 656 | BATCH APPROVAL (wait): 657 | - Update library only when all jobs finalized 658 | - Ensures consistency 659 | 660 | Your preference?" 661 | ``` 662 | 663 | ## Success Criteria 664 | 665 | The multi-job extension is successful if: 666 | 667 | 1. **Efficiency Gain:** Processing N jobs takes < (N × single-job time) 668 | - **Target:** 3 jobs in ~40 minutes vs 3 × 15 min = 45 min sequential 669 | - **Primary saving:** Shared discovery (20 min vs 60 min for 3× sequential) 670 | - **Scale:** 5 jobs in ~55 min vs 75 min sequential (~25% time savings) 671 | 672 | 2. **Quality Maintained:** Each resume has same quality as single-job workflow 673 | - ≥70% JD coverage per job 674 | - Full depth research per job (role benchmarking, company culture) 675 | - Transparent gap identification and confidence scoring 676 | 677 | 3. **User Experience:** Clear and manageable 678 | - Batch status visible at all times 679 | - Can pause/resume between sessions 680 | - Can add jobs incrementally 681 | - Individual job control (approve/revise independently) 682 | 683 | 4. **Library Enrichment:** Discoveries benefit all jobs 684 | - Experiences tagged with multi-job relevance 685 | - Reusable for future batches 686 | - Clear provenance (which batch, which gaps addressed) 687 | 688 | 5. **Continuous Workflow Support:** 689 | - Can process initial batch, add more jobs later 690 | - Incremental discovery only asks new questions 691 | - State persists between sessions 692 | 693 | ## Time Comparison: Single-Job vs Multi-Job 694 | 695 | ### Single-Job Workflow (Current) 696 | 697 | ``` 698 | 1 job → ~15 minutes 699 | 700 | Library Init (1 min) 701 | Research (3 min) 702 | Template (2 min) 703 | Discovery (5-7 min) 704 | Matching (2 min) 705 | Generation (1 min) 706 | Review (1 min) 707 | 708 | 3 jobs sequentially: 45 minutes 709 | - Discovery happens 3 times 710 | - Overlapping questions asked repeatedly 711 | - Each job processed in isolation 712 | ``` 713 | 714 | ### Multi-Job Workflow (Proposed) 715 | 716 | ``` 717 | 3 jobs → ~40 minutes 718 | 719 | Library Init (1 min) 720 | Aggregate Gap Analysis (2 min) 721 | Shared Discovery (15-20 min) ← Once for all jobs 722 | 723 | Per-Job (×3): 724 | ├─ Research (3 min each) 725 | ├─ Template (2 min each) 726 | ├─ Matching (2 min each) 727 | └─ Generation (1 min each) 728 | 729 | Batch Review (3 min) 730 | 731 | Time saved: ~25-30% for 3 jobs 732 | - Shared discovery eliminates redundancy 733 | - Batch review more efficient than sequential 734 | - Scales better: 5 jobs ~55 min (vs 75 min sequential) 735 | ``` 736 | 737 | ## Implementation Notes 738 | 739 | ### Changes to Existing Skill Structure 740 | 741 | **Current Structure:** 742 | ``` 743 | ~/.claude/skills/resume-tailoring/ 744 | ├── SKILL.md 745 | ├── research-prompts.md 746 | ├── matching-strategies.md 747 | └── branching-questions.md 748 | ``` 749 | 750 | **Proposed Additions:** 751 | ``` 752 | ~/.claude/skills/resume-tailoring/ 753 | ├── SKILL.md # Modified: Add multi-job mode detection 754 | ├── research-prompts.md # Unchanged 755 | ├── matching-strategies.md # Unchanged 756 | ├── branching-questions.md # Modified: Add multi-job context 757 | └── multi-job-workflow.md # NEW: Multi-job orchestration logic 758 | ``` 759 | 760 | ### Backward Compatibility 761 | 762 | **Single-job invocations still work:** 763 | ``` 764 | USER: "Create a resume for Microsoft 1ES Principal PM role" 765 | 766 | SKILL: Detects single job → Uses existing single-job workflow 767 | ``` 768 | 769 | **Multi-job detection:** 770 | ``` 771 | Triggers when user provides: 772 | - Multiple JD URLs 773 | - Phrase like "multiple jobs" or "several positions" 774 | - List of companies/roles 775 | 776 | Asks for confirmation: "I see multiple jobs. Use multi-job mode? (Y/N)" 777 | ``` 778 | 779 | ### Migration Strategy 780 | 781 | **Phase 1:** Implement multi-job workflow as separate mode (preserves existing single-job) 782 | 783 | **Phase 2:** Test with real job search batches 784 | 785 | **Phase 3:** Optimize based on usage patterns (potentially make multi-job the default) 786 | 787 | ## Future Enhancements 788 | 789 | **Potential improvements beyond initial implementation:** 790 | 791 | 1. **Smart Batching:** Automatically cluster jobs by similarity 792 | 2. **Cross-Resume Optimization:** Suggest which resume to submit based on coverage scores 793 | 3. **Application Tracking:** Track which resumes sent, responses received 794 | 4. **A/B Testing:** Compare success rates of different approaches 795 | 5. **Cover Letter Generation:** Extend multi-job approach to cover letters 796 | 6. **Interview Prep:** Generate interview prep guides based on gaps and strengths 797 | 798 | ## References 799 | 800 | **Related Documents:** 801 | - `2025-10-31-resume-tailoring-skill-design.md` - Original single-job design 802 | - `2025-10-31-resume-tailoring-skill-implementation.md` - Implementation plan 803 | 804 | **Design Process:** 805 | - Developed using superpowers:brainstorming skill 806 | - Validated constraints: 3-5 jobs, moderately similar, continuous workflow 807 | - Evaluated 3 approaches, selected Shared Discovery + Per-Job Tailoring 808 | -------------------------------------------------------------------------------- /SKILL.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: resume-tailoring 3 | description: Use when creating tailored resumes for job applications - researches company/role, creates optimized templates, conducts branching experience discovery to surface undocumented skills, and generates professional multi-format resumes from user's resume library while maintaining factual integrity 4 | --- 5 | 6 | # Resume Tailoring Skill 7 | 8 | ## Overview 9 | 10 | Generates high-quality, tailored resumes optimized for specific job descriptions while maintaining factual integrity. Builds resumes around the holistic person by surfacing undocumented experiences through conversational discovery. 11 | 12 | **Core Principle:** Truth-preserving optimization - maximize fit while maintaining factual integrity. Never fabricate experience, but intelligently reframe and emphasize relevant aspects. 13 | 14 | **Mission:** A person's ability to get a job should be based on their experiences and capabilities, not on their resume writing skills. 15 | 16 | ## When to Use 17 | 18 | Use this skill when: 19 | - User provides a job description and wants a tailored resume 20 | - User has multiple existing resumes in markdown format 21 | - User wants to optimize their application for a specific role/company 22 | - User needs help surfacing and articulating undocumented experiences 23 | 24 | **DO NOT use for:** 25 | - Generic resume writing from scratch (user needs existing resume library) 26 | - Cover letters (different skill) 27 | - LinkedIn profile optimization (different skill) 28 | 29 | ## Quick Start 30 | 31 | **Required from user:** 32 | 1. Job description (text or URL) 33 | 2. Resume library location (defaults to `resumes/` in current directory) 34 | 35 | **Workflow:** 36 | 1. Build library from existing resumes 37 | 2. Research company/role 38 | 3. Create template (with user checkpoint) 39 | 4. Optional: Branching experience discovery 40 | 5. Match content with confidence scoring 41 | 6. Generate MD + DOCX + PDF + Report 42 | 7. User review → Optional library update 43 | 44 | ## Implementation 45 | 46 | See supporting files: 47 | - `research-prompts.md` - Structured prompts for company/role research 48 | - `matching-strategies.md` - Content matching algorithms and scoring 49 | - `branching-questions.md` - Experience discovery conversation patterns 50 | 51 | ## Workflow Details 52 | 53 | ### Multi-Job Detection 54 | 55 | **Triggers when user provides:** 56 | - Multiple JD URLs (comma or newline separated) 57 | - Phrases: "multiple jobs", "several positions", "batch", "3 jobs" 58 | - List of companies/roles: "Microsoft PM, Google TPM, AWS PM" 59 | 60 | **Detection Logic:** 61 | 62 | ```python 63 | # Pseudo-code 64 | def detect_multi_job(user_input): 65 | indicators = [ 66 | len(extract_urls(user_input)) > 1, 67 | any(phrase in user_input.lower() for phrase in 68 | ["multiple jobs", "several positions", "batch of", "3 jobs", "5 jobs"]), 69 | count_company_mentions(user_input) > 1 70 | ] 71 | return any(indicators) 72 | ``` 73 | 74 | **If detected:** 75 | ``` 76 | "I see you have multiple job applications. Would you like to use 77 | multi-job mode? 78 | 79 | BENEFITS: 80 | - Shared experience discovery (faster - ask questions once for all jobs) 81 | - Batch processing with progress tracking 82 | - Incremental additions (add more jobs later) 83 | 84 | TIME COMPARISON (3 similar jobs): 85 | - Sequential single-job: ~45 minutes (15 min × 3) 86 | - Multi-job mode: ~40 minutes (15 min discovery + 8 min per job) 87 | 88 | Use multi-job mode? (Y/N)" 89 | ``` 90 | 91 | **If user confirms Y:** 92 | - Use multi-job workflow (see multi-job-workflow.md) 93 | 94 | **If user confirms N or single job detected:** 95 | - Use existing single-job workflow (Phase 0 onwards) 96 | 97 | **Backward Compatibility:** Single-job workflow completely unchanged. 98 | 99 | **Multi-Job Workflow:** 100 | 101 | When multi-job mode is activated, see `multi-job-workflow.md` for complete workflow. 102 | 103 | **High-Level Multi-Job Process:** 104 | 105 | ``` 106 | ┌─────────────────────────────────────────────────────────────┐ 107 | │ PHASE 0: Intake & Batch Initialization │ 108 | │ - Collect 3-5 job descriptions │ 109 | │ - Initialize batch structure │ 110 | │ - Run library initialization (once) │ 111 | └─────────────────────────────────────────────────────────────┘ 112 | ↓ 113 | ┌─────────────────────────────────────────────────────────────┐ 114 | │ PHASE 1: Aggregate Gap Analysis │ 115 | │ - Extract requirements from all JDs │ 116 | │ - Cross-reference against library │ 117 | │ - Build unified gap map (deduplicate) │ 118 | │ - Prioritize: Critical → Important → Job-specific │ 119 | └─────────────────────────────────────────────────────────────┘ 120 | ↓ 121 | ┌─────────────────────────────────────────────────────────────┐ 122 | │ PHASE 2: Shared Experience Discovery │ 123 | │ - Single branching interview covering ALL gaps │ 124 | │ - Multi-job context for each question │ 125 | │ - Tag experiences with job relevance │ 126 | │ - Enrich library with discoveries │ 127 | └─────────────────────────────────────────────────────────────┘ 128 | ↓ 129 | ┌─────────────────────────────────────────────────────────────┐ 130 | │ PHASE 3: Per-Job Processing (Sequential) │ 131 | │ For each job: │ 132 | │ ├─ Research (company + role benchmarking) │ 133 | │ ├─ Template generation │ 134 | │ ├─ Content matching (uses enriched library) │ 135 | │ └─ Generation (MD + DOCX + Report) │ 136 | │ Interactive or Express mode │ 137 | └─────────────────────────────────────────────────────────────┘ 138 | ↓ 139 | ┌─────────────────────────────────────────────────────────────┐ 140 | │ PHASE 4: Batch Finalization │ 141 | │ - Generate batch summary │ 142 | │ - User reviews all resumes together │ 143 | │ - Approve/revise individual or batch │ 144 | │ - Update library with approved resumes │ 145 | └─────────────────────────────────────────────────────────────┘ 146 | ``` 147 | 148 | **Time Savings:** 149 | - 3 jobs: ~40 min (vs 45 min sequential) = 11% savings 150 | - 5 jobs: ~55 min (vs 75 min sequential) = 27% savings 151 | 152 | **Quality:** Same depth as single-job workflow (research, matching, generation) 153 | 154 | **See `multi-job-workflow.md` for complete implementation details.** 155 | 156 | ### Phase 0: Library Initialization 157 | 158 | **Always runs first - builds fresh resume database** 159 | 160 | **Process:** 161 | 162 | 1. **Locate resume directory:** 163 | ``` 164 | User provides path OR default to ./resumes/ 165 | Validate directory exists 166 | ``` 167 | 168 | 2. **Scan for markdown files:** 169 | ``` 170 | Use Glob tool: pattern="*.md" path={resume_directory} 171 | Count files found 172 | Announce: "Building resume library... found {N} resumes" 173 | ``` 174 | 175 | 3. **Parse each resume:** 176 | For each resume file: 177 | - Use Read tool to load content 178 | - Extract sections: roles, bullets, skills, education 179 | - Identify patterns: bullet structure, length, formatting 180 | 181 | 4. **Build experience database structure:** 182 | ```json 183 | { 184 | "roles": [ 185 | { 186 | "role_id": "company_title_year", 187 | "company": "Company Name", 188 | "title": "Job Title", 189 | "dates": "YYYY-YYYY", 190 | "description": "Role summary", 191 | "bullets": [ 192 | { 193 | "text": "Full bullet text", 194 | "themes": ["leadership", "technical"], 195 | "metrics": ["17x improvement", "$3M revenue"], 196 | "keywords": ["cross-functional", "program"], 197 | "source_resumes": ["resume1.md"] 198 | } 199 | ] 200 | } 201 | ], 202 | "skills": { 203 | "technical": ["Python", "Kusto", "AI/ML"], 204 | "product": ["Roadmap", "Strategy"], 205 | "leadership": ["Stakeholder mgmt"] 206 | }, 207 | "education": [...], 208 | "user_preferences": { 209 | "typical_length": "1-page|2-page", 210 | "section_order": ["summary", "experience", "education"], 211 | "bullet_style": "pattern" 212 | } 213 | } 214 | ``` 215 | 216 | 5. **Tag content automatically:** 217 | - Themes: Scan for keywords (leadership, technical, analytics, etc.) 218 | - Metrics: Extract numbers, percentages, dollar amounts 219 | - Keywords: Frequent technical terms, action verbs 220 | 221 | **Output:** In-memory database ready for matching 222 | 223 | **Code pattern:** 224 | ```python 225 | # Pseudo-code for reference 226 | library = { 227 | "roles": [], 228 | "skills": {}, 229 | "education": [] 230 | } 231 | 232 | for resume_file in glob("resumes/*.md"): 233 | content = read(resume_file) 234 | roles = extract_roles(content) 235 | for role in roles: 236 | role["bullets"] = tag_bullets(role["bullets"]) 237 | library["roles"].append(role) 238 | 239 | return library 240 | ``` 241 | 242 | ### Phase 1: Research Phase 243 | 244 | **Goal:** Build comprehensive "success profile" beyond just the job description 245 | 246 | **Inputs:** 247 | - Job description (text or URL from user) 248 | - Optional: Company name if not in JD 249 | 250 | **Process:** 251 | 252 | **1.1 Job Description Parsing:** 253 | ``` 254 | Use research-prompts.md JD parsing template 255 | Extract: requirements, keywords, implicit preferences, red flags, role archetype 256 | ``` 257 | 258 | **1.2 Company Research:** 259 | ``` 260 | WebSearch queries: 261 | - "{company} mission values culture" 262 | - "{company} engineering blog" 263 | - "{company} recent news" 264 | 265 | Synthesize: mission, values, business model, stage 266 | ``` 267 | 268 | **1.3 Role Benchmarking:** 269 | ``` 270 | WebSearch: "site:linkedin.com {job_title} {company}" 271 | WebFetch: Top 3-5 profiles 272 | Analyze: common backgrounds, skills, terminology 273 | 274 | If sparse results, try similar companies 275 | ``` 276 | 277 | **1.4 Success Profile Synthesis:** 278 | ``` 279 | Combine all research into structured profile (see research-prompts.md template) 280 | 281 | Include: 282 | - Core requirements (must-have) 283 | - Valued capabilities (nice-to-have) 284 | - Cultural fit signals 285 | - Narrative themes 286 | - Terminology map (user's background → their language) 287 | - Risk factors + mitigations 288 | ``` 289 | 290 | **Checkpoint:** 291 | ``` 292 | Present success profile to user: 293 | 294 | "Based on my research, here's what makes candidates successful for this role: 295 | 296 | {SUCCESS_PROFILE_SUMMARY} 297 | 298 | Key findings: 299 | - {Finding 1} 300 | - {Finding 2} 301 | - {Finding 3} 302 | 303 | Does this match your understanding? Any adjustments?" 304 | 305 | Wait for user confirmation before proceeding. 306 | ``` 307 | 308 | **Output:** Validated success profile document 309 | 310 | ### Phase 2: Template Generation 311 | 312 | **Goal:** Create resume structure optimized for this specific role 313 | 314 | **Inputs:** 315 | - Success profile (from Phase 1) 316 | - User's resume library (from Phase 0) 317 | 318 | **Process:** 319 | 320 | **2.1 Analyze User's Resume Library:** 321 | ``` 322 | Extract from library: 323 | - All roles, titles, companies, date ranges 324 | - Role archetypes (technical contributor, manager, researcher, specialist) 325 | - Experience clusters (what domains/skills appear frequently) 326 | - Career progression and narrative 327 | ``` 328 | 329 | **2.2 Role Consolidation Decision:** 330 | 331 | **When to consolidate:** 332 | - Same company, similar responsibilities 333 | - Target role values continuity over granular progression 334 | - Combined narrative stronger than separate 335 | - Page space constrained 336 | 337 | **When to keep separate:** 338 | - Different companies (ALWAYS separate) 339 | - Dramatically different responsibilities that both matter 340 | - Target role values specific progression story 341 | - One position has significantly more relevant experience 342 | 343 | **Decision template:** 344 | ``` 345 | For {Company} with {N} positions: 346 | 347 | OPTION A (Consolidated): 348 | Title: "{Combined_Title}" 349 | Dates: "{First_Start} - {Last_End}" 350 | Rationale: {Why consolidation makes sense} 351 | 352 | OPTION B (Separate): 353 | Position 1: "{Title}" ({Dates}) 354 | Position 2: "{Title}" ({Dates}) 355 | Rationale: {Why separate makes sense} 356 | 357 | RECOMMENDED: Option {A/B} because {reasoning} 358 | ``` 359 | 360 | **2.3 Title Reframing Principles:** 361 | 362 | **Core rule:** Stay truthful to what you did, emphasize aspect most relevant to target 363 | 364 | **Strategies:** 365 | 366 | 1. **Emphasize different aspects:** 367 | - "Graduate Researcher" → "Research Software Engineer" (if coding-heavy) 368 | - "Data Science Lead" → "Technical Program Manager" (if leadership) 369 | 370 | 2. **Use industry-standard terminology:** 371 | - "Scientist III" → "Senior Research Scientist" (clearer seniority) 372 | - "Program Coordinator" → "Project Manager" (standard term) 373 | 374 | 3. **Add specialization when truthful:** 375 | - "Engineer" → "ML Engineer" (if ML work substantial) 376 | - "Researcher" → "Computational Ecologist" (if computational methods) 377 | 378 | 4. **Adjust seniority indicators:** 379 | - "Lead" vs "Senior" vs "Staff" based on scope 380 | 381 | **Constraints:** 382 | - NEVER claim work you didn't do 383 | - NEVER inflate seniority beyond defensible 384 | - Company name and dates MUST be exact 385 | - Core responsibilities MUST be accurate 386 | 387 | **2.4 Generate Template Structure:** 388 | 389 | ```markdown 390 | ## Professional Summary 391 | [GUIDANCE: {X} sentences emphasizing {themes from success profile}] 392 | [REQUIRED ELEMENTS: {keywords from JD}] 393 | 394 | ## Key Skills 395 | [STRUCTURE: {2-4 categories based on JD structure}] 396 | [SOURCE: Extract from library matching success profile] 397 | 398 | ## Professional Experience 399 | 400 | ### [ROLE 1 - Most Recent/Relevant] 401 | [CONSOLIDATION: {merge X positions OR keep separate}] 402 | [TITLE OPTIONS: 403 | A: {emphasize aspect 1} 404 | B: {emphasize aspect 2} 405 | Recommended: {option with rationale}] 406 | [BULLET ALLOCATION: {N bullets based on relevance + recency}] 407 | [GUIDANCE: Emphasize {themes}, look for {experience types}] 408 | 409 | Bullet 1: [SEEKING: {requirement type}] 410 | Bullet 2: [SEEKING: {requirement type}] 411 | ... 412 | 413 | ### [ROLE 2] 414 | ... 415 | 416 | ## Education 417 | [PLACEMENT: {top if required/recent, bottom if experience-heavy}] 418 | 419 | ## [Optional Sections] 420 | [INCLUDE IF: {criteria from success profile}] 421 | ``` 422 | 423 | **Checkpoint:** 424 | ``` 425 | Present template to user: 426 | 427 | "Here's the optimized resume structure for this role: 428 | 429 | STRUCTURE: 430 | {Section order and rationale} 431 | 432 | ROLE CONSOLIDATION: 433 | {Decisions with options} 434 | 435 | TITLE REFRAMING: 436 | {Proposed titles with alternatives} 437 | 438 | BULLET ALLOCATION: 439 | Role 1: {N} bullets (most relevant) 440 | Role 2: {N} bullets 441 | ... 442 | 443 | Does this structure work? Any adjustments to: 444 | - Role consolidation? 445 | - Title reframing? 446 | - Bullet allocation?" 447 | 448 | Wait for user approval before proceeding. 449 | ``` 450 | 451 | **Output:** Approved template skeleton with guidance for each section 452 | 453 | ### Phase 2.5: Experience Discovery (OPTIONAL) 454 | 455 | **Goal:** Surface undocumented experiences through conversational discovery 456 | 457 | **When to trigger:** 458 | ``` 459 | After template approval, if gaps identified: 460 | 461 | "I've identified {N} gaps or areas where we have weak matches: 462 | - {Gap 1}: {Current confidence} 463 | - {Gap 2}: {Current confidence} 464 | ... 465 | 466 | Would you like to do a structured brainstorming session to surface 467 | any experiences you haven't documented yet? 468 | 469 | This typically takes 10-15 minutes and often uncovers valuable content." 470 | 471 | User can accept or skip. 472 | ``` 473 | 474 | **Branching Interview Process:** 475 | 476 | **Approach:** Conversational with follow-up questions based on answers 477 | 478 | **For each gap, conduct branching dialogue (see branching-questions.md):** 479 | 480 | 1. **Start with open probe:** 481 | - Technical gap: "Have you worked with {skill}?" 482 | - Soft skill gap: "Tell me about times you've {demonstrated_skill}" 483 | - Recent work: "What have you worked on recently?" 484 | 485 | 2. **Branch based on answer:** 486 | - YES/Strong → Deep dive (scale, challenges, metrics) 487 | - INDIRECT → Explore role and transferability 488 | - ADJACENT → Explore related experience 489 | - PERSONAL → Assess recency and substance 490 | - NO → Try broader category or move on 491 | 492 | 3. **Follow-up systematically:** 493 | - Ask "what," "how," "why" to get details 494 | - Quantify: "Any metrics?" 495 | - Contextualize: "Was this production?" 496 | - Validate: "Does this address the gap?" 497 | 498 | 4. **Capture immediately:** 499 | - Document experience as shared 500 | - Ask clarifying questions (dates, scope, impact) 501 | - Help articulate as resume bullet 502 | - Tag which gap(s) it addresses 503 | 504 | **Capture Structure:** 505 | ```markdown 506 | ## Newly Discovered Experiences 507 | 508 | ### Experience 1: {Brief description} 509 | - Context: {Where/when} 510 | - Scope: {Scale, duration, impact} 511 | - Addresses: {Which gaps} 512 | - Bullet draft: "{Achievement-focused bullet}" 513 | - Confidence: {How well fills gap - percentage} 514 | 515 | ### Experience 2: ... 516 | ``` 517 | 518 | **Integration Options:** 519 | 520 | After discovery session: 521 | ``` 522 | "Great! I captured {N} new experiences. For each one: 523 | 524 | 1. ADD TO CURRENT RESUME - Integrate now 525 | 2. ADD TO LIBRARY ONLY - Save for future, not needed here 526 | 3. REFINE FURTHER - Think more about articulation 527 | 4. DISCARD - Not relevant enough 528 | 529 | Let me know for each experience." 530 | ``` 531 | 532 | **Important Notes:** 533 | - Keep truthfulness bar high - help articulate, NEVER fabricate 534 | - Focus on gaps and weak matches, not strong areas 535 | - Time-box if needed (10-15 minutes typical) 536 | - User can skip entirely if confident in library 537 | - Recognize when to move on - don't exhaust user 538 | 539 | **Output:** New experiences integrated into library, ready for matching 540 | 541 | ### Phase 3: Assembly Phase 542 | 543 | **Goal:** Fill approved template with best-matching content, with transparent scoring 544 | 545 | **Inputs:** 546 | - Approved template (from Phase 2) 547 | - Resume library + discovered experiences (from Phase 0 + 2.5) 548 | - Success profile (from Phase 1) 549 | 550 | **Process:** 551 | 552 | **3.1 For Each Template Slot:** 553 | 554 | 1. **Extract all candidate bullets from library** 555 | - All bullets from library database 556 | - All newly discovered experiences 557 | - Include source resume for each 558 | 559 | 2. **Score each candidate** (see matching-strategies.md) 560 | - Direct match (40%): Keywords, domain, technology, outcome 561 | - Transferable (30%): Same capability, different context 562 | - Adjacent (20%): Related tools, methods, problem space 563 | - Impact (10%): Achievement type alignment 564 | 565 | Overall = (Direct × 0.4) + (Transfer × 0.3) + (Adjacent × 0.2) + (Impact × 0.1) 566 | 567 | 3. **Rank candidates by score** 568 | - Sort high to low 569 | - Group by confidence band: 570 | * 90-100%: DIRECT 571 | * 75-89%: TRANSFERABLE 572 | * 60-74%: ADJACENT 573 | * <60%: WEAK/GAP 574 | 575 | 4. **Present top 3 matches with analysis:** 576 | ``` 577 | TEMPLATE SLOT: {Role} - Bullet {N} 578 | SEEKING: {Requirement description} 579 | 580 | MATCHES: 581 | [DIRECT - 95%] "{bullet_text}" 582 | ✓ Direct: {what matches directly} 583 | ✓ Transferable: {what transfers} 584 | ✓ Metrics: {quantified impact} 585 | Source: {resume_name} 586 | 587 | [TRANSFERABLE - 78%] "{bullet_text}" 588 | ✓ Transferable: {what transfers} 589 | ✓ Adjacent: {what's adjacent} 590 | ⚠ Gap: {what's missing} 591 | Source: {resume_name} 592 | 593 | [ADJACENT - 62%] "{bullet_text}" 594 | ✓ Adjacent: {what's related} 595 | ⚠ Gap: {what's missing} 596 | Source: {resume_name} 597 | 598 | RECOMMENDATION: Use DIRECT match (95%) 599 | ALTERNATIVE: If avoiding repetition, use TRANSFERABLE (78%) with reframing 600 | ``` 601 | 602 | 5. **Handle gaps (confidence <60%):** 603 | ``` 604 | GAP IDENTIFIED: {Requirement} 605 | 606 | BEST AVAILABLE: {score}% - "{bullet_text}" 607 | 608 | REFRAME OPPORTUNITY: {If applicable} 609 | Original: "{text}" 610 | Reframed: "{adjusted_text}" (truthful because {reason}) 611 | New confidence: {score}% 612 | 613 | OPTIONS: 614 | 1. Use reframed version ({new_score}%) 615 | 2. Acknowledge gap in cover letter 616 | 3. Omit bullet slot (reduce allocation) 617 | 4. Use best available with disclosure 618 | 619 | RECOMMENDATION: {Most appropriate option} 620 | ``` 621 | 622 | **3.2 Content Reframing:** 623 | 624 | When good match (>60%) but terminology misaligned: 625 | 626 | **Apply strategies from matching-strategies.md:** 627 | - Keyword alignment (preserve meaning, adjust terms) 628 | - Emphasis shift (same facts, different focus) 629 | - Abstraction level (adjust technical specificity) 630 | - Scale emphasis (highlight relevant aspects) 631 | 632 | **Show before/after for transparency:** 633 | ``` 634 | REFRAMING APPLIED: 635 | Bullet: {template_slot} 636 | 637 | Original: "{original_bullet}" 638 | Source: {resume_name} 639 | 640 | Reframed: "{reframed_bullet}" 641 | Changes: {what changed and why} 642 | Truthfulness: {why this is accurate} 643 | ``` 644 | 645 | **Checkpoint:** 646 | ``` 647 | "I've matched content to your template. Here's the complete mapping: 648 | 649 | COVERAGE SUMMARY: 650 | - Direct matches: {N} bullets ({percentage}%) 651 | - Transferable: {N} bullets ({percentage}%) 652 | - Adjacent: {N} bullets ({percentage}%) 653 | - Gaps: {N} ({percentage}%) 654 | 655 | REFRAMINGS APPLIED: {N} 656 | - {Example 1} 657 | - {Example 2} 658 | 659 | GAPS IDENTIFIED: 660 | - {Gap 1}: {Recommendation} 661 | - {Gap 2}: {Recommendation} 662 | 663 | OVERALL JD COVERAGE: {percentage}% 664 | 665 | Review the detailed mapping below. Any adjustments to: 666 | - Match selections? 667 | - Reframings? 668 | - Gap handling?" 669 | 670 | [Present full detailed mapping] 671 | 672 | Wait for user approval before generation. 673 | ``` 674 | 675 | **Output:** Complete bullet-by-bullet mapping with confidence scores and reframings 676 | 677 | ### Phase 4: Generation Phase 678 | 679 | **Goal:** Create professional multi-format outputs 680 | 681 | **Inputs:** 682 | - Approved content mapping (from Phase 3) 683 | - User's formatting preferences (from library analysis) 684 | - Target role information (from Phase 1) 685 | 686 | **Process:** 687 | 688 | **4.1 Markdown Generation:** 689 | 690 | **Compile mapped content into clean markdown:** 691 | 692 | ```markdown 693 | # {User_Name} 694 | 695 | {Contact_Info} 696 | 697 | --- 698 | 699 | ## Professional Summary 700 | 701 | {Summary_from_template} 702 | 703 | --- 704 | 705 | ## Key Skills 706 | 707 | **{Category_1}:** 708 | - {Skills_from_library_matching_profile} 709 | 710 | **{Category_2}:** 711 | - {Skills_from_library_matching_profile} 712 | 713 | {Repeat for all categories} 714 | 715 | --- 716 | 717 | ## Professional Experience 718 | 719 | ### {Job_Title} 720 | **{Company} | {Location} | {Dates}** 721 | 722 | {Role_summary_if_applicable} 723 | 724 | • {Bullet_1_from_mapping} 725 | • {Bullet_2_from_mapping} 726 | ... 727 | 728 | ### {Next_Role} 729 | ... 730 | 731 | --- 732 | 733 | ## Education 734 | 735 | **{Degree}** | {Institution} ({Year}) 736 | **{Degree}** | {Institution} ({Year}) 737 | ``` 738 | 739 | **Use user's preferences:** 740 | - Formatting style from library analysis 741 | - Bullet structure pattern 742 | - Section ordering 743 | - Typical length (1-page vs 2-page) 744 | 745 | **Output:** `{Name}_{Company}_{Role}_Resume.md` 746 | 747 | **4.2 DOCX Generation:** 748 | 749 | **Use document-skills:docx:** 750 | 751 | ``` 752 | REQUIRED SUB-SKILL: Use document-skills:docx 753 | 754 | Create Word document with: 755 | - Professional fonts (Calibri 11pt body, 12pt headers) 756 | - Proper spacing (single within sections, space between) 757 | - Clean bullet formatting (proper numbering config, NOT unicode) 758 | - Header with contact information 759 | - Appropriate margins (0.5-1 inch) 760 | - Bold/italic emphasis (company names, titles, dates) 761 | - Page breaks if 2-page resume 762 | 763 | See docx skill documentation for: 764 | - Paragraph and TextRun structure 765 | - Numbering configuration for bullets 766 | - Heading levels and styles 767 | - Spacing and margins 768 | ``` 769 | 770 | **Output:** `{Name}_{Company}_{Role}_Resume.docx` 771 | 772 | **4.3 PDF Generation (Optional):** 773 | 774 | **If user requests PDF:** 775 | 776 | ``` 777 | OPTIONAL SUB-SKILL: Use document-skills:pdf 778 | 779 | Convert DOCX to PDF OR generate directly 780 | Ensure formatting preservation 781 | Professional appearance for direct submission 782 | ``` 783 | 784 | **Output:** `{Name}_{Company}_{Role}_Resume.pdf` 785 | 786 | **4.4 Generation Summary Report:** 787 | 788 | **Create metadata file:** 789 | 790 | ```markdown 791 | # Resume Generation Report 792 | **{Role} at {Company}** 793 | 794 | **Date Generated:** {timestamp} 795 | 796 | ## Target Role Summary 797 | - Company: {Company} 798 | - Position: {Role} 799 | - IC Level: {If known} 800 | - Focus Areas: {Key areas} 801 | 802 | ## Success Profile Summary 803 | - Key Requirements: {top 5} 804 | - Cultural Fit Signals: {themes} 805 | - Risk Factors Addressed: {mitigations} 806 | 807 | ## Content Mapping Summary 808 | - Total bullets: {N} 809 | - Direct matches: {N} ({percentage}%) 810 | - Transferable: {N} ({percentage}%) 811 | - Adjacent: {N} ({percentage}%) 812 | - Gaps identified: {list} 813 | 814 | ## Reframing Applied 815 | - {bullet}: {original} → {reframed} [Reason: {why}] 816 | ... 817 | 818 | ## Source Resumes Used 819 | - {resume1}: {N} bullets 820 | - {resume2}: {N} bullets 821 | ... 822 | 823 | ## Gaps Addressed 824 | 825 | ### Before Experience Discovery: 826 | {Gap analysis showing initial state} 827 | 828 | ### After Experience Discovery: 829 | {Gap analysis showing final state} 830 | 831 | ### Remaining Gaps: 832 | {Any unresolved gaps with recommendations} 833 | 834 | ## Key Differentiators for This Role 835 | {What makes user uniquely qualified} 836 | 837 | ## Recommendations for Interview Prep 838 | - Stories to prepare 839 | - Questions to expect 840 | - Gaps to address 841 | ``` 842 | 843 | **Output:** `{Name}_{Company}_{Role}_Resume_Report.md` 844 | 845 | **Present to user:** 846 | ``` 847 | "Your tailored resume has been generated! 848 | 849 | FILES CREATED: 850 | - {Name}_{Company}_{Role}_Resume.md 851 | - {Name}_{Company}_{Role}_Resume.docx 852 | - {Name}_{Company}_{Role}_Resume_Report.md 853 | {- {Name}_{Company}_{Role}_Resume.pdf (if requested)} 854 | 855 | QUALITY METRICS: 856 | - JD Coverage: {percentage}% 857 | - Direct Matches: {percentage}% 858 | - Newly Discovered: {N} experiences 859 | 860 | Review the files and let me know: 861 | 1. Save to library (recommended) 862 | 2. Need revisions 863 | 3. Save but don't add to library" 864 | ``` 865 | 866 | ### Phase 5: Library Update (CONDITIONAL) 867 | 868 | **Goal:** Optionally add successful resume to library for future use 869 | 870 | **When:** After user reviews and approves generated resume 871 | 872 | **Checkpoint Question:** 873 | ``` 874 | "Are you satisfied with this resume? 875 | 876 | OPTIONS: 877 | 1. YES - Save to library 878 | → Adds resume to permanent location 879 | → Rebuilds library database 880 | → Makes new content available for future resumes 881 | 882 | 2. NO - Need revisions 883 | → What would you like to adjust? 884 | → Make changes and re-present 885 | 886 | 3. SAVE BUT DON'T ADD TO LIBRARY 887 | → Keep files in current location 888 | → Don't enrich database 889 | → Useful for experimental resumes 890 | 891 | Which option?" 892 | ``` 893 | 894 | **If Option 1 (YES - Save to library):** 895 | 896 | **Process:** 897 | 898 | 1. **Move resume to library:** 899 | ``` 900 | Source: {current_directory}/{Name}_{Company}_{Role}_Resume.md 901 | Destination: {resume_library}/{Name}_{Company}_{Role}_Resume.md 902 | 903 | Also move: 904 | - .docx file 905 | - .pdf file (if exists) 906 | - _Report.md file 907 | ``` 908 | 909 | 2. **Rebuild library database:** 910 | ``` 911 | Re-run Phase 0 library initialization 912 | Parse newly created resume 913 | Add bullets to experience database 914 | Update keyword/theme indices 915 | Tag with metadata: 916 | - target_company: {Company} 917 | - target_role: {Role} 918 | - generated_date: {timestamp} 919 | - jd_coverage: {percentage} 920 | - success_profile: {reference to profile} 921 | ``` 922 | 923 | 3. **Preserve generation metadata:** 924 | ```json 925 | { 926 | "resume_id": "{Name}_{Company}_{Role}", 927 | "generated": "{timestamp}", 928 | "source_resumes": ["{resume1}", "{resume2}"], 929 | "reframings": [ 930 | { 931 | "original": "{text}", 932 | "reframed": "{text}", 933 | "reason": "{why}" 934 | } 935 | ], 936 | "match_scores": { 937 | "bullet_1": 95, 938 | "bullet_2": 87, 939 | ... 940 | }, 941 | "newly_discovered": [ 942 | { 943 | "experience": "{description}", 944 | "bullet": "{text}", 945 | "addresses_gap": "{gap}" 946 | } 947 | ] 948 | } 949 | ``` 950 | 951 | 4. **Announce completion:** 952 | ``` 953 | "Resume saved to library! 954 | 955 | Library updated: 956 | - Total resumes: {N} 957 | - New content variations: {N} 958 | - Newly discovered experiences added: {N} 959 | 960 | This resume and its new content are now available for future tailoring sessions." 961 | ``` 962 | 963 | **If Option 2 (NO - Need revisions):** 964 | 965 | ``` 966 | "What would you like to adjust?" 967 | 968 | [Collect user feedback] 969 | [Make requested changes] 970 | [Re-run relevant phases] 971 | [Re-present for approval] 972 | 973 | [Repeat until satisfied or user cancels] 974 | ``` 975 | 976 | **If Option 3 (SAVE BUT DON'T ADD TO LIBRARY):** 977 | 978 | ``` 979 | "Resume files saved to current directory: 980 | - {Name}_{Company}_{Role}_Resume.md 981 | - {Name}_{Company}_{Role}_Resume.docx 982 | - {Name}_{Company}_{Role}_Resume_Report.md 983 | 984 | Not added to library - you can manually move later if desired." 985 | ``` 986 | 987 | **Benefits of Library Update:** 988 | - Grows library with each successful resume 989 | - New bullet variations become available 990 | - Reframings that work can be reused 991 | - Discovered experiences permanently captured 992 | - Future sessions start with richer library 993 | - Self-improving system over time 994 | 995 | **Output:** Updated library database + metadata preservation (if Option 1) 996 | 997 | ## Error Handling & Edge Cases 998 | 999 | **Edge Case 1: Insufficient Resume Library** 1000 | ``` 1001 | SCENARIO: User has only 1-2 resumes, limited content 1002 | 1003 | HANDLING: 1004 | "⚠️ Limited resume library detected ({N} resumes). 1005 | 1006 | This may result in: 1007 | - Fewer matching options 1008 | - More gaps in coverage 1009 | - Less variety in bullet phrasing 1010 | 1011 | RECOMMENDATIONS: 1012 | - Proceed with available content (I'll do my best!) 1013 | - Consider adding more resumes after this generation 1014 | - Experience Discovery phase will be especially valuable 1015 | 1016 | Continue? (Y/N)" 1017 | ``` 1018 | 1019 | **Edge Case 2: No Good Matches (confidence <60% for critical requirement)** 1020 | ``` 1021 | SCENARIO: Template slot requires experience user doesn't have 1022 | 1023 | HANDLING: 1024 | "❌ GAP: {Requirement} 1025 | 1026 | No matches found with confidence >60% 1027 | 1028 | OPTIONS: 1029 | 1. Run Experience Discovery - might surface undocumented work 1030 | 2. Reframe best available ({score}%) - I'll show you the reframing 1031 | 3. Omit bullet slot - reduce template allocation 1032 | 4. Note for cover letter - emphasize learning ability 1033 | 1034 | Which approach?" 1035 | 1036 | [Don't force matches - be transparent about gaps] 1037 | ``` 1038 | 1039 | **Edge Case 3: Research Phase Failures** 1040 | ``` 1041 | SCENARIO: WebSearch fails, LinkedIn unavailable, company info sparse 1042 | 1043 | HANDLING: 1044 | "⚠️ Limited company research available. 1045 | 1046 | What I found: 1047 | - {Available info} 1048 | 1049 | What's missing: 1050 | - {Missing areas} 1051 | 1052 | Falling back to job description-only analysis. 1053 | Result: Template will be optimized for JD but may miss cultural nuances. 1054 | 1055 | Do you have additional context about: 1056 | - Company culture? 1057 | - Team structure? 1058 | - Technologies used? 1059 | 1060 | (Optional - you can share or skip)" 1061 | 1062 | [Proceed with best-effort approach] 1063 | ``` 1064 | 1065 | **Edge Case 4: Job Description Quality Issues** 1066 | ``` 1067 | SCENARIO: Vague JD, missing requirements, poorly written 1068 | 1069 | HANDLING: 1070 | "⚠️ Job description lacks detail in areas: 1071 | - {Missing area 1} 1072 | - {Missing area 2} 1073 | 1074 | This may limit template optimization. 1075 | 1076 | Do you have additional context about: 1077 | - {Question 1} 1078 | - {Question 2} 1079 | 1080 | (Optional - I'll work with what's available)" 1081 | 1082 | [Extract what's possible, proceed] 1083 | ``` 1084 | 1085 | **Edge Case 5: Ambiguous Role Consolidation** 1086 | ``` 1087 | SCENARIO: Unclear whether to merge roles or keep separate 1088 | 1089 | HANDLING: 1090 | "🤔 Ambiguous consolidation decision for {Company} 1091 | 1092 | OPTION A (Consolidated): {Rationale} 1093 | OPTION B (Separate): {Rationale} 1094 | 1095 | Both are defensible. Which do you prefer? 1096 | 1097 | (This becomes your preference for similar situations)" 1098 | 1099 | [Remember preference for future] 1100 | ``` 1101 | 1102 | **Edge Case 6: Resume Length Constraints** 1103 | ``` 1104 | SCENARIO: Too much good content, exceeds 2 pages 1105 | 1106 | HANDLING: 1107 | "⚠️ Content exceeds 2 pages (current: {N} bullets, ~{pages} pages) 1108 | 1109 | PRUNING SUGGESTIONS (ranked by relevance): 1110 | Remove: 1111 | - {Bullet X}: {score}% match (lowest) 1112 | - {Bullet Y}: {score}% match 1113 | ... 1114 | 1115 | Keep all bullets and accept >2 pages? 1116 | OR 1117 | Remove {N} bullets to fit 2 pages? 1118 | 1119 | Your preference?" 1120 | 1121 | [User decides priority] 1122 | ``` 1123 | 1124 | **Error Recovery:** 1125 | - All checkpoints allow going back to previous phase 1126 | - User can request adjustments at any checkpoint 1127 | - Generation failures (DOCX/PDF) fall back to markdown-only 1128 | - Progress saved between phases (can resume if interrupted) 1129 | 1130 | **Graceful Degradation:** 1131 | - Research limited → Fall back to JD-only analysis 1132 | - Library small → Work with available + emphasize discovery 1133 | - Matches weak → Transparent gap identification 1134 | - Generation fails → Provide markdown + error details 1135 | 1136 | ## Usage Examples 1137 | 1138 | **Example 1: Internal Role (Same Company)** 1139 | ``` 1140 | USER: "I want to apply for Principal PM role in 1ES team at Microsoft. 1141 | Here's the JD: {paste}" 1142 | 1143 | SKILL: 1144 | 1. Library Build: Finds 29 resumes 1145 | 2. Research: Microsoft 1ES team, internal culture, role benchmarking 1146 | 3. Template: Features PM2 Azure Eng Systems role (most relevant) 1147 | 4. Discovery: Surfaces VS Code extension, Bhavana AI side project 1148 | 5. Assembly: 92% JD coverage, 75% direct matches 1149 | 6. Generate: MD + DOCX + Report 1150 | 7. User approves → Library updated with new resume + 6 discovered experiences 1151 | 1152 | RESULT: Highly competitive application leveraging internal experience 1153 | ``` 1154 | 1155 | **Example 2: Career Transition (Different Domain)** 1156 | ``` 1157 | USER: "I'm a TPM trying to transition to ecology PM role. JD: {paste}" 1158 | 1159 | SKILL: 1160 | 1. Library Build: Finds existing TPM resumes 1161 | 2. Research: Ecology sector, sustainability focus, cross-domain transfers 1162 | 3. Template: Reframes "Technical Program Manager" → "Program Manager, 1163 | Environmental Systems" emphasizing systems thinking 1164 | 4. Discovery: Surfaces volunteer conservation work, graduate research in 1165 | environmental modeling 1166 | 5. Assembly: 65% JD coverage - flags gaps in domain-specific knowledge 1167 | 6. Generate: Resume + gap analysis with cover letter recommendations 1168 | 1169 | RESULT: Bridges technical skills with environmental domain 1170 | ``` 1171 | 1172 | **Example 3: Career Gap Handling** 1173 | ``` 1174 | USER: "I have a 2-year gap while starting a company. JD: {paste}" 1175 | 1176 | SKILL: 1177 | 1. Library Build: Finds pre-gap resumes 1178 | 2. Research: Standard analysis 1179 | 3. Template: Includes startup as legitimate role 1180 | 4. Discovery: Surfaces skills developed during startup (fundraising, 1181 | product development, team building) 1182 | 5. Assembly: Frames gap as entrepreneurial experience 1183 | 6. Generate: Resume presenting gap as valuable experience 1184 | 1185 | RESULT: Gap becomes strength showing initiative and diverse skills 1186 | ``` 1187 | 1188 | **Example 4: Multi-Job Batch (3 Similar Roles)** 1189 | ``` 1190 | USER: "I want to apply for these 3 TPM roles: 1191 | 1. Microsoft 1ES Principal PM 1192 | 2. Google Cloud Senior TPM 1193 | 3. AWS Container Services Senior PM 1194 | Here are the JDs: {paste 3 JDs}" 1195 | 1196 | SKILL: 1197 | 1. Multi-job detection: Triggered (3 JDs detected) 1198 | 2. Intake: Collects all 3 JDs, initializes batch 1199 | 3. Library Build: Finds 29 resumes (once) 1200 | 4. Gap Analysis: Identifies 14 gaps, 8 unique after deduplication 1201 | 5. Shared Discovery: 30-minute session surfaces 5 new experiences 1202 | - Kubernetes CI/CD for nonprofits 1203 | - Azure migration for university lab 1204 | - Cross-functional team leadership examples 1205 | - Recent hackathon project 1206 | - Open source contributions 1207 | 6. Per-Job Processing (×3): 1208 | - Job 1 (Microsoft): 85% coverage, emphasizes Azure/1ES alignment 1209 | - Job 2 (Google): 88% coverage, emphasizes technical depth 1210 | - Job 3 (AWS): 78% coverage, addresses AWS gap in cover letter recs 1211 | 7. Batch Finalization: All 3 resumes reviewed, approved, added to library 1212 | 1213 | RESULT: 3 high-quality resumes in 40 minutes vs 45 minutes sequential 1214 | 5 new experiences captured, available for future applications 1215 | Average coverage: 84%, all critical gaps resolved 1216 | ``` 1217 | 1218 | **Example 5: Incremental Batch Addition** 1219 | ``` 1220 | WEEK 1: 1221 | USER: "I want to apply for 3 jobs: {Microsoft, Google, AWS}" 1222 | SKILL: [Processes batch as above, completes in 40 min] 1223 | 1224 | WEEK 2: 1225 | USER: "I found 2 more jobs: Stripe and Meta. Add them to my batch?" 1226 | SKILL: 1227 | 1. Load existing batch (includes 5 previously discovered experiences) 1228 | 2. Intake: Adds Job 4 (Stripe), Job 5 (Meta) 1229 | 3. Incremental Gap Analysis: Only 3 new gaps (vs 14 original) 1230 | - Payment systems (Stripe-specific) 1231 | - Social networking (Meta-specific) 1232 | - React/frontend (both) 1233 | 4. Incremental Discovery: 10-minute session for new gaps only 1234 | - Surfaces payment processing side project 1235 | - React work from bootcamp 1236 | - Large-scale system design course 1237 | 5. Per-Job Processing (×2): Jobs 4, 5 processed independently 1238 | 6. Updated Batch Summary: Now 5 jobs total, 8 experiences discovered 1239 | 1240 | RESULT: 2 additional resumes in 20 minutes (vs 30 min if starting from scratch) 1241 | Time saved by not re-asking 8 previous gaps: ~20 minutes 1242 | ``` 1243 | 1244 | ## Testing Guidelines 1245 | 1246 | **Manual Testing Checklist:** 1247 | 1248 | **Test 1: Happy Path** 1249 | ``` 1250 | - Provide JD with clear requirements 1251 | - Library with 10+ resumes 1252 | - Run all phases without skipping 1253 | - Verify generated files 1254 | - Check library update 1255 | PASS CRITERIA: 1256 | - All files generated correctly 1257 | - JD coverage >70% 1258 | - No errors in any phase 1259 | ``` 1260 | 1261 | **Test 2: Minimal Library** 1262 | ``` 1263 | - Provide only 2 resumes 1264 | - Run through workflow 1265 | - Verify gap handling 1266 | PASS CRITERIA: 1267 | - Graceful warning about limited library 1268 | - Still produces reasonable output 1269 | - Gaps clearly identified 1270 | ``` 1271 | 1272 | **Test 3: Research Failures** 1273 | ``` 1274 | - Use obscure company with minimal online presence 1275 | - Verify fallback to JD-only 1276 | PASS CRITERIA: 1277 | - Warning about limited research 1278 | - Proceeds with JD analysis 1279 | - Template still reasonable 1280 | ``` 1281 | 1282 | **Test 4: Experience Discovery Value** 1283 | ``` 1284 | - Run with deliberate gaps in library 1285 | - Conduct experience discovery 1286 | - Verify new experiences integrated 1287 | PASS CRITERIA: 1288 | - Discovers genuine undocumented experiences 1289 | - Integrates into final resume 1290 | - Improves JD coverage 1291 | ``` 1292 | 1293 | **Test 5: Title Reframing** 1294 | ``` 1295 | - Test various role transitions 1296 | - Verify title reframing suggestions 1297 | PASS CRITERIA: 1298 | - Multiple options provided 1299 | - Truthfulness maintained 1300 | - Rationales clear 1301 | ``` 1302 | 1303 | **Test 6: Multi-format Generation** 1304 | ``` 1305 | - Generate MD, DOCX, PDF, Report 1306 | - Verify formatting consistency 1307 | PASS CRITERIA: 1308 | - All formats readable 1309 | - Formatting professional 1310 | - Content identical across formats 1311 | ``` 1312 | 1313 | **Regression Testing:** 1314 | ``` 1315 | After any SKILL.md changes: 1316 | 1. Re-run Test 1 (happy path) 1317 | 2. Verify no functionality broken 1318 | 3. Commit only if passes 1319 | ``` 1320 | -------------------------------------------------------------------------------- /multi-job-workflow.md: -------------------------------------------------------------------------------- 1 | # Multi-Job Resume Tailoring Workflow 2 | 3 | ## Overview 4 | 5 | Handles 3-5 similar jobs efficiently by consolidating experience discovery while maintaining per-job research depth. 6 | 7 | **Architecture:** Shared Discovery + Per-Job Tailoring 8 | 9 | **Target Use Case:** 10 | - Small batches (3-5 jobs) 11 | - Moderately similar roles (60%+ requirement overlap) 12 | - Continuous workflow (add jobs incrementally) 13 | 14 | ## Phase 0: Job Intake & Batch Initialization 15 | 16 | **Goal:** Collect all job descriptions and initialize batch structure 17 | 18 | **User Interaction:** 19 | 20 | ``` 21 | SKILL: "Let's set up your multi-job batch. How would you like to provide 22 | the job descriptions? 23 | 24 | 1. Paste them all now (recommended for efficiency) 25 | 2. Provide one at a time 26 | 3. Provide URLs to fetch 27 | 28 | For each job, I need: 29 | - Job description (text or URL) 30 | - Company name (if not in JD) 31 | - Role title (if not in JD) 32 | - Optional: Priority (high/medium/low) or notes" 33 | ``` 34 | 35 | **Data Collection Loop:** 36 | 37 | For each job (until user says "done"): 38 | 1. Collect JD text or URL 39 | 2. Collect company name (extract from JD if possible, else ask) 40 | 3. Collect role title (extract from JD if possible, else ask) 41 | 4. Ask: "Priority for this job? (high/medium/low, default: medium)" 42 | 5. Ask: "Any notes about this job? (optional, e.g., 'referral from X')" 43 | 6. Assign job_id: "job-1", "job-2", etc. 44 | 7. Set status: "pending" 45 | 8. Add to batch 46 | 47 | **Quick JD Parsing:** 48 | 49 | For each job, lightweight extraction (NOT full research yet): 50 | 51 | ```python 52 | # Pseudo-code 53 | def quick_parse_jd(jd_text): 54 | return { 55 | "requirements_must_have": extract_requirements(jd_text, required=True), 56 | "requirements_nice_to_have": extract_requirements(jd_text, required=False), 57 | "technical_skills": extract_technical_keywords(jd_text), 58 | "soft_skills": extract_soft_skills(jd_text), 59 | "domain_areas": identify_domains(jd_text) 60 | } 61 | ``` 62 | 63 | Purpose: Just enough to identify gaps for discovery phase. Full research happens per-job later. 64 | 65 | **Batch Initialization:** 66 | 67 | Create batch directory structure: 68 | 69 | ``` 70 | resumes/batches/batch-{YYYY-MM-DD}-{slug}/ 71 | ├── _batch_state.json # State tracking 72 | ├── _aggregate_gaps.md # Gap analysis (created in Phase 1) 73 | ├── _discovered_experiences.md # Discovery output (created in Phase 2) 74 | └── (job directories created during per-job processing) 75 | ``` 76 | 77 | Initialize _batch_state.json: 78 | 79 | ```json 80 | { 81 | "batch_id": "batch-2025-11-04-job-search", 82 | "created": "2025-11-04T10:30:00Z", 83 | "current_phase": "intake", 84 | "processing_mode": "interactive", 85 | "jobs": [ 86 | { 87 | "job_id": "job-1", 88 | "company": "Microsoft", 89 | "role": "Principal PM - 1ES", 90 | "jd_text": "...", 91 | "jd_url": "https://...", 92 | "priority": "high", 93 | "notes": "Internal referral from Alice", 94 | "status": "pending", 95 | "requirements": ["Kubernetes", "CI/CD", "Leadership"], 96 | "gaps": [] 97 | } 98 | ], 99 | "discoveries": [], 100 | "aggregate_gaps": {} 101 | } 102 | ``` 103 | 104 | **Library Initialization:** 105 | 106 | Run standard Phase 0 from SKILL.md (library initialization) once for the entire batch. 107 | 108 | **Output:** 109 | 110 | ``` 111 | "Batch initialized with {N} jobs: 112 | - Job 1: {Company} - {Role} (priority: {priority}) 113 | - Job 2: {Company} - {Role} 114 | ... 115 | 116 | Next: Aggregate gap analysis across all jobs. 117 | Continue? (Y/N)" 118 | ``` 119 | 120 | **Checkpoint:** User confirms batch is complete before proceeding. 121 | 122 | ## Phase 1: Aggregate Gap Analysis 123 | 124 | **Goal:** Build unified gap list across all jobs to guide single efficient discovery session 125 | 126 | **Process:** 127 | 128 | **1.1 Extract Requirements from All JDs:** 129 | 130 | For each job: 131 | - Parse requirements (already done in Phase 0 quick parse) 132 | - Categorize: must-have vs nice-to-have 133 | - Extract keywords and skill areas 134 | 135 | Example output: 136 | ``` 137 | Job 1 (Microsoft 1ES): Kubernetes, CI/CD, cross-functional leadership, Azure 138 | Job 2 (Google Cloud): Kubernetes, GCP, distributed systems, team management 139 | Job 3 (AWS): Container orchestration, AWS services, program management 140 | ``` 141 | 142 | **1.2 Match Against Resume Library:** 143 | 144 | For each requirement across ALL jobs: 145 | 1. Search library for matching experiences (using matching-strategies.md) 146 | 2. Score confidence (0-100%) 147 | 3. Flag as gap if confidence < 60% 148 | 149 | ```python 150 | # Pseudo-code 151 | for job in batch.jobs: 152 | for requirement in job.requirements: 153 | matches = search_library(requirement) 154 | best_score = max(match.score for match in matches) 155 | if best_score < 60: 156 | flag_as_gap(requirement, best_score, job.job_id) 157 | ``` 158 | 159 | **1.3 Build Aggregate Gap Map:** 160 | 161 | Deduplicate gaps across jobs and prioritize: 162 | 163 | ```python 164 | # Pseudo-code 165 | def build_aggregate_gaps(all_gaps): 166 | gap_map = {} 167 | 168 | for gap in all_gaps: 169 | if gap.name not in gap_map: 170 | gap_map[gap.name] = { 171 | "appears_in_jobs": [], 172 | "best_match": gap.confidence, 173 | "priority": 0 174 | } 175 | gap_map[gap.name]["appears_in_jobs"].append(gap.job_id) 176 | 177 | # Prioritize 178 | for gap_name, gap_data in gap_map.items(): 179 | job_count = len(gap_data["appears_in_jobs"]) 180 | if job_count >= 3: 181 | gap_data["priority"] = 3 # Critical 182 | elif job_count == 2: 183 | gap_data["priority"] = 2 # Important 184 | else: 185 | gap_data["priority"] = 1 # Job-specific 186 | 187 | return gap_map 188 | ``` 189 | 190 | **1.4 Create Gap Analysis Report:** 191 | 192 | Generate `_aggregate_gaps.md`: 193 | 194 | ```markdown 195 | # Aggregate Gap Analysis 196 | **Batch:** batch-2025-11-04-job-search 197 | **Generated:** 2025-11-04T11:00:00Z 198 | 199 | ## Coverage Summary 200 | 201 | - Job 1 (Microsoft): 68% coverage, 5 gaps 202 | - Job 2 (Google): 72% coverage, 4 gaps 203 | - Job 3 (AWS): 65% coverage, 6 gaps 204 | 205 | ## Critical Gaps (appear in 3+ jobs) 206 | 207 | ### Kubernetes at scale 208 | - **Appears in:** Jobs 1, 2, 3 209 | - **Current best match:** 45% confidence 210 | - **Match source:** "Deployed containerized app for nonprofit" (2023) 211 | - **Gap:** No production Kubernetes management at scale 212 | 213 | ### CI/CD pipeline management 214 | - **Appears in:** Jobs 1, 2, 3 215 | - **Current best match:** 58% confidence 216 | - **Match source:** "Set up GitHub Actions workflow" (2024) 217 | - **Gap:** Limited enterprise CI/CD experience 218 | 219 | ## Important Gaps (appear in 2 jobs) 220 | 221 | ### Cloud-native architecture 222 | - **Appears in:** Jobs 2, 3 223 | - **Current best match:** 52% confidence 224 | 225 | ### Cross-functional team leadership 226 | - **Appears in:** Jobs 1, 2 227 | - **Current best match:** 67% confidence (not a gap, but could improve) 228 | 229 | ## Job-Specific Gaps 230 | 231 | ### Azure-specific experience 232 | - **Appears in:** Job 1 only 233 | - **Current best match:** 40% confidence 234 | 235 | ### GCP experience 236 | - **Appears in:** Job 2 only 237 | - **Current best match:** 35% confidence 238 | 239 | ## Aggregate Statistics 240 | 241 | - **Total gaps:** 14 242 | - **Unique gaps:** 8 (after deduplication) 243 | - **Critical gaps:** 3 244 | - **Important gaps:** 4 245 | - **Job-specific gaps:** 1 246 | 247 | ## Recommended Discovery Time 248 | 249 | - Critical gaps (3 gaps × 5-7 min): 15-20 minutes 250 | - Important gaps (4 gaps × 3-5 min): 12-20 minutes 251 | - Job-specific gaps (1 gap × 2-3 min): 2-3 minutes 252 | 253 | **Total estimated discovery time:** 30-40 minutes 254 | 255 | For 3 similar jobs, this replaces 3 × 15 min = 45 min of sequential discovery. 256 | ``` 257 | 258 | **1.5 Update Batch State:** 259 | 260 | ```json 261 | { 262 | "current_phase": "gap_analysis", 263 | "aggregate_gaps": { 264 | "critical_gaps": [ 265 | { 266 | "gap_name": "Kubernetes at scale", 267 | "appears_in_jobs": ["job-1", "job-2", "job-3"], 268 | "current_best_match": 45, 269 | "priority": 3 270 | } 271 | ], 272 | "important_gaps": [...], 273 | "job_specific_gaps": [...] 274 | } 275 | } 276 | ``` 277 | 278 | **Output to User:** 279 | 280 | ``` 281 | "Gap analysis complete! Here's what I found: 282 | 283 | COVERAGE SUMMARY: 284 | - Job 1 (Microsoft): 68% coverage, 5 gaps 285 | - Job 2 (Google): 72% coverage, 4 gaps 286 | - Job 3 (AWS): 65% coverage, 6 gaps 287 | 288 | AGGREGATE GAPS (14 total, 8 unique after deduplication): 289 | - 3 critical gaps (appear in all jobs) 🔴 290 | - 4 important gaps (appear in 2 jobs) 🟡 291 | - 1 job-specific gap 🔵 292 | 293 | I recommend a 30-40 minute experience discovery session to address 294 | these gaps. This will benefit all 3 applications. 295 | 296 | Would you like to: 297 | 1. START DISCOVERY - Address gaps through conversational discovery 298 | 2. SKIP DISCOVERY - Proceed with current library (not recommended) 299 | 3. REVIEW GAPS - See detailed gap analysis first 300 | 301 | Recommendation: Option 1 or 3 (review then start)" 302 | ``` 303 | 304 | **Checkpoint:** User chooses next action before proceeding. 305 | 306 | ## Phase 2: Shared Experience Discovery 307 | 308 | **Goal:** Surface undocumented experiences across all gaps through single conversational session 309 | 310 | **Core Principle:** Same branching interview from branching-questions.md, but with multi-job context for each question. 311 | 312 | **Session Flow:** 313 | 314 | **2.1 Start with Highest-Leverage Gaps:** 315 | 316 | Process gaps in priority order: 317 | 1. Critical gaps (appear in 3+ jobs) - 5-7 min each 318 | 2. Important gaps (appear in 2 jobs) - 3-5 min each 319 | 3. Job-specific gaps - 2-3 min each 320 | 321 | **2.2 Multi-Job Contextualized Questions:** 322 | 323 | For each gap, provide multi-job context before branching interview: 324 | 325 | **Single-Job Version (from branching-questions.md):** 326 | ``` 327 | "I noticed the job requires Kubernetes experience. Have you worked with Kubernetes?" 328 | ``` 329 | 330 | **Multi-Job Version (new):** 331 | ``` 332 | "Kubernetes experience appears in 3 of your target jobs (Microsoft, Google, AWS). 333 | 334 | This is a HIGH-LEVERAGE gap - addressing it helps multiple applications. 335 | 336 | Current best match: 45% confidence ('Deployed containerized app for nonprofit') 337 | 338 | Have you worked with Kubernetes or container orchestration?" 339 | ``` 340 | 341 | **2.3 Conduct Branching Interview:** 342 | 343 | For each gap: 344 | 1. Initial probe with multi-job context (see above) 345 | 2. Branch based on answer using branching-questions.md patterns: 346 | - YES → Deep dive (scale, challenges, metrics) 347 | - INDIRECT → Explore role and transferability 348 | - ADJACENT → Explore related experience 349 | - PERSONAL → Assess recency and substance 350 | - NO → Try broader category or move on 351 | 352 | 3. Follow up systematically: 353 | - "What," "how," "why" questions 354 | - Quantify: "Any metrics?" 355 | - Contextualize: "Was this production?" 356 | - Validate: "This addresses {gap} for {jobs}" 357 | 358 | 4. Capture immediately with job tags: 359 | 360 | **2.4 Capture Structure:** 361 | 362 | As experiences are discovered, capture to `_discovered_experiences.md`: 363 | 364 | ```markdown 365 | # Discovered Experiences 366 | **Batch:** batch-2025-11-04-job-search 367 | **Discovery Date:** 2025-11-04T11:30:00Z 368 | 369 | ## Experience 1: Kubernetes CI/CD for nonprofit project 370 | 371 | **Context:** Side project, 2023-2024, production deployment 372 | 373 | **Scope:** 374 | - GitHub Actions pipeline with Kubernetes deployments 375 | - 3 nonprofit organizations using it 376 | - Integrated pytest for testing 377 | - Managed scaling and monitoring 378 | 379 | **Metrics:** 380 | - 3 production deployments 381 | - 99.9% uptime over 12 months 382 | - Reduced deployment time from 2 hours to 15 minutes 383 | 384 | **Addresses gaps in:** 385 | - Jobs 1, 2, 3: Kubernetes at scale 386 | - Jobs 1, 2: CI/CD pipeline management 387 | 388 | **Confidence Improvement:** 389 | - Kubernetes: 45% → 75% (+30%) 390 | - CI/CD: 58% → 82% (+24%) 391 | 392 | **Bullet Draft:** 393 | "Designed and implemented Kubernetes-based CI/CD pipeline using GitHub Actions 394 | and pytest, supporting production deployments for 3 nonprofit organizations with 395 | 99.9% uptime and 87% reduction in deployment time" 396 | 397 | **Integration Decision:** [Pending user approval] 398 | 399 | --- 400 | 401 | ## Experience 2: Azure migration for university lab 402 | 403 | **Context:** Graduate research, 2022-2023 404 | 405 | **Scope:** 406 | - Migrated on-premise compute to Azure VMs 407 | - Set up Azure DevOps for lab 408 | - Managed costs and resource allocation 409 | 410 | **Metrics:** 411 | - Migrated 15 TB of data 412 | - Reduced compute costs by 40% 413 | - Supported 25 researchers 414 | 415 | **Addresses gaps in:** 416 | - Job 1 only: Azure-specific experience 417 | 418 | **Confidence Improvement:** 419 | - Azure: 40% → 70% (+30%) 420 | 421 | **Bullet Draft:** 422 | "Led Azure cloud migration for university research lab, migrating 15 TB of data 423 | and implementing Azure DevOps, reducing compute costs by 40% while supporting 424 | 25 researchers" 425 | 426 | **Integration Decision:** [Pending user approval] 427 | ``` 428 | 429 | **2.5 Track Coverage Improvement in Real-Time:** 430 | 431 | After each discovery, update user: 432 | 433 | ``` 434 | "Great! That addresses Kubernetes for all 3 jobs. 435 | 436 | UPDATED COVERAGE: 437 | - Job 1 (Microsoft): 68% → 78% (+10%) 438 | - Job 2 (Google): 72% → 82% (+10%) 439 | - Job 3 (AWS): 65% → 75% (+10%) 440 | 441 | Remaining critical gaps: 2 (down from 3) 442 | 443 | Continue with next gap? (Y/N)" 444 | ``` 445 | 446 | **2.6 Integration Decision Per Experience:** 447 | 448 | After discovery session complete: 449 | 450 | ``` 451 | "Excellent! I captured 5 new experiences addressing gaps across your jobs. 452 | 453 | For each experience, how should I integrate it? 454 | 455 | --- 456 | EXPERIENCE 1: Kubernetes CI/CD for nonprofit project 457 | ├─ Addresses: Jobs 1, 2, 3 458 | └─ Options: 459 | 1. ADD TO LIBRARY FOR ALL JOBS - Integrate and use everywhere 460 | 2. ADD TO LIBRARY, USE SELECTIVELY - User picks which jobs 461 | 3. SKIP - Don't integrate 462 | 463 | Your choice for Experience 1? (1/2/3) 464 | 465 | --- 466 | EXPERIENCE 2: Azure migration for university lab 467 | ├─ Addresses: Job 1 only 468 | └─ Options: 469 | 1. ADD TO LIBRARY - Integrate for Job 1 470 | 2. SKIP - Not needed 471 | 472 | Your choice for Experience 2? (1/2) 473 | ``` 474 | 475 | **2.7 Enrich Library:** 476 | 477 | For each approved experience: 478 | 1. Add to library database 479 | 2. Tag with metadata: 480 | - discovered_date 481 | - addressed_gaps 482 | - used_in_jobs 483 | - confidence_improvement 484 | 485 | **2.8 Update Batch State:** 486 | 487 | ```json 488 | { 489 | "current_phase": "discovery", 490 | "discoveries": [ 491 | { 492 | "experience_id": "disc-1", 493 | "text": "Kubernetes CI/CD for nonprofit project", 494 | "context": "Side project, 2023-2024, production", 495 | "scope": "GitHub Actions, 3 nonprofits, pytest, monitoring", 496 | "addresses_jobs": ["job-1", "job-2", "job-3"], 497 | "addresses_gaps": ["Kubernetes", "CI/CD"], 498 | "confidence_improvement": { 499 | "Kubernetes": {"before": 45, "after": 75}, 500 | "CI/CD": {"before": 58, "after": 82} 501 | }, 502 | "integrated": true, 503 | "bullet_draft": "Designed and implemented..." 504 | } 505 | ] 506 | } 507 | ``` 508 | 509 | **Output:** 510 | 511 | ``` 512 | "Discovery complete! 513 | 514 | SUMMARY: 515 | - New experiences captured: 5 516 | - Experiences integrated: 5 517 | - Average coverage improvement: +16% 518 | 519 | FINAL COVERAGE: 520 | - Job 1 (Microsoft): 68% → 85% (+17%) 521 | - Job 2 (Google): 72% → 88% (+16%) 522 | - Job 3 (AWS): 65% → 78% (+13%) 523 | 524 | Remaining gaps: 5 (down from 14) 525 | ├─ 0 critical gaps ✓ 526 | ├─ 2 important gaps 527 | └─ 3 job-specific gaps 528 | 529 | Ready to proceed with per-job processing? (Y/N)" 530 | ``` 531 | 532 | **Checkpoint:** User approves before moving to per-job processing. 533 | 534 | ## Phase 3: Per-Job Processing 535 | 536 | **Goal:** Process each job independently through research/template/matching/generation 537 | 538 | **Key Insight:** Once discovery is complete, each job can be processed independently using enriched library. 539 | 540 | **Processing Modes:** 541 | 542 | Before starting, ask user: 543 | 544 | ``` 545 | "Discovery complete! Now processing each job individually. 546 | 547 | PROCESSING MODE: 548 | 1. INTERACTIVE (default) - I'll show you checkpoints for each job 549 | (template approval, content mapping approval) 550 | 551 | 2. EXPRESS - I'll auto-approve templates and matching using best judgment, 552 | you review all final resumes together 553 | 554 | Recommendation: INTERACTIVE for first 1-2 jobs, then switch to EXPRESS 555 | if you like the pattern. 556 | 557 | Which mode for Job 1? (1/2)" 558 | ``` 559 | 560 | **3.1 Per-Job Loop:** 561 | 562 | For each job in batch (job.status == "pending"): 563 | 564 | 1. Set job.status = "in_progress" 565 | 2. Set job.current_phase = "research" 566 | 3. Create job directory: `resumes/batches/{batch_id}/job-{N}-{company-slug}/` 567 | 4. Process through phases (see below) 568 | 5. Set job.status = "completed" 569 | 6. Set job.files_generated = true 570 | 7. Move to next job 571 | 572 | **3.2 Phase 3A: Research (Per-Job)** 573 | 574 | **Same depth as single-job workflow (SKILL.md Phase 1):** 575 | 576 | ``` 577 | Job {N}/{total}: {Company} - {Role} 578 | ├─ Company research via WebSearch (mission, values, culture, news) 579 | ├─ Role benchmarking via LinkedIn (find 3-5 similar role holders) 580 | ├─ Success profile synthesis 581 | └─ Checkpoint (if INTERACTIVE mode): Present success profile to user 582 | ``` 583 | 584 | Save to: `job-{N}-{company-slug}/success_profile.md` 585 | 586 | **INTERACTIVE Mode:** 587 | ``` 588 | "Job 1: Microsoft - Principal PM 589 | 590 | Based on my research, here's what makes candidates successful for this role: 591 | 592 | {SUCCESS_PROFILE_SUMMARY} 593 | 594 | Key findings: 595 | - {Finding 1} 596 | - {Finding 2} 597 | - {Finding 3} 598 | 599 | Does this match your understanding? Any adjustments? 600 | 601 | (Y to proceed / provide feedback)" 602 | ``` 603 | 604 | **EXPRESS Mode:** 605 | - Generate success profile 606 | - Save to file 607 | - Proceed automatically (no checkpoint) 608 | 609 | **3.3 Phase 3B: Template Generation (Per-Job)** 610 | 611 | **Same process as single-job workflow (SKILL.md Phase 2):** 612 | 613 | ``` 614 | ├─ Role consolidation decisions 615 | ├─ Title reframing options 616 | ├─ Bullet allocation 617 | └─ Checkpoint (if INTERACTIVE): Approve template structure 618 | ``` 619 | 620 | Save to: `job-{N}-{company-slug}/template.md` 621 | 622 | **INTERACTIVE Mode:** 623 | ``` 624 | "Here's the optimized resume structure for {Company} - {Role}: 625 | 626 | STRUCTURE: 627 | {Section order and rationale} 628 | 629 | ROLE CONSOLIDATION: 630 | {Decisions with options} 631 | 632 | TITLE REFRAMING: 633 | {Proposed titles with alternatives} 634 | 635 | BULLET ALLOCATION: 636 | {Allocation with rationale} 637 | 638 | Approve? (Y/N/adjust)" 639 | ``` 640 | 641 | **EXPRESS Mode:** 642 | - Generate template using best judgment 643 | - Save to file 644 | - Proceed automatically 645 | 646 | **3.4 Phase 3C: Content Matching (Per-Job)** 647 | 648 | **Same process as single-job workflow (SKILL.md Phase 3):** 649 | 650 | Uses enriched library (includes discovered experiences from Phase 2) 651 | 652 | ``` 653 | ├─ Match content to template slots 654 | ├─ Confidence scoring (Direct/Transferable/Adjacent) 655 | ├─ Reframing suggestions 656 | ├─ Gap identification (should be minimal after discovery) 657 | └─ Checkpoint (if INTERACTIVE): Approve content mapping 658 | ``` 659 | 660 | Save to: `job-{N}-{company-slug}/content_mapping.md` 661 | 662 | **INTERACTIVE Mode:** 663 | ``` 664 | "Content matched for {Company} - {Role}: 665 | 666 | COVERAGE SUMMARY: 667 | - Direct matches: {N} bullets ({%}%) 668 | - Transferable: {N} bullets ({%}%) 669 | - Adjacent: {N} bullets ({%}%) 670 | - Gaps: {N} ({%}%) 671 | 672 | OVERALL JD COVERAGE: {%}% 673 | 674 | [Show detailed mapping] 675 | 676 | Approve? (Y/N/adjust)" 677 | ``` 678 | 679 | **EXPRESS Mode:** 680 | - Generate mapping automatically 681 | - Use highest confidence matches 682 | - Save to file 683 | - Proceed automatically 684 | 685 | **3.5 Phase 3D: Generation (Per-Job)** 686 | 687 | **Same process as single-job workflow (SKILL.md Phase 4):** 688 | 689 | ``` 690 | ├─ Generate Markdown resume 691 | ├─ Generate DOCX resume (using document-skills:docx) 692 | ├─ Generate Report 693 | └─ No checkpoint - just generate files 694 | ``` 695 | 696 | Output files: 697 | - `{Name}_{Company}_{Role}_Resume.md` 698 | - `{Name}_{Company}_{Role}_Resume.docx` 699 | - `{Name}_{Company}_{Role}_Resume_Report.md` 700 | 701 | All saved to: `job-{N}-{company-slug}/` 702 | 703 | **3.6 Progress Tracking:** 704 | 705 | After each job completes: 706 | 707 | ``` 708 | "✓ Job {N}/{total} complete: {Company} - {Role} 709 | 710 | QUALITY METRICS: 711 | - JD Coverage: {%}% 712 | - Direct Matches: {%}% 713 | - Files: ✓ MD ✓ DOCX ✓ Report 714 | 715 | Jobs remaining: {total - N} 716 | Estimated time: ~{N * 8} minutes 717 | 718 | Continue to Job {N+1}? (Y/N/pause)" 719 | ``` 720 | 721 | **3.7 Pause/Resume Support:** 722 | 723 | If user says "pause": 724 | ``` 725 | "Progress saved! 726 | 727 | CURRENT STATE: 728 | - Jobs completed: {N} 729 | - Jobs remaining: {total - N} 730 | - Next: Job {N+1} - {Company} - {Role} 731 | 732 | To resume later, say 'resume batch {batch_id}' or 'continue my batch'." 733 | ``` 734 | 735 | Save batch state with current progress. 736 | 737 | ## Phase 4: Batch Finalization 738 | 739 | **Goal:** Present all resumes for review, handle batch-level actions, update library 740 | 741 | **4.1 Generate Batch Summary:** 742 | 743 | Create `_batch_summary.md`: 744 | 745 | ```markdown 746 | # Batch Summary 747 | **Batch ID:** batch-2025-11-04-job-search 748 | **Created:** 2025-11-04T10:30:00Z 749 | **Completed:** 2025-11-04T14:15:00Z 750 | **Total Time:** 3 hours 45 minutes 751 | 752 | ## Job Summaries 753 | 754 | ### Job 1: Principal PM - Microsoft 1ES 755 | - **Status:** Completed ✓ 756 | - **Coverage:** 85% 757 | - **Direct Matches:** 78% 758 | - **Key Strengths:** Azure infrastructure, cross-functional leadership, CI/CD 759 | - **Remaining Gaps:** None critical 760 | - **Files:** 761 | - Varun_Ramesh_Microsoft_1ES_Principal_PM_Resume.md 762 | - Varun_Ramesh_Microsoft_1ES_Principal_PM_Resume.docx 763 | - Varun_Ramesh_Microsoft_1ES_Principal_PM_Resume_Report.md 764 | 765 | ### Job 2: Senior TPM - Google Cloud Infrastructure 766 | - **Status:** Completed ✓ 767 | - **Coverage:** 88% 768 | - **Direct Matches:** 72% 769 | - **Key Strengths:** Kubernetes experience, distributed systems, technical depth 770 | - **Remaining Gaps:** GCP-specific (low priority, addressed in summary) 771 | - **Files:** 772 | - Varun_Ramesh_Google_Cloud_Senior_TPM_Resume.md 773 | - Varun_Ramesh_Google_Cloud_Senior_TPM_Resume.docx 774 | - Varun_Ramesh_Google_Cloud_Senior_TPM_Resume_Report.md 775 | 776 | ### Job 3: Senior PM - AWS Container Services 777 | - **Status:** Completed ✓ 778 | - **Coverage:** 78% 779 | - **Direct Matches:** 68% 780 | - **Key Strengths:** Container orchestration, program management, technical leadership 781 | - **Remaining Gaps:** AWS-specific (noted in cover letter recommendations) 782 | - **Files:** 783 | - Varun_Ramesh_AWS_Container_Senior_PM_Resume.md 784 | - Varun_Ramesh_AWS_Container_Senior_PM_Resume.docx 785 | - Varun_Ramesh_AWS_Container_Senior_PM_Resume_Report.md 786 | 787 | ## Batch Statistics 788 | 789 | ### Discovery Impact 790 | - **New experiences discovered:** 5 791 | - **Experiences integrated:** 5 792 | - **Average coverage improvement:** +16% 793 | - **Time saved vs sequential:** ~15 minutes (shared discovery) 794 | 795 | ### Coverage Metrics 796 | - **Average JD coverage:** 84% 797 | - **Average direct matches:** 73% 798 | - **Total files created:** 9 (3 × MD + DOCX + Report) 799 | 800 | ### Gap Resolution 801 | - **Starting gaps:** 14 unique gaps 802 | - **Gaps resolved through discovery:** 9 803 | - **Remaining gaps:** 5 804 | - 0 critical (100% critical gap resolution) 805 | - 2 important (50% important gap resolution) 806 | - 3 job-specific (handled in cover letters) 807 | 808 | ## Files Location 809 | 810 | ``` 811 | resumes/batches/batch-2025-11-04-job-search/ 812 | ├── _batch_state.json 813 | ├── _aggregate_gaps.md 814 | ├── _discovered_experiences.md 815 | ├── _batch_summary.md (this file) 816 | ├── job-1-microsoft/ 817 | │ ├── success_profile.md 818 | │ ├── template.md 819 | │ ├── content_mapping.md 820 | │ ├── Varun_Ramesh_Microsoft_1ES_Principal_PM_Resume.md 821 | │ ├── Varun_Ramesh_Microsoft_1ES_Principal_PM_Resume.docx 822 | │ └── Varun_Ramesh_Microsoft_1ES_Principal_PM_Resume_Report.md 823 | ├── job-2-google/ 824 | │ └── (same structure, 6 files) 825 | └── job-3-aws/ 826 | └── (same structure, 6 files) 827 | ``` 828 | 829 | ## Recommendations 830 | 831 | ### Interview Prep 832 | - Prepare Kubernetes stories (appears in all 3 jobs) 833 | - Emphasize cross-functional leadership 834 | - Practice articulating CI/CD experience with metrics 835 | 836 | ### Cover Letter Focus 837 | - Job 1 (Microsoft): Emphasize internal Azure knowledge, 1ES mission alignment 838 | - Job 2 (Google): Address GCP learning plan, highlight distributed systems thinking 839 | - Job 3 (AWS): Address AWS learning plan, emphasize container orchestration transferability 840 | 841 | ### Application Priority 842 | Based on coverage scores and fit: 843 | 1. **Job 2 (Google):** Highest coverage (88%), strong technical fit 844 | 2. **Job 1 (Microsoft):** Strong coverage (85%), internal opportunity 845 | 3. **Job 3 (AWS):** Good coverage (78%), but more gaps to address in materials 846 | ``` 847 | 848 | **4.2 Present to User:** 849 | 850 | ``` 851 | "All 3 resumes generated! 🎉 852 | 853 | JOB SUMMARIES: 854 | ┌─────────────────────────────────────────────────────────────┐ 855 | │ Job 1: Principal PM - Microsoft 1ES │ 856 | │ Coverage: 85% | Direct: 78% | Files: ✓ MD ✓ DOCX ✓ Report │ 857 | │ Key strengths: Azure infra, cross-functional leadership │ 858 | │ Remaining gaps: None critical │ 859 | └─────────────────────────────────────────────────────────────┘ 860 | 861 | ┌─────────────────────────────────────────────────────────────┐ 862 | │ Job 2: Senior TPM - Google Cloud Infrastructure │ 863 | │ Coverage: 88% | Direct: 72% | Files: ✓ MD ✓ DOCX ✓ Report │ 864 | │ Key strengths: Kubernetes, distributed systems │ 865 | │ Remaining gaps: GCP-specific (low priority) │ 866 | └─────────────────────────────────────────────────────────────┘ 867 | 868 | ┌─────────────────────────────────────────────────────────────┐ 869 | │ Job 3: Senior PM - AWS Container Services │ 870 | │ Coverage: 78% | Direct: 68% | Files: ✓ MD ✓ DOCX ✓ Report │ 871 | │ Key strengths: Container orchestration, program mgmt │ 872 | │ Remaining gaps: AWS-specific (cover letter) │ 873 | └─────────────────────────────────────────────────────────────┘ 874 | 875 | BATCH STATISTICS: 876 | - New experiences discovered: 5 877 | - Average coverage improvement: +16% 878 | - Total files: 9 (3 jobs × MD + DOCX + Report) 879 | - Time saved vs sequential: ~15 minutes 880 | 881 | FILES: resumes/batches/batch-2025-11-04-job-search/ 882 | 883 | REVIEW OPTIONS: 884 | 1. APPROVE ALL - Save all resumes to library 885 | 2. REVIEW INDIVIDUALLY - Approve/revise each resume separately 886 | 3. REVISE BATCH - Make changes across multiple resumes 887 | 4. SAVE BUT DON'T UPDATE LIBRARY - Keep files, don't enrich library 888 | 889 | Which option? (1/2/3/4)" 890 | ``` 891 | 892 | **4.3 Handle Review Option 1 (APPROVE ALL):** 893 | 894 | ``` 895 | User chooses: 1 896 | 897 | Process: 898 | 1. Copy all resume files to library directory 899 | 2. Add all discovered experiences to library database 900 | 3. Tag with metadata (batch_id, target_company, target_role, etc.) 901 | 4. Rebuild library indices 902 | 5. Update batch state to "completed" 903 | 904 | Output: 905 | "✓ All resumes saved to library! 906 | 907 | LIBRARY UPDATED: 908 | - New resumes: 3 909 | - New experiences: 5 910 | - Total resumes in library: 32 911 | 912 | These experiences are now available for future applications. 913 | 914 | Good luck with your applications! 🚀" 915 | ``` 916 | 917 | **4.4 Handle Review Option 2 (REVIEW INDIVIDUALLY):** 918 | 919 | ``` 920 | User chooses: 2 921 | 922 | For each job: 923 | Show JD requirements vs resume coverage 924 | Highlight newly discovered experiences used 925 | Ask: "Approve Job {N}? (Y/N/revise)" 926 | 927 | If Y: Add to library 928 | If N: Don't add to library 929 | If revise: Collect feedback, make changes, re-ask 930 | 931 | After all reviewed: 932 | "Review complete! 933 | 934 | LIBRARY UPDATED: 935 | - Approved resumes: {N} 936 | - Skipped resumes: {M} 937 | - Revised resumes: {K} 938 | 939 | Total resumes in library: {count}" 940 | ``` 941 | 942 | **4.5 Handle Review Option 3 (REVISE BATCH):** 943 | 944 | ``` 945 | User chooses: 3 946 | 947 | Prompt: 948 | "What would you like to change across the batch? 949 | 950 | COMMON BATCH REVISIONS: 951 | - 'Make all summaries shorter' 952 | - 'Emphasize leadership more in all resumes' 953 | - 'Remove mentions of X technology from all' 954 | - 'Use title \"Senior Technical Program Manager\" consistently' 955 | - 'Add bullets about Y experience to all resumes' 956 | 957 | Your revision request:" 958 | 959 | Process: 960 | 1. Collect revision request 961 | 2. Determine which jobs affected 962 | 3. Re-run matching/generation for affected jobs 963 | 4. Present revised resumes 964 | 5. Ask for approval again 965 | 966 | Loop until user approves or cancels. 967 | ``` 968 | 969 | **4.6 Handle Review Option 4 (SAVE BUT DON'T UPDATE LIBRARY):** 970 | 971 | ``` 972 | User chooses: 4 973 | 974 | Output: 975 | "✓ Files saved to: resumes/batches/batch-2025-11-04-job-search/ 976 | 977 | Not added to library. You can manually move them later if desired. 978 | 979 | Batch state preserved for future reference." 980 | ``` 981 | 982 | **4.7 Update Final Batch State:** 983 | 984 | ```json 985 | { 986 | "batch_id": "batch-2025-11-04-job-search", 987 | "current_phase": "completed", 988 | "completed_at": "2025-11-04T14:15:00Z", 989 | "jobs": [ 990 | { 991 | "job_id": "job-1", 992 | "status": "completed", 993 | "files_generated": true, 994 | "added_to_library": true 995 | } 996 | ], 997 | "statistics": { 998 | "total_jobs": 3, 999 | "completed_jobs": 3, 1000 | "new_experiences": 5, 1001 | "average_coverage": 84, 1002 | "total_time_minutes": 225 1003 | } 1004 | } 1005 | ``` 1006 | 1007 | ## Incremental Batch Support 1008 | 1009 | **Goal:** Add new jobs to existing batches without re-doing completed work 1010 | 1011 | **Scenario:** User processes 3 jobs today, finds 2 more jobs next week 1012 | 1013 | **8.1 Detect Add Request:** 1014 | 1015 | User says: 1016 | - "Add another job to my batch" 1017 | - "I found 2 more jobs" 1018 | - "Resume batch {batch_id} and add jobs" 1019 | 1020 | **8.2 Load Existing Batch:** 1021 | 1022 | ```python 1023 | # Pseudo-code 1024 | batch = load_batch_state(batch_id) 1025 | 1026 | if batch.current_phase == "completed": 1027 | print("Batch already completed. Creating extension...") 1028 | batch.current_phase = "intake" # Reopen for new jobs 1029 | ``` 1030 | 1031 | **8.3 Intake New Jobs:** 1032 | 1033 | Same process as Phase 0, but: 1034 | - Append to existing batch.jobs list 1035 | - Assign new job_ids (continue numbering: job-4, job-5, etc.) 1036 | 1037 | ``` 1038 | "Adding jobs to existing batch: {batch_id} 1039 | 1040 | CURRENT BATCH: 1041 | - Job 1: Microsoft - Principal PM (completed ✓) 1042 | - Job 2: Google - Senior TPM (completed ✓) 1043 | - Job 3: AWS - Senior PM (completed ✓) 1044 | 1045 | NEW JOBS TO ADD: 1046 | 1047 | Provide job description for Job 4: [user input] 1048 | [... collect JD, company, role, priority, notes ...] 1049 | 1050 | Add another job? (Y/N) 1051 | ``` 1052 | 1053 | **8.4 Incremental Gap Analysis:** 1054 | 1055 | ``` 1056 | "Running incremental gap analysis for new jobs... 1057 | 1058 | NEW JOBS: 1059 | - Job 4 (Stripe): Payment Systems Engineer 1060 | - Job 5 (Meta): Senior TPM 1061 | 1062 | COVERAGE WITH EXISTING LIBRARY: 1063 | (Library now includes 5 experiences discovered in previous session) 1064 | 1065 | - Job 4 (Stripe): 82% coverage 1066 | - Job 5 (Meta): 75% coverage 1067 | 1068 | NEW GAPS (not covered by previous discoveries): 1069 | - Payment systems experience (Job 4 only) 🔵 1070 | - Large-scale social networking (Job 5 only) 🔵 1071 | - React/frontend (Jobs 4, 5) 🟡 1072 | 1073 | ALREADY COVERED FROM PREVIOUS BATCH: 1074 | ✓ Kubernetes (from previous batch) 1075 | ✓ CI/CD (from previous batch) 1076 | ✓ Cross-functional leadership (from previous batch) 1077 | 1078 | NEW GAP COUNT: 3 (vs 14 in original batch) 1079 | Estimated discovery time: 5-10 minutes (vs 30-40 for original batch) 1080 | 1081 | Ready for incremental discovery? (Y/N)" 1082 | ``` 1083 | 1084 | **8.5 Incremental Discovery:** 1085 | 1086 | Only ask about NEW gaps: 1087 | 1088 | ```python 1089 | # Pseudo-code 1090 | previous_gaps = set(batch.aggregate_gaps.all_gap_names()) 1091 | new_gaps = [] 1092 | 1093 | for job in new_jobs: 1094 | for gap in job.gaps: 1095 | if gap.name not in previous_gaps: 1096 | new_gaps.append(gap) 1097 | 1098 | # Run discovery ONLY for new_gaps 1099 | conduct_discovery(new_gaps) 1100 | ``` 1101 | 1102 | **Important:** Don't re-ask questions already answered in previous session. 1103 | 1104 | **8.6 Process New Jobs:** 1105 | 1106 | Run Phase 3 (per-job processing) for new jobs only: 1107 | - Job 4: Research → Template → Matching → Generation 1108 | - Job 5: Research → Template → Matching → Generation 1109 | 1110 | **8.7 Update Batch Summary:** 1111 | 1112 | Add new jobs to `_batch_summary.md`: 1113 | 1114 | ```markdown 1115 | ## Incremental Addition (2025-11-11) 1116 | 1117 | Added 2 new jobs to batch after initial completion. 1118 | 1119 | ### Job 4: Payment Systems Engineer - Stripe 1120 | ... [same format as original jobs] 1121 | 1122 | ### Job 5: Senior TPM - Meta 1123 | ... [same format as original jobs] 1124 | 1125 | ## Updated Statistics 1126 | - Total jobs: 5 (original 3 + added 2) 1127 | - New experiences discovered (incremental): 3 1128 | - Total experiences discovered: 8 1129 | ``` 1130 | 1131 | **8.8 Final Output:** 1132 | 1133 | ``` 1134 | "Incremental batch processing complete! 1135 | 1136 | ORIGINAL BATCH (2025-11-04): 1137 | ✓ Job 1: Microsoft 1138 | ✓ Job 2: Google 1139 | ✓ Job 3: AWS 1140 | 1141 | NEW JOBS (2025-11-11): 1142 | ✓ Job 4: Stripe 1143 | ✓ Job 5: Meta 1144 | 1145 | NEW DISCOVERIES: 3 1146 | TIME SAVED: ~25 minutes (avoided re-asking 8 previous gaps) 1147 | 1148 | All 5 resumes available in: resumes/batches/{batch_id}/ 1149 | 1150 | Add to library? (Y/N)" 1151 | ``` 1152 | 1153 | ## Error Handling & Edge Cases 1154 | 1155 | ### Edge Case 1: Jobs Are More Diverse Than Expected 1156 | 1157 | **Detection:** During gap analysis, <40% gap overlap between jobs 1158 | 1159 | **Scenario:** User provides 5 jobs, but they're quite different (TPM, Data Scientist, Product Marketing Manager) 1160 | 1161 | **Handling:** 1162 | 1163 | ``` 1164 | "⚠️ I notice these jobs are quite diverse: 1165 | 1166 | JOB SIMILARITY ANALYSIS: 1167 | - Jobs 1, 2 (TPM roles): 85% requirement overlap ✓ 1168 | - Jobs 3, 4 (Data Science): 80% requirement overlap ✓ 1169 | - Job 5 (Marketing): Only 20% overlap with others ⚠️ 1170 | 1171 | RECOMMENDATION: 1172 | Split into batches for better efficiency: 1173 | - Batch A: Jobs 1, 2 (TPM-focused discovery) 1174 | - Batch B: Jobs 3, 4 (Data Science-focused discovery) 1175 | - Job 5: Process separately (single-job mode) 1176 | 1177 | OR proceed with unified discovery (will take longer, ~50 minutes) 1178 | 1179 | Your preference: 1180 | 1. Split into batches (recommended) 1181 | 2. Continue with unified discovery 1182 | 3. Remove dissimilar jobs" 1183 | ``` 1184 | 1185 | ### Edge Case 2: Discovery Reveals Experience Relevant to Only 1 Job 1186 | 1187 | **Scenario:** During discovery for "multi-job gap," user's answer only addresses one job 1188 | 1189 | **Example:** 1190 | 1191 | ``` 1192 | SKILL: "Kubernetes appears in all 3 jobs. Have you worked with it?" 1193 | USER: "Only in Azure (AKS), not GCP or AWS" 1194 | 1195 | HANDLING: 1196 | "Got it - this addresses the Microsoft job (Azure AKS) but not Google (GKE) 1197 | or AWS (EKS). 1198 | 1199 | I'll tag this as Microsoft-specific. 1200 | 1201 | Should I still explore Kubernetes more broadly? You might have experience 1202 | with container orchestration concepts that transfer across cloud providers. 1203 | 1204 | Options: 1205 | 1. YES - Explore general container orchestration 1206 | 2. NO - Move to next gap 1207 | 1208 | Your choice? (1/2)" 1209 | 1210 | [If 1, branch to adjacent probe for container orchestration concepts] 1211 | ``` 1212 | 1213 | ### Edge Case 3: One Job's Research Fails 1214 | 1215 | **Scenario:** Company is obscure startup, minimal online presence 1216 | 1217 | **Handling:** 1218 | 1219 | ``` 1220 | "⚠️ Limited research data for Job 3 (StartupXYZ): 1221 | - No company website or information found 1222 | - No LinkedIn profiles for similar roles 1223 | - No news or press coverage 1224 | 1225 | FALLBACK: JD-only analysis for this job 1226 | 1227 | OPTIONS: 1228 | 1. CONTINUE - Proceed with JD-only (recommended) 1229 | 2. SKIP JOB 3 - Process others, come back later 1230 | 3. PROVIDE CONTEXT - You share company info manually 1231 | 4. REMOVE JOB 3 - Remove from batch entirely 1232 | 1233 | Other jobs (1, 2) have sufficient research data. 1234 | 1235 | Your preference? (1/2/3/4)" 1236 | 1237 | [Don't let one failure block the entire batch] 1238 | ``` 1239 | 1240 | ### Edge Case 4: User Wants to Add/Remove Jobs Mid-Process 1241 | 1242 | **Add Job Mid-Process:** 1243 | 1244 | ``` 1245 | USER: "I want to add another job to the batch" 1246 | 1247 | SKILL: "Adding Job {N+1} to batch. 1248 | 1249 | CURRENT PHASE: {current_phase} 1250 | 1251 | Since we've already completed discovery: 1252 | - If Job {N+1} has NEW gaps: We'll do quick incremental discovery 1253 | - If existing discoveries cover it: Proceed directly to processing 1254 | 1255 | Let me collect the job details..." 1256 | 1257 | [Run quick gap check, incremental discovery if needed, then process] 1258 | ``` 1259 | 1260 | **Remove Job Mid-Process:** 1261 | 1262 | ``` 1263 | USER: "Remove Job 2 from the batch" 1264 | 1265 | SKILL: "Removing Job 2 from batch. 1266 | 1267 | ALREADY-DISCOVERED EXPERIENCES: 1268 | - Will remain in library 1269 | - Still available for other jobs in batch 1270 | - Available for future batches 1271 | 1272 | BATCH UPDATED: 1273 | - Jobs remaining: {N-1} 1274 | - Job 2 files will be moved to archive (not deleted) 1275 | 1276 | Continue with remaining jobs? (Y/N)" 1277 | ``` 1278 | 1279 | ### Edge Case 5: Library Update Conflicts 1280 | 1281 | **Scenario:** User approves Job 1 resume, rejects Job 2, wants to revise Job 3 1282 | 1283 | **Handling:** 1284 | 1285 | ``` 1286 | "You've approved some jobs but not others. 1287 | 1288 | LIBRARY UPDATE OPTIONS: 1289 | 1290 | 1. INDIVIDUAL APPROVAL (recommended) 1291 | - Add Job 1 to library now ✓ 1292 | - Job 2 won't be added ✗ 1293 | - Job 3 pending revision (decide after changes) 1294 | 1295 | 2. BATCH APPROVAL (wait) 1296 | - Update library only when all jobs finalized 1297 | - Ensures consistency across batch 1298 | 1299 | 3. SELECTIVE APPROVAL 1300 | - Choose which jobs to add now 1301 | - Which experiences to integrate 1302 | 1303 | Recommendation: Option 1 (individual approval) 1304 | 1305 | Your preference? (1/2/3)" 1306 | ``` 1307 | 1308 | ### Edge Case 6: Batch Processing Interrupted 1309 | 1310 | **Scenario:** User stops mid-batch, connection drops, or session ends 1311 | 1312 | **Auto-Save Behavior:** 1313 | 1314 | After each major milestone, auto-save batch state: 1315 | - After each job completes 1316 | - After discovery phase 1317 | - After gap analysis 1318 | - After user checkpoints 1319 | 1320 | **Resume Instructions:** 1321 | 1322 | ``` 1323 | "Your batch processing was interrupted. 1324 | 1325 | SAVED STATE: 1326 | - Batch ID: {batch_id} 1327 | - Completed: Jobs 1, 2 1328 | - In Progress: Job 3 (template approved, matching not started) 1329 | - Pending: Jobs 4, 5 1330 | 1331 | To resume: 1332 | - Say 'resume batch {batch_id}' 1333 | - Or 'continue my batch' 1334 | - Or provide batch ID when asked 1335 | 1336 | I'll pick up exactly where we left off." 1337 | ``` 1338 | 1339 | ### Edge Case 7: No Gaps Found 1340 | 1341 | **Scenario:** All jobs are well-covered by existing library (rare but possible) 1342 | 1343 | **Handling:** 1344 | 1345 | ``` 1346 | "Gap analysis complete! 1347 | 1348 | COVERAGE SUMMARY: 1349 | - Job 1: 92% coverage 1350 | - Job 2: 89% coverage 1351 | - Job 3: 87% coverage 1352 | 1353 | ALL GAPS ADDRESSABLE WITH EXISTING LIBRARY ✓ 1354 | 1355 | No experience discovery needed - your library already covers these roles well. 1356 | 1357 | OPTIONS: 1358 | 1. SKIP DISCOVERY - Proceed directly to per-job processing (recommended) 1359 | 2. OPTIONAL DISCOVERY - Surface any additional experiences anyway 1360 | 3. REVIEW GAPS - See what small gaps exist 1361 | 1362 | Your preference? (1/2/3)" 1363 | ``` 1364 | 1365 | ### Error Recovery Principles 1366 | 1367 | 1. **Never lose progress:** Auto-save batch state frequently 1368 | 2. **Partial success is success:** Some jobs completing is better than none 1369 | 3. **Transparent failures:** Always explain what went wrong and options 1370 | 4. **Graceful degradation:** Fall back to JD-only, single-job mode, or skip if needed 1371 | 5. **User control:** Always provide options, never force a path 1372 | 1373 | ### Graceful Degradation Paths 1374 | 1375 | ``` 1376 | Research fails → Fall back to JD-only analysis 1377 | Library too small → Emphasize discovery phase 1378 | WebSearch unavailable → Use cached data or skip research 1379 | DOCX generation fails → Provide markdown only 1380 | One job fails → Continue with others, revisit failed job later 1381 | ``` 1382 | --------------------------------------------------------------------------------