Complete AI-assisted resume/CV generation framework: - 6 Claude Code skills (setup-extract, setup-build-kb, make-resume, make-cl, edit-resume, critique) - LaTeX templates (resume, CV, cover letter) with .cls class files - 6 reference docs (shared_ops, resume_reference, cl_reference, critical_rules, session_file_template, critique_framework) - Fictional Dr. Jordan Chen examples (extraction, experience, bundle, config, session, JD) - Knowledge base scaffolding and config template - README with setup guide and workflow documentation
10 KiB
description, user-invocable
| description | user-invocable |
|---|---|
| Generate a tailored resume/CV from a JD | true |
/make-resume
User input: $ARGUMENTS
Parse $ARGUMENTS:
- File path (e.g.,
JDs/*.txt) → read that file for the JD - Text after the path starting with "Focus:"/"Emphasize:"/"Downplay:" → focus directive
- "Quick:" prefix → Quick Mode (see below)
- Empty → ask the user for the JD
- Inline JD text (no file path) → save to
JDs/temp_<company>.txt, proceed normally
Safety Rules (ALWAYS ENFORCED)
Accuracy > Relevance > Impact > ATS > Brevity
Read config.md Provenance Flags before generating any content. Verify every claim against that table.
- Use the email from
config.mdPersonal Info in all outputs - Resume bullets: ALL variable bullets are 2L (CV: 2L/3L mix OK, check
config.mdDocument Preferences) - Source ALL bullet content from
resume_builder/experience/files. Never fabricate. - Run
python3 resume_builder/helpers/char_count.pyafter each section — the tool is authoritative
User Input During Execution
If the user provides feedback, corrections, or suggestions at any point:
- Acknowledge the input immediately
- If it affects an already-written section: go back, fix it, re-run char count gate
- If it changes the bullet plan: update session file Bullet Plan
- If it's a question: answer it, then continue from current step
- Never restart a phase — resume from current position
Startup
Read resume_builder/reference/shared_ops.md for session startup, file derivation, and organization protocols.
Then:
- Read
CLAUDE.md— check Active Sessions and KB Corrections - Read
config.md— load Provenance Flags, email, document preferences, role types - If session file exists for this JD:
- Read session file, check Status
- Phase 0: DONE, Phase 1: PENDING → resume at Phase 1
- Phase 1: DONE → resume at Budget Gate
- Phase 2: IN_PROGRESS → read .tex, check what sections exist, resume from checkpoint
- Phase 2: DONE → "Resume already done. Run /make-cl next." Show next command. Stop.
- If no session file: proceed to Phase 0
Quick Mode
Trigger: $ARGUMENTS starts with "Quick:"
Defaults:
- Select all HIGH priority achievements from bundle's Priority Matrix as 2L
- Fill remaining budget with MEDIUM priority in Priority Matrix order
- Default format: 2-page resume (unless JD clearly requires CV)
- Skip Phase 0 STOP and Phase 1 STOP
- Keep Budget Gate (auto-pass if within target) and end-of-resume STOP
- Run all phases with progress commentary instead of interactive stops
Phase 0: Research & Session Setup
Read these files:
- The JD (from
$ARGUMENTS) resume_builder/reference/resume_reference.md— Budget Card, Section Specs, Char Limits, Page Budgetsconfig.md— Role-Type Decision Tree to identify the matching bundle
Web Search (MANDATORY — 2-3 searches). Load WebSearch via ToolSearch first.
[Company] research & development [key JD domain]— products, recent projects[Company] [specific technology from JD]— concrete hooks for cover letter[Company] careers [role type] cultureOR recent news — hiring context
If web search returns no results: use JD text + training knowledge. Flag: "Web search returned limited results — CL hooks may be generic."
Produce all of these (reference resume_builder/reference/session_file_template.md for format):
- JD Analysis — classify every requirement as Direct / Bridge (with confidence) / Gap. Extract ATS keywords by category.
- Company Context — mission, role purpose, culture signals, "why them" angle (from web research)
- Framing Strategy — lead narrative, reframing map, emphasize/downplay, CL hooks, user focus directives
- Critique Context — reviewer persona, competitive landscape, domain vocabulary
- Cover Letter Plan — institution type, paragraph structure, hooks, jargon level
Create output folder:
Derive folder name from JD filename: JDs/JD_Acme.txt → output/Acme/
mkdir -p output/<FolderName>/
Write session file to output/<FolderName>/session_<name>.md (NOT flat output/).
All subsequent output files go in this folder.
Verify completeness: Re-read the session file. Confirm these 8 sections are non-empty: JD Info, Requirements table, ATS Keywords, Gap Assessment, Company Context, Framing Strategy, Critique Context, Cover Letter Plan. Fill any missing section before presenting.
Write memory pointer to CLAUDE.md Active Sessions.
Update session file Status: Phase 0: DONE
Progress: "Searching for [company] + [domain]..." / "JD analysis: X/Y requirements direct match, Z bridges, W gaps"
>>>>>> MANDATORY STOP — DO NOT PROCEED <<<<<<
Present: research summary, role type + bundle, format, framing strategy. Ask user to confirm: (1) role type + bundle, (2) format, (3) framing strategy. You MUST wait for the user's explicit text response before continuing. Proceeding without confirmation misaligns the entire resume and requires full regeneration.
Phase 1: Plan Bullets
Re-read output/<FolderName>/session_<name>.md — specifically Framing Strategy and ATS Keywords.
Read:
- The matching bundle from
config.mdRole Types →resume_builder/bundles/bundle_[role_type].md— Section 1 (Priority Matrix)- For hybrid JDs: read both bundles. Use primary for Priority Matrix, secondary for Reframing Map on 1-2 bridging bullets.
- All experience files from
resume_builder/experience/ resume_builder/support/achievement_reframing_guide.mdresume_builder/support/skills_taxonomy.mdresume_builder/support/pub_metadata.md
Present one table per position:
[Position Name] (Budget: N-M bullets, ~X-Y rendered lines)
| ID | Achievement | Variant | Lines | JD Match | |
|---|---|---|---|---|---|
| * | P1-1 | [short description] | 2L | 2 | Direct |
| * | P1-5 | [short description] | 2L | 2 | Direct |
| o | P1-3 | [short description] | 2L | 2 | Bridge |
| x | P1-7 | [short description] | -- | -- | Weak |
Legend: * = recommended (HIGH on Priority Matrix + Direct JD match) | o = available (MEDIUM priority or Bridge match) | x = not recommended (LOW priority or Gap)
After all positions, show:
- Recommended set total vs budget (from Quick Budget Card in resume_reference.md)
- Remaining budget slots and what could fill them
- Forced exclusions per provenance flags
- Focus directive impact (what changed vs Priority Matrix defaults)
Update session file — write Bullet Plan tables. Status: Phase 1: DONE (N bullets confirmed)
Progress: "Reading experience files for bullet candidates..." / "Recommending N bullets per position"
>>>>>> MANDATORY STOP — DO NOT PROCEED <<<<<<
Present bullet plan. Wait for user to confirm/modify selections. You MUST wait for the user's explicit text response before continuing. If you proceed without confirmation, you will generate bullets the user didn't approve. Update session file with confirmed plan before continuing.
Budget Gate (AFTER user confirms bullet plan, BEFORE Phase 2)
Re-read session file Bullet Plan section to verify confirmed counts.
- Check budget targets from
resume_builder/reference/resume_reference.mdBudget Card. - Show:
Budget: [N] bullets vs target [T]. PASS/FAIL - FAIL = do not proceed. Reconcile with user first.
Phase 2: Generate
Re-read to restore context after compaction:
output/<FolderName>/session_<name>.md(framing + confirmed bullet plan)resume_builder/reference/critical_rules.md— Character Limits, Bold Width Penalty, Orphan rules
Read template: resume_builder/templates/resume_template.tex or cv_template.tex + .cls
FIXED sections (from config.md FIXED Sections) are template-locked — only generate VARIABLE sections (Summary, Skills, Experience bullets/headers).
Read section specs: resume_builder/reference/resume_reference.md — Section-by-Section Specs for your format
Generate section by section (follow Section-by-Section Specs):
- Summary → check against session framing strategy
- Update Status →
Phase 2: Summary DONE
- Update Status →
- Technical Skills
- Update Status →
Phase 2: Skills DONE
- Update Status →
- Each position's bullets → CHAR COUNT GATE after each position
- Position titles: bold theme + date must fit ONE line (see resume_reference.md). If wrapping, shorten title.
- After each position: Update Status →
Phase 2: [Position] DONE
- PAGE FILL GATE after all experience
Save .tex to output/<FolderName>/e2e_<name>_resume.tex or _cv.tex
Update session file — add Output Files.
Progress: "Writing Position 1 bullets (6 of 7)..." / "Bullet 4 is SHORT at 184 chars — padding" / "Compiling resume... 2 pages OK"
CHAR COUNT GATE (per position)
python3 resume_builder/helpers/char_count.py -f [resume|cv] output/<FolderName>/[file].tex
No OVER violations. Last line of 2L bullets >= 70% fill. Fix before next position.
PAGE FILL GATE
Resume: <= 3 lines white space on last page. CV: check rendered line target from resume_reference.md. If FAIL: add/trim variable bullets.
COMPILE GATE
pdflatex -interaction=nonstopmode -output-directory=output/<FolderName> output/<FolderName>/e2e_<name>_resume.tex
Verify page counts match config.md Document Preferences. Use the Read tool to view compiled PDF — check orphans, header wrapping, page fill. If FAIL: fix variable content, recompile.
Run the Post-Generation Verification checklist from resume_builder/reference/resume_reference.md before proceeding.
Update Status → Phase 2: Compile DONE
End of /make-resume
Update session file Status:
Resume: DONECover Letter: PENDINGCritique: PENDINGNext: /make-cl output/<FolderName>/session_<name>.mdNext Critique: /critique output/<FolderName>/session_<name>.md
>>>>>> MANDATORY STOP <<<<<<
Present: resume compilation summary (pages, char count results, any violations fixed). You MUST wait for the user's explicit text response before continuing.
"Resume compiled and verified. Next steps:
- /clear
- [exact /make-cl command with session file path]"