Skip to content
Productivity
Command

/apply

Produce a tailored, compiled, verified CV + cover letter for a job posting (URL or pasted text).

From plugin
suraj-davariya-ai-job-search
236 skills2 agents6 commands
Install
$ npx -y skills add suraj-davariya/ai-job-search --agent claude-code

How it fires

How this command gets triggered: by you, by Claude, or both.

  • Fires itselfClaude auto-loads it when your prompt matches the work.
  • You can call itInvoke it directly when you want it.
  • Slash command/apply

Context 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).

Command definition

apply.md
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

/apply — Job Application Pipeline

> **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`.

---

Hard Invariants (apply at every step)

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) |

---

Step 0 — Input Parsing (REQ-2001, REQ-2002)

Accept the posting as **either** a URL **or** pasted text — these are equal-priority inputs; paste is a first-class choice, never a fallback.

  • **URL:** fetch with WebFetch and parse the content.
  • **Text:** use directly.

**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.

---

Step 1 — Fit Evaluation (REQ-2010–2013)

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

Read more
Ships withsuraj-davariya-ai-job-search

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.

Get the whole plugin

Other commands on suraj-davariya-ai-job-search.