@data-matters.io/agent-harness
Spec-Driven Development with Claude Code, installed into a product repository: the Definition of Done as executable gates, a task loop that implements an approved OpenSpec change one task per session, and the standards the agent follows.
Install
Pin the package exactly and let the project's install generate the harness.
pnpm refuses a version younger than its minimum release age: to adopt a
release on its first day, list it in pnpm-workspace.yaml first.
minimumReleaseAgeExclude:
- '@data-matters.io/agent-harness@<version>'
pnpm add -D -E @data-matters.io/agent-harness
pnpm exec harness init --new --stack nextjs # or nestjs, vite; --existing for a codebase without tests
{ "scripts": { "prepare": "harness install" } }
harness init also writes .github/dependabot.yml: weekly bumps of the
harness only, after a 2-day cooldown, so each bump is past pnpm's minimum
release age. harness install writes the generated files (.harness/*.sh,
.harness/standards/, .harness/CLAUDE.harness.md, the Claude Code Stop hook)
and they stay git-ignored, so they always match the pinned version.
Commands
| Command | What it does |
|---|---|
harness init | First adoption: the project-owned and seeded files, CLAUDE.md, the .gitignore entries |
harness install | (Re)generates the git-ignored files; idempotent |
harness check | Fails when the generated files are stale or edited, or a required file is missing |
harness update-files | Three-way merge of the seeded files (.claude/settings.json, openspec/config.yaml) after a bump |
harness pr-scope | Classifies a pull request for CI (spec-only or not) without installing the project |
Run harness --help for the options.