CV Customizer
Maintain one master profile per person, then generate job-specific CVs by
matching the master profile against a job description. Support multiple people
and multiple job directions from the same master profile.
File Locations
- Master profiles:
~/.workbuddy/cv-profiles/{person-name}.md— one file per person. - Preferences file:
~/.workbuddy/cv-profiles/_preferences.md— standing user preferences across all CV generation runs. - If
~/.workbuddy/cv-profiles/does not exist, create it on first use.
The leading underscore in _preferences.md prevents collision with real
person names.
Master Profile Structure
Each master profile is a comprehensive record — richer than a single CV,
because it feeds many different job directions. Use the template in
references/master-profile-template.md as the canonical structure. Key
sections:
- Basic info (name, contact, links)
- Education
- Work experience (each role: company, title, dates, responsibilities, projects, achievements, skill tags)
- Project experience (independent of work history)
- Skills (grouped by category)
- Certifications & awards
- Other (volunteer, publications, interests)
- Glossary / 术语表 — bilingual proper-noun mappings, so any output language can reference consistent terminology
The master profile is the single source of truth. Never delete information
from it during customization — instead, select and reorganize relevant parts
for each generated CV.
Workflow
Execute these steps in order. Use the AskUserQuestion tool for choices that
have a small fixed set of options (it renders buttons the user can click).
For open-ended input, ask in plain text.
Step 1 — Determine the Person
Ask the user which mode applies, offering these three options:
- Create new profile — go to Step 1A.
- Use existing profile, no updates — go to Step 1B.
- Use existing profile, needs update — go to Step 1C.
Step 1A — Create New Profile
- Ask whether the user has an existing CV file.
- If yes: ask for the file path (or an uploaded file). Read the file.
Then ask the user to choose one primary language for the master
profile, and explain that the uploaded CV's primary-language content
becomes the baseline. Build the Glossary section as follows:- If the user uploaded a bilingual CV, extract proper nouns from
both languages and build bilingual glossary entries directly. - If the user uploaded a single-language CV, use that language as
the primary language and populate the glossary entries' other
language field by translating the proper nouns (mark uncertain
translations and ask the user to confirm).
Convert the CV content into the master profile structure from
references/master-profile-template.md. - If no CV: guide the user through a structured Q&A to collect all
sections (basic info, education, work experience, projects, skills,
certifications, etc.). For each proper noun the user mentions, ask for
the bilingual form to populate the glossary.
- If the user uploaded a bilingual CV, extract proper nouns from
- Save the master profile to
~/.workbuddy/cv-profiles/{person-name}.md.
Use the person's name (in their primary language) as the filename. If a
file with that name already exists, ask the user how to disambiguate
(e.g., append a suffix). - Proceed to Step 2.
Step 1B — Existing Profile, No Updates
- List all
.mdfiles in~/.workbuddy/cv-profiles/(excluding
_preferences.md), presenting the person names as selectable options. - After the user selects a person, read that master profile into context.
- Proceed to Step 2.
Step 1C — Existing Profile, Needs Update
- List existing profiles (same as Step 1B) and let the user select one.
- Read the current master profile into context.
- Ask the user what new information or experiences to add (new job, new
project, updated skills, contact changes, etc.). - Update the master profile file in place, preserving all existing content
and appending/merging the new information under the correct sections.
Update the glossary if new proper nouns appear. - Proceed to Step 2.
Step 2 — Collect the Job Description
- Prompt the user to provide the job ad. Recommend pasting the JD text
directly as the preferred method. - If the user provides a link:
- Fetch the page content using the WebFetch tool.
- If the JD is in English (or any language different from the user's
primary language), always display the original text first, followed
by a Chinese translation below it. Do not return only the translation;
the user needs to see both the original and the translation to verify
accuracy and nuance.
- Return the extracted JD content (with translation if applicable) to the
user and ask them to confirm whether the content is correct and complete
before proceeding.
- If the fetch fails or returns garbage, ask the user to paste the JD
text instead. - If the user pastes JD text that is in a different language, follow
the same rule: display it back with both the original and a translation
side by side before proceeding. - Once valid JD text is confirmed, proceed to Step 3.
Step 3 — Style, Language, and Special Requirements
- Read the preferences file (
~/.workbuddy/cv-profiles/_preferences.md)
first. If it exists, briefly mention any previously used styles or
preferences as informational context (e.g., "Last time you used: concise,
achievement-focused"), but do NOT auto-apply them. Always proceed to step 2. - Always ask the user to choose the CV style. This step is mandatory
and must never be skipped, regardless of what is in the preferences file.
UseAskUserQuestionwithmultiSelect: trueso the user can combine
multiple styles. Offer these options:
| Style | Description |
|---|---|
| Concise / 精简 | One page, tight bullet points, minimal prose |
| Detailed / 详细 | Two or more pages, rich descriptions and context |
| Achievement-focused / 成果导向 | Emphasize quantified results and metrics |
| STAR format / STAR格式 | Situation-Task-Action-Result for each bullet |
| Chronological / 时间线 | Strictly reverse-chronological work history |
| Functional / 职能型 | Group by skills/competencies rather than timeline |
| Hybrid / 混合型 | Combine chronological and functional elements |
The user may select multiple styles (e.g., "Concise + Achievement-focused").
3. Ask the user to choose the output language for this CV. Explain that
the CV will first be generated in this language; after the user confirms
the content, it can be translated into other languages.
4. Ask about special requirements, such as:
- Page limit (e.g., 1 page, 2 pages)
- Experiences or skills to emphasize
- Alternative export format if not Word (MD / PDF / HTML)
5. Record any new or changed preferences into the preferences file (see
references/preferences-template.md for structure).
Step 4 — Generate the Customized CV
- Ask whether the user has a specific template to fill in. Some
companies or job portals require a fixed CV template (e.g., a provided
DOCX with predefined sections, a specific field order, or mandatory
headings). If the user provides a template:
- Read the template and identify its structure (sections, field labels,
required fields, fixed headings, any instructions).
- Generate the CV by mapping the matched master-profile content into the
template's structure, filling every applicable field. Preserve the
template's section order and headings exactly.
- If the template has fields the master profile cannot fill, leave them
blank with a placeholder note (e.g.,[TODO: fill in]) and flag them
for the user rather than inventing content.
- The generated output should match the template's format (DOCX/Excel/etc.)
so the user gets a ready-to-submit file.
If the user has no template, proceed to free-form generation below. - Intelligently match the master profile against the JD:
- Identify the key requirements, skills, and responsibilities in the JD.
- Select the most relevant work experiences, projects, and skills from
the master profile.
- Work experience must be listed in reverse chronological order
(most recent role first, earliest last), regardless of how it is stored
in the master profile.
- Reorganize and rewrite the selected content to align with the JD,
using the glossary for consistent terminology in the chosen language.
- Do NOT invent experiences that are not in the master profile. - Default output: Word (DOCX) with blue color scheme.
When no template is provided, generate the CV as a well-formatted Word
document usingpython-docx. Apply a blue-based color palette:
- Name / top heading: dark blue (e.g.,#1A3C6Eor#1B4F8A), bold,
larger font size. Do NOT add any job title, role label, or tagline
directly under or beside the name (e.g., no "Events & Brand
Communications Professional" style subtitle). The name stands alone.
- Contact line: directly below the name, place email and phone on one
line (e.g., "Email: x@example.com | Mobile: +1234567890"), in a smaller
font and neutral color (black or dark gray).
- Section headings (all caps, medium blue, bold, with a thin blue
horizontal line beneath): use exactly this order and wording:- PROFESSIONAL SUMMARY
- CORE COMPETENCIES
- PROFESSIONAL EXPERIENCE
- EDUCATION
- CERTIFICATIONS
- LANGUAGES
- Body text: dark gray or black, clean sans-serif font (e.g., Calibri
or Arial).
- Accents / dividers: light blue (e.g.,#A3C4E8or#C5D9F0)
horizontal rules between major sections.
- Bullet points: small blue (e.g.,#2E6DB4) square or circle
bullets (not the default black dots).
- Keep the overall layout clean and professional — no background fill
colors on the full page, avoid excessive decoration.
Section content mapping:
- PROFESSIONAL SUMMARY: 2–4 sentences tailored to the JD, pulling from
the master profile's Summary and top relevant achievements.
- CORE COMPETENCIES: A concise bullet or comma-separated list of key
skills aligned with the JD (hard skills, tools, domains, soft skills).
- PROFESSIONAL EXPERIENCE: Reverse-chronological roles. For each role:
company, title, dates, location (if available), and 3–5 achievement
bullets tailored to the JD. Use the glossary for terminology.
- EDUCATION: Degree, major, school, graduation date. Keep it compact.
- CERTIFICATIONS: List relevant certifications with year/issuer.
Omit this section entirely if the master profile has none.
- LANGUAGES: Languages and proficiency levels (e.g., English — Fluent,
Chinese — Native). Omit if not applicable.
If a section has no content (e.g., no certifications), omit the heading
rather than leaving it empty, unless the user explicitly wants it kept.
Present the DOCX file for preview.
4. Offer the user additional export options: Word (DOCX) / MD / PDF /
HTML. If the user chooses a different format, generate accordingly after
the content is confirmed.
Step 5 — Preview, Refine, and Confirm
- Present the generated CV to the user for review.
- Allow the user to give refinement instructions, such as:
- "Keep this section / remove that section"
- "Rewrite this bullet to emphasize X"
- "Add more detail to the Y role"
- "Shorten the skills section" - Apply the refinements and re-present. Repeat until the user is satisfied.
- Once the content is confirmed:
- If the user wants another language version, translate the confirmed
CV using the glossary for terminology consistency.
- If the user chose a different export format, produce the final file. - Update the preferences file with any durable preferences observed
during this run (e.g., the user consistently asks for 1-page, English,
achievement-focused style).
Important Rules
- The master profile is a superset — never trim it to fit one job. Only
the generated CV is job-specific. - Always preserve existing master profile content when updating.
- Use the glossary for terminology consistency across all generated CVs and
languages. - When the user provides a bilingual CV, treat both languages as
authoritative and build the glossary directly from the bilingual content. - When the user provides a single-language CV, that language is the primary
language; translate proper nouns for the glossary and flag uncertain ones
for user confirmation. - Style selection is mandatory every run. Always ask the user to choose
CV style(s) via multi-select (Step 3.2), regardless of any saved
preferences. The preferences file provides informational context only and
must never skip or pre-select the style question. - English JD always shows original + translation. When the JD is in a
language different from the user's primary language, display both the
original text and the translation. Never return only the translation. - Work experience in reverse chronological order. Always list work
experience from most recent to earliest in every generated CV. - Default output is Word (DOCX) with blue color scheme. When no template
is provided, generate a polished Word document usingpython-docxwith
blue-toned headings, accents, dividers, and bullets. The exact color values
are specified in Step 4.3. Installpython-docxif not already available
in the environment. - Do not fabricate experiences, metrics, or skills that are not present in
the master profile.
Reference Files
references/master-profile-template.md— canonical structure for each
person's master profile.references/preferences-template.md— structure for the standing
preferences file.