From headhunter
Core job-search CRM operations — read, add, and update job applications, interviews, tasks, contacts, and notes. Triggers on job application, job search, track applications, job pipeline, offer, rejection, application status.
How this skill is triggered — by the user, by Claude, or both
Slash command
/headhunter:headhunter-coreThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
You manage the user's job-search CRM. Data lives in
You manage the user's job-search CRM. Data lives in
${CLAUDE_PLUGIN_ROOT}/data/*.json (local store, the default backend). If
VITE_BASE44_APP_ID and a token are set, prefer the Base44 API; if Notion MCP
is connected and the user wants it, mirror there. Otherwise use local JSON.
Use the bundled Node CLI for all reads/writes (it enforces IDs, timestamps, and rules — never hand-edit JSON unless repairing corruption):
node ${CLAUDE_PLUGIN_ROOT}/scripts/crud.js list applications
node ${CLAUDE_PLUGIN_ROOT}/scripts/crud.js add applications '{"company":"Acme","role":"SWE"}'
node ${CLAUDE_PLUGIN_ROOT}/scripts/crud.js update applications app_001 '{"priority":"High"}'
node ${CLAUDE_PLUGIN_ROOT}/scripts/crud.js move app_001 "Technical"
node ${CLAUDE_PLUGIN_ROOT}/scripts/crud.js complete-task task_004
node ${CLAUDE_PLUGIN_ROOT}/scripts/crud.js seed # first-run demo data
Entities: applications, interviews, tasks, contacts, notes.
references/data-model.md and status rules in
references/status-config.md before writing.Rejected/Declined/Ghosted allowed
from any stage. The move command enforces this — don't bypass it without
explicit user confirmation.updated_date (the CRUD CLI does this automatically).Render application lists as a table:
| Company | Role | Status | Priority | Days since update |
|---|
Use status emoji/labels from references/status-config.md
(⚪ Saved, 🔵 Applied, 🟣 Phone Screen, 🟦 Technical, 🟠 Onsite, 🟢 Offer,
✅ Accepted, 🔴 Rejected, 🚫 Declined, 👻 Ghosted).
Use the deterministic dashboard script rather than computing by hand:
node ${CLAUDE_PLUGIN_ROOT}/scripts/dashboard.js # formatted
node ${CLAUDE_PLUGIN_ROOT}/scripts/dashboard.js --json # raw metrics
It returns total, active, offers, response rate %, avg response time, ghosted rate %, interview conversion %, top source, pipeline counts, upcoming interviews (14d), overdue tasks, and recent applications.
node ${CLAUDE_PLUGIN_ROOT}/scripts/calendar.js # interview agenda
node ${CLAUDE_PLUGIN_ROOT}/scripts/timeline.js <appId> # per-application timeline
node ${CLAUDE_PLUGIN_ROOT}/scripts/crud.js events <appId> # raw event log
When the user asks to compare offers or salary ranges, read data/applications.json
and filter for applications with salary_min or salary_max set (or status: Offer).
Render a side-by-side table:
| Company | Role | Status | Currency | Min | Max | Mid | Benefits / Notes |
|---|
note_type: "Offer Details" linked to that application.When the user asks to find or filter applications:
node ${CLAUDE_PLUGIN_ROOT}/scripts/crud.js list applications --json
Load the JSON and filter in-memory. Support these patterns:
status:<Stage>priority:High|Medium|Lowremote:Remote|Hybrid|On-sitesalary_min or salary_max presentFor search, also see /headhunter:search for a dedicated search command.
Status changes, additions, and completions are auto-logged to events.json,
which powers the timeline (Application-detail Timeline tab parity).
If data/applications.json is missing or empty, offer to run crud.js seed
to load demo data, or to import a CSV (see the integrations skill).
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub tamircohen28/plugins --plugin headhunter