---
name: "job_application_campaign"
description: "Run a job hunt as a disciplined campaign instead of random applying: score job descriptions against real evidence, tailor an ATS-safe resume per role, track every application through a pipeline with weekly reviews, prep interviews from a STAR+R story bank, and negotiate offers with tested scripts. Triggers on job search help, resume tailoring, application tracking, interview prep, or salary negotiation."
---

# Job Application Campaign

## Purpose
Turn a job hunt into a campaign: a target profile, a scored pipeline of real opportunities, one tailored ATS-safe resume per serious application, a story bank for interviews, and a negotiation plan ready before any offer arrives. Five or ten well-aimed applications a week beats fifty generic ones.

## Workflow

### 1. Set the target
Capture the profile before touching any job board: target titles, core skills with actual evidence, location and remote rules, salary floor, and hard blockers (license, work authorization, travel). Unknown blockers stall the campaign until answered. Store it with `bin/campaign.py init`.

### 2. Score every JD before applying
Save each job description with `bin/campaign.py add`, then run `bin/campaign.py score`. The score reports which of your skills the JD actually demands, which JD keywords are gaps, and a triage suggestion: **Strong** (meets nearly all requirements, evidence in hand), **Stretch** (meets roughly half, gaps are learnable), **Skip** (hard blocker or the core work doesn't interest you). Apply to Strong and Stretch only. The score is a heuristic for where to spend effort, never a prediction of hiring odds. Say that out loud.

### 3. Tailor one ATS-safe resume per serious application
Rewrite bullets around the JD's own terms: exact keywords, in context, never a keyword dump. Mirror the posting's title when it honestly describes you. Run `bin/campaign.py ats-check` and walk the checklist in `references/ats-resume-checklist.md`: one column, standard section headers, real bullet characters, dates as Month YYYY, no tables, no graphics, no headers or footers, no hidden text.

### 4. Run the pipeline
Stages: `target` → `applied` → `screening` → `interviewing` → `offer`, with `rejected`, `withdrawn`, and `closed` as exits. Every active row carries exactly one next action with a date. `bin/campaign.py followup` lists what is due today. Run the weekly review every Friday: `bin/campaign.py weekly` shows counts by stage, stale rows, and your response rate. Two follow-ups with no reply, then close the row and move on. Record facts, not guesses.

### 5. Prep interviews from a story bank
Build eight stories using STAR+R: Situation, Task, Action, Result, Reflection. Action is the longest part and it must say what YOU did. Result is quantified. Reflection names what you learned or would change. Mock each story out loud once before the interview. Fill the bank in `assets/story-bank.md`; question prompts in `references/star-story-bank.md`.

### 6. Negotiate from a plan, not from anxiety
No money talk until a written offer exists. Earlier salary questions get deflected to total package and range. With the offer in hand: research the market, pick one specific number, counter with enthusiasm plus one brief reason, then stop talking. Full script, fallback levers, and handling for each response in `references/negotiation-playbook.md`.

## Tooling
`bin/campaign.py` keeps the campaign in a local `job_campaign.json` (one tracker, never two lists). Commands: `init`, `add`, `score`, `triage`, `stage`, `touch`, `list`, `followup`, `weekly`, `ats-check`, `export`. All subcommands print their usage with `--help`. No network access, no dependencies.

## Output Contract
When asked to help with the hunt, return what the phase calls for: (1) the triage table for current JDs, (2) the resume edits made for each serious application, (3) pipeline status or the weekly review numbers, (4) story-bank gaps before interviews, (5) a ready-to-send counter script before any negotiation. If a gap has no evidence, mark it and ask; never invent it.

## Operating Rules
- Every resume claim must trace to evidence the person gave you. No padded titles, no invented metrics, no claimed tools they cannot discuss in an interview.
- Tailor per application. A generic blast costs more time than it saves.
- Negotiation starts at the written offer. Earlier talk gets deflected.
- Keep one tracker. Two lists drift apart.
- Close cold rows on schedule. Hope is not a pipeline stage.
