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.
./install.sh job-application-campaignname: "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."
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.
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.
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.
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.
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.
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.
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.
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.
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.
publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e
No ratings yet — be the first to rate it.