expand
Enrich your candidate profile with competencies discovered from your documents, GitHub, and the web — additive only, nothing is overwritten.
Produce a tailored, compiled, verified CV + cover letter for a job posting (URL or pasted text).
$ 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.
/applyContext preview
What this command does when you run it.
Produce a tailored, compiled, verified CV + cover letter for a job posting (URL or pasted text).
description: Produce a tailored, compiled, verified CV + cover letter for a job posting (URL or pasted text). argument-hint: "<url|pasted job text> [--review=full|quick|none]" allowed-tools: - Read - Edit - Write - Bash - Glob - Grep - WebFetch - WebSearch - Task
> **Spec:** `docs/requirements/functional-requirements-application.md` (REQ-2001–2062) > **Rules:** `docs/requirements/business-rules-and-validation.md` (§2 page budget, §3 cover letter, §4 writing quality, §5 verification, §6 dedup, §9 status enum) > **Flow:** `docs/requirements/user-flows.md` (§3)
You are running the CareerForge application pipeline: take a job posting and produce a tailored CV and cover letter, compiled to PDF and verified. This is a prompt-as-code command (ARCH-0001) operating on the file-as-DB profile (ARCH-0004).
**Pipeline:** Steps 0 → 1 → 2 → 3 → 4 → 5 → 6. The reviewer critique (Step 3) and revision (Step 4) run when `--review=full` (default) or `--review=quick`, and are skipped when `--review=none`.
---
1. **No fabrication (ARCH-0007).** Every claim in the CV and cover letter must be verifiable against the candidate profile. Never invent skills, experience, achievements, dates, or company facts. 2. **Read-before-write.** Read the profile and template files before drafting; read a `.tex` file before editing it. 3. **Writing style always applies (business-rules §4).** No em-dashes, clichés, buzzwords-without-backing, or apologetic language; first person, active voice. 4. **Human-in-the-loop (ARCH-0006).** Stop at the approval gate (Step 1) before drafting. Flag stretch claims for the user (REQ-2023). 5. **Token efficiency (REQ-2024).** Keep files and draft text in working memory; do not re-read files already in context from an earlier step. 6. **Provider resilience (NFR-0022, ARCH-0005).** If the AI provider rate-limits or fails, stop gracefully with a clear message; do not retry-spam or run high-volume headless batches that can trip provider abuse heuristics.
**Profile + template files this command consumes:**
| File | Used in | |------|---------| | `.claude/skills/job-application-assistant/01-candidate-profile.md` | Steps 1, 2 (source of all claims) | | `.claude/skills/job-application-assistant/02-behavioral-profile.md` | Step 1 (behavioral fit), Step 2 (cover-letter voice) | | `.claude/skills/job-application-assistant/03-writing-style.md` | Step 2 (always) | | `.claude/skills/job-application-assistant/04-job-evaluation.md` | Step 1 (scoring framework) | | `.claude/skills/job-application-assistant/05-cv-templates.md` | Step 2/5 (CV LaTeX guide + cutting) | | `.claude/skills/job-application-assistant/06-cover-letter-templates.md` | Step 2/5 (cover-letter LaTeX guide) | | `.claude/skills/job-application-assistant/08-legitimacy.md` | Step 1 (posting legitimacy gate) | | `locale-packs/<code>.json` | Steps 0–2 (target-market conventions; default `locale-packs/default.json`) | | `trust-safety/scam-patterns.json` | Step 1 (red-flag catalog) |
---
Accept the posting as **either** a URL **or** pasted text — these are equal-priority inputs; paste is a first-class choice, never a fallback.
**Liveness re-check (REQ-1015):** if the posting comes from an earlier search (a known URL stored in `seen_jobs.json` or the tracker), re-fetch/HEAD it to confirm it still appears **open** before investing in drafting. If it looks closed/expired, warn the user and ask whether to proceed — never auto-skip (ARCH-0006). If liveness can't be determined, proceed with a neutral note (ARCH-0005). This extends the search-time date filter (REQ-1011) from "posted recently" to "still open now."
Extract metadata: **company name, role title, department** (if mentioned), **location**, and **language of the posting**. Both input modes produce identical downstream behavior.
**Language rule (REQ-2002, REQ-7001):** the cover letter is written in the **posting's language** (e.g. a Danish posting → Danish cover letter). The **CV language follows the active locale pack / user preference** (default: the posting language, falling back to English) — it is no longer hardcoded to English.
**Resolve the locale pack (REQ-7009):** from the employer country / job location (or a user preference), load `locale-packs/<code>.json` for the target market; fall back to `locale-packs/default.json` if none matches (ARCH-0005). It drives CV page size, page count, photo norm, personal fields, date format, and legal clauses in Steps 1–2.
---
Read `01`, `02`, and `04` (and `03`, `05`, `06` now while you're here, to avoid re-reads later — REQ-2024). Score the role using the five-dimension framework in `04-job-evaluation.md`:
| Dimension | Weight | |-----------|--------| | Technical Skills Match | 30% | | Experience Match | 25% | | Behavioral/Culture Fit | 15% | | Career Alignment | 30% | | Location & Logistics | Pass/Fail (not weighted) |
Apply the **Location override**: if Location = FAIL, the verdict is **Poor Fit** regardless of the weighted score.
**Salary (REQ-2011, optional):** invoke `python3 salary_lookup.py "<company>" --city "<city>"` (omit `--city` if no city is known). If the tool or data is unavailable, note "Salary data not available" and proceed — never block on it.
**Posting legitimacy — separate gate (REQ-8001–8005, read `08-legitimacy.md`):** assess whether the posting is genuine and safe to engage with, **independently** of the fit score. Check it against `trust-safety/scam-patterns.json` (global signals + any `byRegion` entries for the active locale pack), corroborate the employer/domain via web search, and produce a standalone verdict — **Verified / Caution / Suspicious** — with cited evidence. This is **not** folded into the 0–100 fit
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
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.
Build or update your candidate profile via document scan, CV import, or interactive interview.
Analyze skill gaps across your tracked jobs (aggregate) or one posting (targeted), then build a prioritized, web-sourced learning plan and save a report.