Thanks for your interest in contributing. HeadHunter is a personal-use tool but welcomes improvements that benefit all job seekers using it.
- Check open issues to see if your idea or bug is already tracked.
- For non-trivial features, open an issue first to discuss the approach before writing code.
git clone https://github.com/TamirCohen28/headhunter.git
cd headhunter
node --version # must be >= 18
node scripts/crud.js seed # load demo data
bash scripts/test.sh # all 21 checks should passNo npm install needed. The core CRM runs with Node.js built-ins only.
- Bug fixes in
scripts/*.js - New or improved agent prompts in
agents/andskills/ - New slash commands in
commands/with matching skill inskills/ - Integration scripts in
scripts/sync-*.js - Documentation improvements in
docs/andreferences/
Out of scope: Replacing the local-JSON storage model, adding a UI server, or adding npm runtime dependencies to the core CRM scripts.
- Fork the repo and create a feature branch:
feat/my-improvement - Make your changes.
- Run the test suite:
bash scripts/test.sh— all 21 checks must pass. - Update
CHANGELOG.mdunder[Unreleased]with a brief entry. - Update
references/data-model.mdif you changed any entity schema. - Update
AGENTS.mdif you added or changed a CLI command or script. - Open a pull request against
main.
- Scripts: plain Node.js (no TypeScript, no bundler).
require()only — no ES module syntax in scripts. - No external dependencies in
scripts/— only Node.js built-ins (fs,path,readline,https,child_process). - Error handling: exit with code 1 and a clear message on failure; don't swallow errors silently.
- Dry-run support: any script that sends data to an external service must accept a
--dry-runflag. --confirmon destructive ops:deleteandrestoremust require--confirm.
<type>(<scope>): <short description>
Types: feat | fix | refactor | docs | test | chore
Examples:
feat(scanner): add tier-based success-score calibrationfix(crud): reject backward status moves via updatedocs(quick-start): add first-run GIF
-
bash scripts/test.shpasses (all 21 green) -
CHANGELOG.mdupdated under[Unreleased] - Schema docs updated if entity fields changed
-
--dry-runsupported if PR touches external sends