Ai used resume
Generate a versioned, reviewer-scored résumé from the user's AI-coding and git history — extracts from Claude Code, Cursor, Copilot, Cline, Continue, Aider, Windsurf, Zed AI, Claude Desktop, ChatGPT/Claude.ai/Gemini/Grok/Perplexity/Mistral/Poe cloud exports, ComfyUI, Midjourney, Suno, ElevenLabs, and git commits. Renders to Markdown / DOCX / PDF across 10 locales (en_US, en_EU, en_GB, zh_TW, zh_HK, zh_CN, ja_JP, ko_KR, de_DE, fr_FR) with culture-specific layouts (JIS Z 8303 履歴書 grid, Europass, Lebenslauf, bilingual HK), optional JD-tailored bullet rewriting, and an 8-point reviewer audit with score trend. Use when the user asks to "generate my résumé", "render my résumé in Japanese", "tailor my CV for this job description", "score my résumé", or "show my résumé trend".From its SKILL.md
npx -y skills add easyvibecoding/vibe-resume --skill ai-used-resumeAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
18.5 KB, as published. Nobody here has run it
ai-used-resume
When to Use
Invoke this skill whenever the user wants to turn their AI-tool usage history into a résumé artefact. Common triggers:
- "Generate my résumé from my AI usage."
- "Render my CV in Japanese / German / Traditional Chinese / Europass."
- "Tailor my résumé for this JD."
- "Review / score my latest résumé."
- "Show my résumé score trend."
- "Which locales am I weakest in?"
Do NOT invoke when the user:
- Asks to write résumé content from scratch without AI-usage history (no signal source).
- Wants a generic CV template — this skill is opinionated about the AI-coding-era narrative.
- Asks for a profile on a platform that doesn't use Markdown/DOCX/PDF (e.g. LinkedIn scraping).
Quick Reference
| Intent | Command |
|---|---|
| Fresh pipeline | uv run vibe-resume extract && uv run vibe-resume aggregate && uv run vibe-resume enrich --locale en_US then process prompts in session, then enrich --ingest --locale en_US && render -f all --locale en_US |
| Render single locale | uv run vibe-resume render -f md --locale ja_JP |
| All 10 locales | uv run vibe-resume render --all-locales |
| JD-tailored run | uv run vibe-resume enrich --tailor data/imports/jd.txt --locale en_US -n 1 && uv run vibe-resume render -f md --locale en_US --tailor data/imports/jd.txt |
| Persona-biased enrich | uv run vibe-resume enrich --persona tech_lead --locale en_US (keys: tech_lead / hr / executive / startup_founder / academic) |
| Multi-persona enrich in one run | uv run vibe-resume enrich --persona tech_lead,hr,executive --locale en_US or --persona all — each persona writes its own _project_groups.<persona>.json |
| Level-tuned enrich | uv run vibe-resume enrich --level senior --locale en_US (keys: new_grad / junior / mid / senior / staff_plus / research_scientist) |
| Persona render | uv run vibe-resume render --persona tech_lead --locale en_US reads the persona-scoped cache and emits resume_v<NNN>_<locale>_<persona>.md |
| Compare persona output | uv run vibe-resume personas-compare --locale en_US -n 3 — side-by-side bullets per persona for the top-N groups (quality iteration loop). --locale required since 0.4.0. |
| Score latest | uv run vibe-resume review |
| Score with JD echo | uv run vibe-resume review --jd data/imports/jd.txt |
| Scores as JSON (for agents) | uv run vibe-resume review --json → structured scorecard + resolved target path on stdout; review --variants --json scores every rendered variant (ats/detailed/base) in one call (#91). Review always prints which file it scored (#86). |
| Score with persona lens | uv run vibe-resume review --persona hr — appends persona-specific review tips |
| Disclose real signals (self-mine) | uv run vibe-resume evidence --json — per group: candidate metrics, backed terms, human-gate evidence, provenance. --jd <file> adds present-but-omitted vs genuinely-absent keywords. Surface only what's disclosed — never invent. |
| Ground in the code | uv run vibe-resume scan → process each *.scan.prompt.md with a cheap-model subagent (one per project, parallel) → uv run vibe-resume scan --ingest. Grounds bullets in what the repo actually does. Opt-in; never uploads code, drops secrets. |
| Fit a page budget | uv run vibe-resume render --max-pages 2 --locale en_US — tighten bullet density, not just --top-n |
| Standard variant set | uv run vibe-resume render --variants --locale en_US — ATS (page-budgeted) + detailed, same cache |
| Truth-preserving auto-iterate | uv run vibe-resume iterate --locale en_US — lift the grade via truthful levers, stop honestly at the ceiling, print human-applied suggestions (dry-run; --write to snapshot) |
| Explore the layout surface | uv run vibe-resume explore --locale en_US --top-n 4,6,8 --page-budget 1.5,2.0,2.5 — sweep the grid, review each cell, surface the Pareto front (score↑ / pages↓). Pure layout/selection — never rewrites bullets. --write '6,2.0' snapshots a cell. |
| Per-gap JD grounding | uv run vibe-resume jd-check --tailor data/imports/jd.txt --explain — per missing keyword: groundable (with supporting activity snippets + refs) vs honestly absent. Advisory only; never auto-inserts. |
| Angle-biased candidate bullets | uv run vibe-resume enrich --candidates impact_first,breadth_first,depth_first --locale en_US emits N framings per group; uv run vibe-resume bullets-compare --locale en_US shows them side by side to pick per group. Angle is a prompt prefix — anti-fabrication rules unchanged. |
| Persona compare with scores | uv run vibe-resume personas-compare --locale en_US --with-scores --tailor data/imports/jd.txt — bullet diff plus a per-persona review-score table; highlights the best-JD-fit persona. |
| Branch a gate decision | uv run vibe-resume run --branch G2 --decision '{"choice":"top_n","top_n":8}' forks the ledger, recomputes that gate's suffix, auto review-diffs vs the original. run --branches lists forks; run --adopt <id> promotes one. |
| Curate groups (human-in-loop) | uv run vibe-resume curate then set actions without editing YAML: curate --drop <name> / --merge <src>:<dst> / --keep <name>, then curate --apply (executes the action field, independent of tier) (#87). emphasis 'foreground my security work' sets a free-text bias for the next enrich. |
| Drive the gate machine (agents) | uv run vibe-resume gates state --json — armed gates, fully-wired vs emit-only, pending gate, each recorded decision + recompute suffix (#90). |
| Cap bullets per group | uv run vibe-resume render --bullets-per-group N — hard cap; warns when bullets are dropped instead of silently truncating (#88). The detailed variant is no longer floored by the global page budget. |
| Compare two versions' scores | uv run vibe-resume review-diff v001 v002 --jd data/imports/jd.txt — per-check scorecard delta. |
| Per-locale trend | uv run vibe-resume trend --locale zh_TW |
| Locale quick map | |
|---|---|
en_US | default, XYZ verbs, ATS flat skills |
en_EU | Europass labelled personal-info, CEFR |
en_GB | UK spelling, Personal statement |
zh_TW | 繁中,中英技術混排 |
zh_HK | bilingual EN + 繁 headings |
zh_CN | 简体,大厂 ATS-friendly |
ja_JP | DOCX = JIS Z 8303 履歴書 grid; md = 職務経歴書 |
ko_KR | 이력서 + photo expected |
de_DE | Lebenslauf + Persönliche Daten, photo expected |
fr_FR | Profil / Compétences / Expérience |
Procedure
-
Locate the repo. The CLI binary is
vibe-resume; check withwhich vibe-resumeoruv run vibe-resume --help. If not installed, ask the user whether to clone https://github.com/easyvibecoding/vibe-resume and runuv venv && uv pip install -e ".[dev]". -
Verify
profile.yaml.- If still the example (
Your Nameplaceholder), ask forname,email,target_role,summary. Optional:experience,education,languages,custom_sections. - For locale-specific text, use
<field>_<locale>overrides (e.g.title_zh_TW,summary_ja_JP,bullets_de_DE). Seeprofile.example.yamlfor the full list including locale-conditional personal fields (dob,gender,nationality,mil_service,photo_path,marital_status) — only rendered when the active locale'spersonal_fieldsincludes them.
- If still the example (
-
Confirm
config.yamlknobs.scan.mode—fullfor all$HOME.gitrepos,whitelistto restrict toscan.roots(use if first run is slow).privacy.blocklist— project names to exclude from extractor output.privacy.abstract_tech—trueto hide concrete tech names.render.locale— team default.render.all_locales_formats— formats per locale for--all-locales(default["md"]).
-
Run extractors → aggregate.
uv run vibe-resume extract uv run vibe-resume status # sanity-check per-source counts uv run vibe-resume aggregate # → data/cache/_project_groups.json
4a. (Default, uses subscription quota) Emit + session-driven enrich.
uv run vibe-resume enrich --locale <L>
# → writes data/enrich_jobs/<persona-or-default>/<L>/manifest.json
# + one *.prompt.md per project group
In the current Claude Code session:
- Read
data/enrich_jobs/<persona>/<L>/manifest.json - For each
status: pendingentry, read its*.prompt.md - Produce strict YAML matching the schema the prompt requires
- Write to the entry's
output_path(NNN_<name>.yaml)
When all entries are done:
uv run vibe-resume enrich --ingest --locale <L>
# → merges *.yaml into _project_groups.<persona>.<L>.json
Add --level <key> to bias bullet ambition for the seniority bracket
(e.g. enrich --level senior --locale en_US).
Multi-locale runs are independent (per-locale subdir + per-locale cache):
uv run vibe-resume enrich --locale en_US
uv run vibe-resume enrich --locale zh_TW # does NOT overwrite en_US
# process both locales' yaml in session…
uv run vibe-resume enrich --ingest --locale en_US
uv run vibe-resume enrich --ingest --locale zh_TW
uv run vibe-resume render --locale en_US # reads _project_groups.default.en_US.json
uv run vibe-resume render --locale zh_TW # reads _project_groups.default.zh_TW.json
Pass --tailor <JD.txt> to bias bullets toward JD keywords (up to 12 extracted via
tech-priority dict + capitalised fallback — see
references/tailor-keyword-extraction.md
for the strategy and the 12-keyword cap rationale).
Stacks with --persona/--company per references/strategic-resume.md §Axis matrix.
See tests/fixtures/enrich_jobs_sample/ for a reference of what the
manifest + prompt + yaml triple looks like.
4b. (Fallback for CI / non-interactive) Spawn claude -p subprocess.
uv run vibe-resume enrich --mode subprocess --locale <L>
This bills against the Anthropic Agent SDK monthly quota pool (Pro $20 / Max 20x $200, separate from the Claude Code subscription quota — change effective 2026-06-15). The CLI prints a red warning at startup.
--mode rule-based skips LLM entirely and uses heuristic summaries
(works without any claude binary).
-
Render.
uv run vibe-resume render -f md --locale en_US uv run vibe-resume render -f all --locale ja_JP # DOCX = JIS 履歴書 grid uv run vibe-resume render --all-locales # fan out over 10 locales uv run vibe-resume render --all-locales --tailor data/imports/jd.txtLocale resolution chain (same chain applies to
enrich):- CLI
--locale profile.preferred_localeconfig.render.localeen_USfallback
- CLI
-
Review & trend.
uv run vibe-resume review --jd data/imports/jd.txt # 8-point scorecard, graded A–F uv run vibe-resume trend --locale ja_JP # ASCII sparkline across all prior runsBar is grade B / 80% before sending a draft to a real reviewer.
-
Self-mine the real signals, then iterate truthfully. Don't guess what to strengthen — disclose it:
uv run vibe-resume evidence --jd data/imports/jd.txt # what's REALLY there uv run vibe-resume iterate --locale en_US # truth-preserving lift, stops honestlyevidencediscloses, per group, the candidate metrics, backed terms, human-gate evidence, and provenance the tool can actually see — so you (the agent) surface only disclosed signals and never invent.iteratetightens the page budget to lift the grade and reports the honest ceiling + human-applied suggestions. The score is a proxy: never trade truthfulness or human-in-the-loop for points — see docs/PRINCIPLES.md.
Interactive Gate Mode (run --interactive / --preset)
For a traceable human-in-the-loop run, run can pause at named gates instead of
going end-to-end. Arm a gate set, decide each gate's emitted *.gate.json, then
resume with --continue:
uv run vibe-resume run --preset full_review --locales en_US --tailor data/imports/jd.txt
# ⏸ pauses at the first armed gate, writing data/gates/<Gn>.gate.json
# edit that file's `decision` (set "choice"; G5 also takes a per-metric `pick`)
uv run vibe-resume run --continue --preset full_review --locales en_US # advances to the next gate
- Presets:
autopilot(no gates — same as no flags) ·checkpoints(G1, G2, G8 — the default for a bare--interactive) ·full_review(all of G1–G8). - Gates: G1 freshness · G2 grouping/top_n · G3 overwrite mode · G4 bullets (the enrich emit) · G5 metrics · G6 redaction · G7 variants · G8 acceptance.
- Inspect/replan:
uv run vibe-resume gates show/gates planshow the armed set + each gate's recompute suffix.run --resume-from G5re-runs only that gate's suffix and prints a review-diff.run --branch <Gn>forks an alternative decision (see Quick Reference). - The run writes
data/run_ledger.jsonso it is replayable;--gates G1,G5,G8arms an explicit set overriding the preset.
Pitfalls
The full catalogue of failure modes and their fixes — mixed-script
locale leaks, --all-locales format quirk, first-run extraction
slowness, CJK contact-line wrapping, the claude -p optional fallback,
and the privacy rules around profile.yaml / data/imports/ — lives
in references/troubleshooting.md.
personas-comparerequires--locale(the enriched cache split per-locale in 0.4.0); see CHANGELOG.- Truthful-lever guarantees (don't misuse for points):
exploreanditerateonly change layout/selection — they NEVER rewrite a bullet or invent a metric.jd-check --explainis advisory: it shows where a keyword could be grounded but never inserts it. G5 metrics are opt-in per-metric (confirm+pick), and a pick is always intersected withsafe_to_surface, so a secret/UI/hash fragment can't be woven even if picked. See docs/PRINCIPLES.md.
Verification
After a full run, confirm:
# 1. Render produced the expected files
ls data/resume_history/ | tail -n 10
# 2. Last review was ≥ B grade
uv run vibe-resume review --locale <L> | tail -n 5
# 3. Trend trending up
uv run vibe-resume trend --locale <L>
For a JD-tailored run, spot-check that the output bullets surface the JD's key nouns:
grep -iE "$(awk '/[A-Z][A-Za-z]{3,}/{print $1}' data/imports/jd.txt | head -5 | paste -sd '|' -)" data/resume_history/resume_v*_<L>.md
For multi-locale batch runs, make sure there's no cross-script leak:
# ja_JP render must not contain Traditional-only Chinese (e.g. 設計, 處理, 實作)
grep -cE "設計|處理|實作|業務" data/resume_history/resume_v*_ja_JP.md # expect 0 or very low
# zh_CN must not contain Traditional-only characters (e.g. 設, 實, 業)
grep -cE "設|實|業" data/resume_history/resume_v*_zh_CN.md # expect 0
End-to-end example — "one JD, every market"
# LLM pass per locale
for loc in en_US ja_JP de_DE zh_TW; do
uv run vibe-resume enrich --tailor data/imports/jd.txt --locale "$loc" -n 3
done
# Batch render
for loc in en_US ja_JP de_DE zh_TW; do
uv run vibe-resume render -f all --locale "$loc" --tailor data/imports/jd.txt
done
# Review each and show the trend
for loc in en_US ja_JP de_DE zh_TW; do
uv run vibe-resume review --locale "$loc"
done
uv run vibe-resume trend
Strategic résumé: --company <key> --level <key>
enrich and review accept two extra axes — a named target employer
(70 bundled profiles in src/vibe_resume/core/profiles/*.yaml) and a seniority bracket
(6 career-level archetypes) — stacked on top of --locale /
--persona / --tailor. Block injection order is
tailor → persona → level → company. Every apply auto-checks
last_verified_at and warns loudly if older than 90 days.
See references/strategic-resume.md for
the full axis reference, company list/show/audit/verify/
mark-verified commands, and the drop-in recipe for adding a new
employer profile.
Extending the pipeline
When the user asks to add a new extractor, locale, or persona, consult
references/extending.md for the Activity
schema contract, registration steps, and the "never invent activities"
rule.
Useful sibling commands
uv run vibe-resume status— per-source activity countsuv run vibe-resume list-versions— résumé version history from internal gituv run vibe-resume diff v001 v002— diff two versionsuv run vibe-resume completion zsh --install— shell completion so--locale <tab>expandsuv run vibe-resume doctor— diagnose CLI/plugin version drift, profile/config presence, optional-dep availabilityscripts/backup_claude_projects.sh(macOS/Linux) /scripts/backup_claude_projects.ps1(Windows) — back up~/.claude/projectsbefore Claude Code's 30-day cleanup