A Claude Code project that turns job searching into a structured workflow. Your career history, goals, target companies, and active applications all live in one place so Claude can reason across them. No more juggling scattered docs and a dozen open Job Descriptions.
New here? Run /onboard inside Claude Code to get started. It bootstraps your personal data directory, checks prerequisites, and walks you through the four core docs the rest of the tool reads from. Already set up? Run /help any time to see what each skill does or learn how to chain them.
Morning → /morning briefing on open items + suggested first move
↓
Daytime → paste a Job Description, build a per-role artifacts appear under
resume, run a mock interview, $PERSONAL/applications/<company>/<role>/
practice coding
↓
Evening → "wrap up the day" log written to $PERSONAL/career/daily-log/YYYY-MM-DD.md
This repo handles the deep work: Job Description analysis, tailored resumes, interview prep, per-role artifacts. Lightweight tracking fields (stage, outcome, date applied, referral, match level) are supported optionally on each role.md and only written when you mention them inline. The repo isn't an application tracker; manage your pipeline however you prefer.
| Skill | What it does | Trigger phrase |
|---|---|---|
onboard |
First-run setup. Bootstraps $PERSONAL, checks prereqs, and interviews you for the four core docs. |
"/onboard" / "I just cloned the repo" |
help |
Lists every skill, explains one on request, and walks through common workflows. | "/help" / "what can you do" |
job-analyzer |
Paste a Job Description, get a grounded fit analysis. Persists Job Description + analysis to $PERSONAL/applications/<company>/<role>/role.md. |
"Here's a Job Description: [paste]. Worth pursuing?" |
resume-builder |
Reshape your impact doc into a posting-specific resume in Markdown, .docx, and .pdf. |
"Build a resume for this Stripe staff role" |
cover-letter-builder |
Tailored cover letter grounded in your impact doc and the role's requirements. Outputs .md and .docx. |
"Write a cover letter for the Stripe staff role" |
coding-prep |
Coding interview practice in your preferred language. Shared problem bank, private attempt log, tutoring or evaluation mode, timed mocks. | "Let's practice two-sum" / "Mock me on a medium array problem" |
star-stories |
Convert your projects into STAR-format Markdown files (one per project, multiple angles per file). Raw material for behavioral interviews. | "STARify my resume" / "STARify [project name]" |
interview-prep |
Behavioral coverage audit, mock interviews, company briefs, and round-specific cheat-sheets. Pulls from your STAR files. | "Build a cheat-sheet for the Pinecone HM call" / "Mock me on a behavioral round" |
daily-summary |
EOD log of artifacts touched, open loops, patterns, and next steps. | "Wrap up the day" / "EOD summary" |
morning |
AM briefing: yesterday's open items + stale roles (>7 days untouched) + one suggested first move. | "/morning" / "What's on my plate today?" |
Every skill is grounded in your personal files under $PERSONAL/career/. Fill those in once and the advice stops being generic.
# 1. Clone and enter the repo
git clone <repo-url> career-agent && cd career-agent
# 2. Bootstrap your private data directory (sibling of the repo)
PERSONAL="$(dirname "$(pwd)")/career-agent-personal-docs"
mkdir -p "$PERSONAL/career" "$PERSONAL/applications"
cp career/impact-doc.template.md "$PERSONAL/career/impact-doc.md"
cp career/goals.template.md "$PERSONAL/career/goals.md"
cp career/brag-doc.template.md "$PERSONAL/career/brag-doc.md"
cp career/personal-info.template.md "$PERSONAL/career/personal-info.md"
# 3. Install the Python deps
pip install python-docx reportlab requests
# 4. Open in Claude Code
claudeThen run /onboard inside Claude Code. It bootstraps $PERSONAL for you, checks prerequisites, and walks you through filling in impact-doc.md (most important), goals.md, brag-doc.md, and personal-info.md. Steps 2 and 3 above can be skipped if you let /onboard do them, but they're listed in case you want to do it manually.
If you already know your way around, run /help any time to see the full toolbox or learn how a specific skill works.
You also need Claude Code installed and authenticated.
Your private career data is stored outside this repo in a sibling directory called career-agent-personal-docs/. The repo carries only code, templates, and instructions, never personal content.
Coding/
career-agent/ # this repo (committed to git)
career-agent-personal-docs/ # your private data (NOT in git, sibling of repo)
Throughout the skills and CLAUDE.md, $PERSONAL refers to the absolute path of that sibling directory. Skills resolve it dynamically from the git root, so it works from the main checkout and from any worktree without hard-coding.
Use this when you want a grounded read on whether a single posting is worth pursuing.
- Paste the Job Description text (or a URL, if it's a site Claude can fetch). One posting per request.
- Ask: "Worth pursuing?" or "How do I fit?"
- Claude returns: skills match, level alignment, gaps, comp signal, and a recommendation.
- The Job Description, analysis, and any free-form notes get persisted to
$PERSONAL/applications/<company>/<role-slug>/role.md.
Feeds directly into resume-builder and cover-letter-builder.
Coding interview practice in your preferred language. Shared problem bank in coding-bank/problems/; private attempts in $PERSONAL/career/coding-log/.
On first use, Claude asks which language you want to practice in (TypeScript, Python, Go, Java, C++, Rust, etc.) and stores it in $PERSONAL/career/coding-log/preferences.md. Change it any time with "switch my coding language to Python".
- Add a problem. Paste the problem details. Claude saves to
coding-bank/problems/<slug>.md. - Practice. "Let's practice two-sum" or "surprise me from weak spots". Choose tutoring (hint ladder) or evaluation only (you solve, Claude grades).
- Mock me. Timed 45 min, no hints, follow-up variant, hire/no-hire grade at the end.
- Query weak spots. "What should I redo today?" — Claude reads your attempt log and surfaces failed or stale problems.
Attempts append to $PERSONAL/career/coding-log/attempts.jsonl, with per-problem notes in by-problem/<slug>.md.
Behavioral interview workflow. Pairs with star-stories: STAR files in $PERSONAL/career/star/ are the source material, interview-prep is the consumer.
Prerequisite: at least a few STAR files in $PERSONAL/career/star/. Build them with "STARify my resume" (full portfolio) or "STARify [project name]" (single project).
Four modes, triggered by what you say:
- Coverage audit. "Where are my story gaps?" — Read-only. Reports which behavioral competencies (leadership, ambiguity, failure, conflict, etc.) have strong / thin / no coverage. Suggests which projects to STARify next.
- Mock interview. "Mock me on a Pinecone behavioral round" — Strict or coaching mode, one question at a time, evaluates structure/specificity/ownership/outcome, ends with a "stories to rehearse" list pointing at specific STAR files and angles. Transcript saved to
$PERSONAL/applications/<company>/<role>/interview-prep/. - Company brief. "Research Pinecone before tomorrow's call" — Synthesized one-page brief on the company plus recommended stories mapped to the round structure. Saved to
$PERSONAL/applications/<company>/<role>/brief.md. - Cheat-sheet. "Build a cheat-sheet for the Pinecone HM call" — Round-specific prep doc (opening pitch, lead stories with file links, predicted question table, gap framing, questions to ask, listen-fors). Templates differ for recruiter / HM / tech-screen / system-design / onsite-behavioral / cross-team-collab. Saved to
$PERSONAL/applications/<company>/<role>/<round>-cheat-sheet.md.
interview-prep does not create new STAR files. If it needs a story you don't have, it tells you to run /star-stories <project> and resume.
career-agent/ # this repo
career/ # personal-doc templates
coding-bank/problems/ # shared coding library
.claude/skills/ # skill definitions
CLAUDE.md # full project instructions
README.md
career-agent-personal-docs/ # sibling of repo, NOT in git
career/ # impact doc, goals, brag doc, STAR files, daily logs, coding log
applications/<company>/<role-slug>/ # per-role artifacts: role.md, resume, cover letter, cheat-sheets, briefs, interview notes
Full file layout, including which skill writes what, is in CLAUDE.md.
A few things I've picked up running this workflow myself. Your mileage may vary.
-
Open
career-agent-personal-docs/in VS Code with a markdown preview extension (e.g. Markdown Preview Enhanced). You don't want to be squinting at raw markdown that Claude generated. Cleanly rendered docs are easier to study and handy to keep open during interview calls for quick reference. -
Don't pre-create application folders for every posting you look at. I only ask Claude to create the
applications/<company>/<role>/folder once I have a recruiter call scheduled. Otherwise you end up with hundreds of stale folders and lose signal. -
Use LeetCode as your coding environment, not Claude. Solve the problem on LeetCode first, then paste both the problem and your solution into
coding-prep. Treat Claude as the analysis and review layer, not the IDE. -
Dump interview notes immediately after the call, while it's fresh. Take notes during the interview, then paste them into Claude for that role as soon as it ends. Claude updates the role's artifacts so your next round's prep automatically pulls in context from every previous round.
-
Update
impact-doc.mdas wins happen, not when you're job searching. Two-line entries when you ship something, get a comp adjustment, or run a project. By the time you actually need a tailored resume, the material is already there and quantified, instead of you trying to reconstruct numbers from six months ago. -
Run
/morningdaily even when you're not actively applying. It surfaces stale roles and open loops in under a minute. Cheap to run, and the alternative is rediscovering you ghosted a recruiter two weeks ago. -
Don't trust LinkedIn or Indeed URL fetches. They block behind login walls, and
job-analyzerwill fail or hallucinate. Paste the Job Description text directly. -
STARify projects right after they wrap, not the week before an onsite. Details, peer names, and metrics decay fast. A 15-minute
/star-storiessession at project close pays back the first time you need it. -
Keep one master resume per career level, then tailor. Build a single "staff-level engineer" resume once, then let
resume-buildercut and rewrite from it per posting. Starting from scratch every time is wasted reps. -
This is my workflow, not the workflow. If something here doesn't fit how you operate, fork the repo and refactor. The skills are deliberately small so they're easy to bend.
job-analyzerwill try to fetch a Job Description from a URL, but LinkedIn and Indeed block automated fetches behind login/JS walls. When that happens, paste the Job Description text and the workflow continues.role.mdfiles store the Job Description, fit analysis, and free-form notes. Tracking fields (stage, outcome, date_applied, referral, match_level) are optional: Claude mirrors them in the frontmatter if you mention them inline ("I applied today", "Alice referred me"), but won't prompt or invent.- All skill outputs are plain markdown files you can edit by hand at any time.
- Because personal data lives in a sibling directory, it stays accessible from the main checkout and from any worktree with no symlink setup.
If you found the tool (or our collaboration) helpful, I'd appreciate a quick LinkedIn recommendation on my profile: Link. No pressure at all, but it would be a huge help.