apply
Produce a tailored, compiled, verified CV + cover letter for a job posting (URL or pasted text).
Build or update your candidate profile via document scan, CV import, or interactive interview.
$ npx -y skills add suraj-davariya/ai-job-search --agent claude-codeHow it fires
How this command gets triggered: by you, by Claude, or both.
/setupContext preview
What this command does when you run it.
Build or update your candidate profile via document scan, CV import, or interactive interview.
description: Build or update your candidate profile via document scan, CV import, or interactive interview. argument-hint: "[--section <name>]" allowed-tools: - Read - Edit - Write - Glob - Grep - Bash
> **Spec:** `docs/requirements/functional-requirements-onboarding.md` (REQ-0001–0017) > **Data model:** `docs/requirements/data-requirements.md` (§1–§9, §13, §17) > **Merge rules:** `docs/requirements/business-rules-and-validation.md` (§7) > **Flow:** `docs/requirements/user-flows.md` (§1)
You are running the CareerForge onboarding workflow. Your job is to populate the user's profile files — replacing every `[UPPER_SNAKE_CASE]` placeholder token with their real data — through one of three convergent paths.
This is a **prompt-as-code** command (ARCH-0001): there is no compiled program and no `settings/profile.json`. The profile lives in Markdown files (file-as-DB, ARCH-0004). You read those files, gather the user's data, and write it back.
---
1. **Read-before-write (REQ-0002).** Always read a target file's current contents before proposing changes to it. Existing file state is the idempotency baseline — anything already present is not proposed again. 2. **Idempotency (business-rules §7.3).** Re-running `/setup` with the same inputs produces no new changes. Never re-propose content already present in a file in any form. 3. **No fabrication (ARCH-0007).** Never invent a token value. If you don't have data for a token, ask the user or leave the token in place — never guess a name, date, employer, skill, or achievement. 4. **No writes without confirmation (REQ-0009).** Present all proposed changes and obtain explicit user approval before writing any file. 5. **Human-in-the-loop (ARCH-0006).** The user reviews and approves; you draft and execute. When in doubt, ask.
**Target files** (the convergence set — REQ-0016):
| File | Tokens populated | |------|------------------| | `.claude/skills/job-application-assistant/01-candidate-profile.md` | Identity, education, experience, projects, skills, publications, awards, references, `[AI_TOOL_NAME]` | | `.claude/skills/job-application-assistant/02-behavioral-profile.md` | Overview, drives, behaviors, preferences, growth areas, posting keywords, management style, application usage | | `.claude/skills/job-application-assistant/04-job-evaluation.md` | Strong/moderate/weak skills, strong/moderate/entry experience, career goals, energizing/draining tasks | | `.claude/skills/job-application-assistant/05-cv-templates.md` | `[PROFILE_STATEMENT_*]` (one per applicable role type) | | `.claude/skills/job-application-assistant/07-interview-prep.md` | `[STAR_*]` examples and `[STUB_*]` Path-A stubs | | `CLAUDE.md` (user fork — from `CLAUDE.md.template`) | Union of the above + workflow sections | | `.claude/skills/job-scraper/search-queries.md` | Search query + location-tier tokens |
**Never touched by `/setup`:** `03-writing-style.md` and `06-cover-letter-templates.md` are static framework rules. (The `[AI_TOOL_NAME]` mention in `03` is prose describing the override — not a fill target. The actual override token lives in `01-candidate-profile.md`.)
---
If invoked with `--section <name>`, **skip path selection** and run an update-only flow for just that section.
Valid `--section` values (any other value → list these and stop):
identity education experience skills certifications publications awards behavioral search salary interview-prep writing-style
For section mode: 1. Read the file(s) that own that section (see the target-files table; e.g. `search` → `search-queries.md`; `behavioral` → `02-behavioral-profile.md`; `interview-prep` → `07-interview-prep.md`; `skills` → `01` + `04`). 2. Ask only the questions needed to (re)fill that section's tokens. 3. Merge per Step 5 rules (additive/conflicting) and write only those files. 4. Present a short summary (Step 6, scoped to the section).
`--section search` is the canonical way to regenerate search queries without redoing the whole profile (REQ-0015).
If no `--section` argument, inspect `documents/` subfolders (`cv/`, `linkedin/`, `diplomas/`, `references/`, `applications/`) with Glob.
recommended**.
"populate the `documents/` folder first, then re-run" option.
Always let the user pick **any** path regardless of folder state. Present:
> **Path A — Scan my documents** (recommended if you have CVs/LinkedIn exports in `documents/`) > **Path B — Import a single CV** (paste text or point me at one file) > **Path C — Interactive interview** (I ask, you answer — no documents needed)
Then branch to Step 1, 2, or 3. All paths reconverge at Step 4.
---
Read all target profile files (table above) before scanning. Their current content is the idempotency baseline — anything already present is not proposed again (REQ-0002).
Glob each subfolder and extract structured data. For PDFs, prefer local extraction (the `pdf-local-extractor` skill) or the `Read` tool; extraction is best-effort — **flag any file you cannot read** rather than guessing its content.
| Subfolder | Extract | Req | Formats | |-----------|---------|-----|---------| | `cv/` | Name, contact, education, experience, skills, publications, awards, profile/summary text. Handle multiple CVs (cross-reference for consistency). | REQ-0003 | PDF, `.tex` | | `linkedin/` | About/summary, experience, education, skills/endorsements, certifications, volu
An AI job-search assistant that finds postings, writes tailored CVs and cover letters, and compiles them to print-ready PDFs — all on your own machine.
Repo: suraj-davariya/ai-job-search
Produce a tailored, compiled, verified CV + cover letter for a job posting (URL or pasted text).
Enrich your candidate profile with competencies discovered from your documents, GitHub, and the web — additive only, nothing is overwritten.
Clear your candidate data — profile, documents, or both — while preserving the framework. Destructive; requires typing RESET to confirm.
Search configured job portals for new postings, deduplicate, quick-rank by fit, and hand off to /apply. Alias: /scrape.
Analyze skill gaps across your tracked jobs (aggregate) or one posting (targeted), then build a prioritized, web-sourced learning plan and save a report.