Contributing to Harmonist
June 9, 2026 · View on GitHub
Thanks for taking the time to contribute. Harmonist is a portable AI agent orchestration pack — changes here affect every project that integrates it, so the bar for merging is intentionally strict.
This file is the short contract. Technical depth (agent schema, style, protocol) lives in:
agents/SCHEMA.md— frontmatter contract every agent must satisfy.agents/STYLE.md— how the body of an agent should read (required sections, anti-patterns, retrofit checklist).README.md— architecture overview and scripts reference.
Before you start
- Read
CODE_OF_CONDUCT.md. By participating, you agree to it. - For non-trivial work (new agent, new script, behaviour change, hook change), open an issue first describing the plan. This saves everyone time — we can flag concerns before you write code.
- Drive-by cosmetic edits (emoji removal, rewording 179 personas at once) will be closed without review. Do content-driven edits only.
How to contribute
Add or update an agent
- Pick the right
agents/<category>/directory. Categories are fixed (seeagents/SCHEMA.md#category-enum); propose a new one only with a strong case. - Start from
agents/STYLE.md's lightweight template. Use plain ASCII headings, no personality-theatre sections. - Frontmatter must satisfy Schema v2. Run the linter:
python3 agents/scripts/lint_agents.py - Add a
## Deep Referencemarker if the body exceeds ~80 non-blank lines (the--thinconverter depends on it). Run:python3 agents/scripts/insert_deep_ref_marker.py agents/<cat>/<slug>.md - Regenerate the routing index and the manifest:
python3 agents/scripts/build_index.py python3 agents/scripts/build_manifest.py
Change scripts / hooks / enforcement
- Every script change must pass:
python3 agents/scripts/check_pack_health.py # 19 checks bash hooks/tests/run-hook-tests.sh # 30 scenarios bash memory/tests/run-memory-tests.sh # 29 scenarios - Any new behaviour needs a matching test case in the relevant
test_*.shunderagents/scripts/orhooks/tests/. - Python scripts include a 3.9+ version guard. Never add third-party dependencies — stdlib only.
Fix bugs
- Reproduce first. A bug report without reproduction steps will be closed asking for one.
- Add a failing test before the fix, so the regression stays closed.
- For security-relevant bugs, follow
SECURITY.mdand open a private security advisory instead of a public issue.
Pull request checklist
- Linter clean:
python3 agents/scripts/lint_agents.py— 0 errors. - Pack healthy:
python3 agents/scripts/check_pack_health.py— 19/19. - Relevant test suites pass (see the list under "Change scripts").
- Index and manifest regenerated and committed.
- If a user-facing behaviour changed:
CHANGELOG.mdupdated. - If schema changed: version bumped + migrator updated.
- PR description explains why, not just what.
What the maintainers will reject
- PRs that disable, bypass, or weaken the enforcement layer
(
qa-verifier, hooks, memory validator) without an explicit review discussion first. - Edits to shipped
agents/review/*.mdoragents/orchestration/*.mdthat change their strict behaviour, unless scoped to the exact issue being fixed. - Committed build output (converted agent files, generated docs) —
these are produced by
convert.shlocally and are gitignored. - Bulk reformatting of the persona catalogue in a single PR — each category gets its own PR with the before/after lint output.
- Adding third-party Python dependencies. The pack is stdlib-only by design.
Release process (maintainers only)
python3 agents/scripts/check_pack_health.py— must be 19/19.- Full regression:
basheveryagents/scripts/test_*.sh,hooks/tests/run-hook-tests.sh,memory/tests/run-memory-tests.sh. - Update
CHANGELOG.md: move[Unreleased]entries under a new version heading with today's date (ISO). - Bump
VERSION(SemVer). Breaking schema changes require a major bump and a migrator registered inmigrate_schema.pyormemory/migrations.py. - Regenerate
MANIFEST.sha256and commit. - Tag the release as
vX.Y.Zand push.
Questions
Open an issue on the repository. For private matters, use a security
advisory (see SECURITY.md).