Resume Sensei
Context Efficiency Rule (Lazy Loading)
CRITICAL — Read this before loading reference files.
This skill contains specialized guides to avoid context window bloat. Do NOT pre-load all references. Use lazy loading — only read a reference file using view_file when performing its specific workflow:
| Load this file... |
When... |
references/ats_optimization.md |
Conducting ATS scoring, keyword matches, or auditing layout flags. |
references/bullet_writing.md |
Quantifying results, applying Google's X-Y-Z/STAR formulas, or drafting active verbs. |
references/formatting_and_sections.md |
Designing layout hierarchies, setting margins, or organizing page budgets. |
references/tailoring_and_versioning.md |
Customizing a resume to a target job description or setting up application trackers. |
Never load more than 1--2 reference files at a time.
Core Workflows
1. Workspace Setup & Initialization
When the user requests to start a new resume project or "initialize the resume workspace," perform the following steps:
- Copy the entire
assets/resume-hub/ directory into the root of the user's active project directory.
- Maintain the folder structure:
/Master/Master_Resume.md (The source of truth containing all experience history).
/Tailored/ (Folder where tailored versions for specific applications will reside).
/Applications/tracker.md (The markdown file tracking sent resumes and statuses).
/Templates/template.typ (Reusable Typst layout template defining styles and functions).
/Templates/resume.typ (Typst resume entry point with actual experience and skills data).
/Templates/fonts/ (Mulish font files required for local compilation).
- Instruct the user to paste their existing resume into
Master/Master_Resume.md, or assist them in compiling their information manually.
2. Ingestion & Reading Uploaded Resumes
If the user uploads an existing resume file:
- PDF files: Use the native
view_file tool to read the text. Note that standard text extraction can scramble multi-column resume layouts by merging columns horizontally. Verify the extracted content in Master_Resume.md matches the source structure. If it is garbled, prompt the user to copy-paste the text directly or provide a .docx or .md copy.
- DOCX files: Run the custom python script:
python3 scripts/parse_resume.py <path_to_docx>
to extract structured text without external dependencies.
- TXT/MD/TEX files: Read them directly using
view_file.
- Action: Convert the extracted data into clean markdown format and save it in
Master/Master_Resume.md to establish the source of truth.
3. ATS Screening & Optimization
When the user provides a job description (JD) and wants to check their resume's match:
- Read
references/ats_optimization.md.
- Extract required hard skills, soft skills, and domain terms from the JD.
- Cross-reference with the user's resume and calculate the keyword match score.
- Generate the ATS Compatibility & Keyword Report using the template defined in the reference.
4. Improving Bullets & Quantification
When the user wants to polish their bullets or add metrics:
- Read
references/bullet_writing.md.
- Identify weak bullet points (e.g., passive language, missing results).
- Prompt the user with targeted metric-discovery questions if metrics are missing.
- Rewrite the bullets using Google's X-Y-Z or STAR formulas.
- Output a structured comparison showing the "Original," "Improved," and "Key Changes" for each bullet.
5. Tailoring and Version Control
When the user is applying for a specific job:
- Read
references/tailoring_and_versioning.md.
- Analyze the target company's priorities and align the resume summary, skill ordering, and experience bullet hierarchy.
- Write the tailored resume source to
Tailored/[Role]/[LastName]_Resume_[Company]_[YYYY-MM].typ (or markdown).
- Update
Applications/tracker.md by appending a new row with the target details, matching file name, and setting status to Applied.
6. Typst Code Generation & Design Rules
When generating Typst resume source code:
- Layout Style Selection: Before exporting the
.typ file, check if the user has a preference, or offer these choices:
style: "classic" (Default): Solid colored header banner blocks with white text (vibrant, modern look).
style: "modern": Left-aligned minimalist headers with a thin colored bottom underline (clean, high-density traditional corporate/academic look).
- Theme Color Selection: Default to Slate Grey (
#4A5568) or Blue (#0F83C0). Offer these recommended color choices (or let the user provide a custom brand hex color):
- Slate Grey:
#4A5568
- Blue:
#0F83C0
- Green:
#2EA043
- Purple:
#8957e5
- Strict Typst Syntax Safety: Follow Typst markup rules:
- No LaTeX Escaping Needed: Do NOT escape special characters like
& or % or $ unless they are layout directives.
- Escape Underscores in Body Text: Underscores
_ signify italics in Typst markup. To output a literal underscore in text (like node_js or variable names), escape it as \_ (e.g., node\_js).
- Imports: Always use
#import "../Templates/template.typ": * (if generating in a subfolder like Tailored/SWE/) or #import "template.typ": * (if generating in the Templates directory).
- Section Formatting: Invoke
section(title: "Section Title", content: (...subSections...)) and subSection(...) as defined in template.typ.
- Trailing Commas on Arrays: In Typst, single-element tuples must end with a trailing comma to be parsed as arrays, e.g.
content: (subSection(...),). Ensure you preserve trailing commas on all single-element arrays to prevent compiler crashes.
- Lists: Bullet points in a subSection's
content block can use Typst bullet lists: #list([bullet 1], [bullet 2]) or standard markdown bullet lists * bullet within content bracket blocks [...].
- Ensure the generated Typst code contains no syntax errors, utilizes only standard functions defined in the template, and aligns exactly with margins and page constraints (maximum 2 pages).
- Local Verification & Compilation: Run
python3 scripts/compile_resume.py <path_to_typ> to verify that the generated Typst compiles cleanly to a PDF. If no local Typst compiler is detected, provide clear fallback instructions to the user to compile online via the Typst App (https://typst.app).
1---2name: resume-sensei3description: Comprehensive resume builder, ATS optimizer, and career version assistant. Use this skill whenever the user asks to: - Write, review, format, or optimize a resume, CV, or professional profile. - Tailor a resume to a specific job description or target role. - Check ATS compatibility, calculate keyword match scores, or find missing skills. - Quantify achievements, rewrite experience bullets, or apply Google's X-Y-Z formula. - Parse or extract text from an uploaded resume (e.g., PDF, DOCX, TXT formats). - Generate, edit, or output Typst markup code for a resume. - Initialize the resume hub workspace ("initialize resume workspace", "start resume setup"). - Track job applications and manage different tailored resume versions. Use this skill even if the user does not explicitly name 'resume-sensei', as long as they provide a resume file, job description, or request updates to their work history.4---56# Resume Sensei78## Context Efficiency Rule (Lazy Loading)910**CRITICAL — Read this before loading reference files.**11This skill contains specialized guides to avoid context window bloat. Do NOT pre-load all references. Use **lazy loading** — only read a reference file using `view_file` when performing its specific workflow:1213| Load this file... | When... |14| :--- | :--- |15| `references/ats_optimization.md` | Conducting ATS scoring, keyword matches, or auditing layout flags. |16| `references/bullet_writing.md` | Quantifying results, applying Google's X-Y-Z/STAR formulas, or drafting active verbs. |17| `references/formatting_and_sections.md` | Designing layout hierarchies, setting margins, or organizing page budgets. |18| `references/tailoring_and_versioning.md` | Customizing a resume to a target job description or setting up application trackers. |1920Never load more than 1--2 reference files at a time.2122---2324## Core Workflows2526### 1. Workspace Setup & Initialization27When the user requests to start a new resume project or "initialize the resume workspace," perform the following steps:281. Copy the entire `assets/resume-hub/` directory into the root of the user's active project directory.292. Maintain the folder structure:30 * `/Master/Master_Resume.md` (The source of truth containing all experience history).31 * `/Tailored/` (Folder where tailored versions for specific applications will reside).32 * `/Applications/tracker.md` (The markdown file tracking sent resumes and statuses).33 * `/Templates/template.typ` (Reusable Typst layout template defining styles and functions).34 * `/Templates/resume.typ` (Typst resume entry point with actual experience and skills data).35 * `/Templates/fonts/` (Mulish font files required for local compilation).363. Instruct the user to paste their existing resume into `Master/Master_Resume.md`, or assist them in compiling their information manually.3738### 2. Ingestion & Reading Uploaded Resumes39If the user uploads an existing resume file:40* **PDF files**: Use the native `view_file` tool to read the text. Note that standard text extraction can scramble multi-column resume layouts by merging columns horizontally. Verify the extracted content in `Master_Resume.md` matches the source structure. If it is garbled, prompt the user to copy-paste the text directly or provide a `.docx` or `.md` copy.41* **DOCX files**: Run the custom python script:42 `python3 scripts/parse_resume.py <path_to_docx>`43 to extract structured text without external dependencies.44* **TXT/MD/TEX files**: Read them directly using `view_file`.45* *Action*: Convert the extracted data into clean markdown format and save it in `Master/Master_Resume.md` to establish the source of truth.4647### 3. ATS Screening & Optimization48When the user provides a job description (JD) and wants to check their resume's match:491. Read `references/ats_optimization.md`.502. Extract required hard skills, soft skills, and domain terms from the JD.513. Cross-reference with the user's resume and calculate the keyword match score.524. Generate the **ATS Compatibility & Keyword Report** using the template defined in the reference.5354### 4. Improving Bullets & Quantification55When the user wants to polish their bullets or add metrics:561. Read `references/bullet_writing.md`.572. Identify weak bullet points (e.g., passive language, missing results).583. Prompt the user with targeted metric-discovery questions if metrics are missing.594. Rewrite the bullets using Google's X-Y-Z or STAR formulas.605. Output a structured comparison showing the "Original," "Improved," and "Key Changes" for each bullet.6162### 5. Tailoring and Version Control63When the user is applying for a specific job:641. Read `references/tailoring_and_versioning.md`.652. Analyze the target company's priorities and align the resume summary, skill ordering, and experience bullet hierarchy.663. Write the tailored resume source to `Tailored/[Role]/[LastName]_Resume_[Company]_[YYYY-MM].typ` (or markdown).674. Update `Applications/tracker.md` by appending a new row with the target details, matching file name, and setting status to `Applied`.6869### 6. Typst Code Generation & Design Rules70When generating Typst resume source code:711. **Layout Style Selection**: Before exporting the `.typ` file, check if the user has a preference, or offer these choices:72 * `style: "classic"` (Default): Solid colored header banner blocks with white text (vibrant, modern look).73 * `style: "modern"`: Left-aligned minimalist headers with a thin colored bottom underline (clean, high-density traditional corporate/academic look).742. **Theme Color Selection**: Default to **Slate Grey** (`#4A5568`) or **Blue** (`#0F83C0`). Offer these recommended color choices (or let the user provide a custom brand hex color):75 * Slate Grey: `#4A5568`76 * Blue: `#0F83C0`77 * Green: `#2EA043`78 * Purple: `#8957e5`793. **Strict Typst Syntax Safety**: Follow Typst markup rules:80 * **No LaTeX Escaping Needed**: Do NOT escape special characters like `&` or `%` or `$` unless they are layout directives.81 * **Escape Underscores in Body Text**: Underscores `_` signify italics in Typst markup. To output a literal underscore in text (like `node_js` or variable names), escape it as `\_` (e.g., `node\_js`).82 * **Imports**: Always use `#import "../Templates/template.typ": *` (if generating in a subfolder like `Tailored/SWE/`) or `#import "template.typ": *` (if generating in the Templates directory).83 * **Section Formatting**: Invoke `section(title: "Section Title", content: (...subSections...))` and `subSection(...)` as defined in `template.typ`.84 * **Trailing Commas on Arrays**: In Typst, single-element tuples must end with a trailing comma to be parsed as arrays, e.g. `content: (subSection(...),)`. Ensure you preserve trailing commas on all single-element arrays to prevent compiler crashes.85 * **Lists**: Bullet points in a subSection's `content` block can use Typst bullet lists: `#list([bullet 1], [bullet 2])` or standard markdown bullet lists `* bullet` within content bracket blocks `[...]`.864. Ensure the generated Typst code contains no syntax errors, utilizes only standard functions defined in the template, and aligns exactly with margins and page constraints (maximum 2 pages).875. **Local Verification & Compilation**: Run `python3 scripts/compile_resume.py <path_to_typ>` to verify that the generated Typst compiles cleanly to a PDF. If no local Typst compiler is detected, provide clear fallback instructions to the user to compile online via the Typst App (https://typst.app).