HeadHunter supports four targets. Pick yours:
| Target | Guide | Validated against | Minimum supported |
|---|---|---|---|
| Claude Code | claude-code.md | 2.1.220 | 2.0.0 |
| Cursor | cursor.md | 3.14.7 | 3.14.7 |
| Codex | codex.md | 0.146.0 | 0.40.0 |
| OpenCode | opencode.md | 1.18.11 | 1.16.2 |
Machine-readable source of truth, including how each floor was derived:
docs/engineering/build-and-release/platform-targets.json.
| Component | Claude Code | Cursor | Codex | OpenCode |
|---|---|---|---|---|
| 16 skills | ✅ | ✅ | ✅ | ✅ |
| 14 subagents | ✅ | ✅ | ✅ | |
Slash commands (/headhunter:apply) |
✅ | ✅ | ✅ | ❌ model-invoked |
Hooks (hooks/hooks.json) |
✅ | ❌ | ✅ | ❌ none |
| Notion MCP server | ✅ | ✅ | ✅ | |
| Plugin manifest | ✅ | ✅ | ✅ | ❌ none needed |
| Marketplace install | ✅ | ✅ | ✅ | ❌ no marketplace |
| One-command update | ✅ | ✅ | ✅ | ❌ git pull |
The CRM itself is plain Node — scripts/*.js run identically on every target, and
data/ is shared. Only the agent surface differs.
.mcp.json, and Claude
agent frontmatter is incompatible with its schema (translated adapters are committed
under .opencode/agent/). See opencode.md.
| Target | Marketplace manifest | Plugin manifest |
|---|---|---|
| Claude Code | .claude-plugin/marketplace.json |
.claude-plugin/plugin.json |
| Cursor | the plugin manifest is imported directly | .cursor-plugin/plugin.json |
| Codex | .agents/plugins/marketplace.json |
.codex-plugin/plugin.json |
| OpenCode | none | opencode.json (skill paths only) |
All three plugin manifests carry the same version — CI enforces it.
This repo is its own marketplace on every target that has one, so it installs with no catalog dependency. It is also listed in the tamirs-plugins catalog, which is the more convenient path if you already use the other plugins in that family.
Whichever host you use, you need:
- Node.js ≥ 18 — check with
node --version. That is the only hard requirement. - No
npm install— the CRM runs on Node's standard library alone. - Optional integrations (Notion, Google, Todoist, Twilio, LinkedIn) read
credentials from a repo-root
.env. Copy.env.exampleand fill in only what you use — every integration is opt-in and HeadHunter works fully without them.
Data lives in local JSON under data/ (gitignored). Point HEADHUNTER_DATA_DIR at a
shared path to use the same pipeline from more than one host.