{"_id":"@antubattle/harness","_rev":"3-a9a0243f03079aadf4d6c6709eb00d49","name":"@antubattle/harness","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@antubattle/harness","version":"0.1.0","keywords":["cli","agents","codex","scaffold","workflow"],"license":"MIT","_id":"@antubattle/harness@0.1.0","maintainers":[{"name":"antubattle","email":"antoniobattaglia01@gmail.com"}],"homepage":"https://antubattle.github.io/Harness/","bugs":{"url":"https://github.com/AntuBattle/Harness/issues"},"bin":{"harness":"bin/harness.js"},"dist":{"shasum":"7b9d002264ea2f851ba98c87fca3667a604276b0","tarball":"https://registry.npmjs.org/@antubattle/harness/-/harness-0.1.0.tgz","fileCount":14,"integrity":"sha512-RkNUpcxhrZMzpYFZmpjFEPl/XqcZe0V/I+ynCdO2FEANbgF3tnG8c8yxgT2XGRz4hM8cL+YlxcRtvERLKlWjsg==","signatures":[{"sig":"MEYCIQDlxczP2INxFRj6oBf2n2+8ppQpcMLbv1pNXUa3wZKwWQIhAJZK2/5PkayUeZH3eGwPU8lF5z1BoOnydzkbFzHaLp4O","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32997},"type":"module","engines":{"node":">=20"},"gitHead":"8cf7dab9238436819e48d07d6d9a8cc25b42e507","scripts":{"test":"node --test dist/tests/*.test.js","build":"tsc -p tsconfig.json","prepack":"npm run build","prepare":"npm run build","pretest":"npm run build","prebuild":"node --input-type=module -e \"import { rmSync } from 'node:fs'; rmSync('dist', { recursive: true, force: true });\"","typecheck":"tsc -p tsconfig.json --noEmit","smoke:pack":"node scripts/smoke-pack.mjs"},"_npmUser":{"name":"antubattle","email":"antoniobattaglia01@gmail.com"},"repository":{"url":"git+https://github.com/AntuBattle/Harness.git","type":"git"},"_npmVersion":"11.11.0","description":"Turn a blank repository into a self-reviewing workspace for coding agents.","directories":{},"_nodeVersion":"25.7.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3","@types/node":"^25.0.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.0_1775234462314_0.7610160182199368","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@antubattle/harness","version":"0.2.0","keywords":["cli","agents","codex","scaffold","workflow"],"license":"MIT","_id":"@antubattle/harness@0.2.0","maintainers":[{"name":"antubattle","email":"antoniobattaglia01@gmail.com"}],"homepage":"https://antubattle.github.io/Harness/","bugs":{"url":"https://github.com/AntuBattle/Harness/issues"},"bin":{"harness":"bin/harness.js"},"dist":{"shasum":"daaaf001833472abc7ccdf531c787ac4292dbf25","tarball":"https://registry.npmjs.org/@antubattle/harness/-/harness-0.2.0.tgz","fileCount":14,"integrity":"sha512-nG9yRwgvcJHedk9Zr7uSqGK/uffhES8J6GwHCf2kOpVYsIv3KTsyogtZ35jImw4B0PRy9VzBngu63v26XcjFPg==","signatures":[{"sig":"MEQCIEejSiDRVt/ZqZC/we3ErzT7hJUg4sdVqfGVqeth+dd6AiA7C7GvKoxbhRTP5XBVJTEiv5v+hslHIgPXm/5nBPaj6Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44678},"type":"module","engines":{"node":">=20"},"gitHead":"b6ba33ab0c6f18b56642fdcd00f09a5ff58fbfee","scripts":{"test":"node --test dist/tests/*.test.js","build":"tsc -p tsconfig.json","prepack":"npm run build","prepare":"npm run build","pretest":"npm run build","prebuild":"node --input-type=module -e \"import { rmSync } from 'node:fs'; rmSync('dist', { recursive: true, force: true });\"","typecheck":"tsc -p tsconfig.json --noEmit","smoke:pack":"node scripts/smoke-pack.mjs"},"_npmUser":{"name":"antubattle","email":"antoniobattaglia01@gmail.com"},"repository":{"url":"git+https://github.com/AntuBattle/Harness.git","type":"git"},"_npmVersion":"11.11.0","description":"Turn a blank repository into a self-reviewing workspace for coding agents.","directories":{},"_nodeVersion":"25.7.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3","@types/node":"^25.0.0"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.2.0_1775520142296_0.4224573730003147","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@antubattle/harness","version":"0.3.0","description":"Turn a blank repository into a self-reviewing workspace for coding agents.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/AntuBattle/Harness.git"},"homepage":"https://antubattle.github.io/Harness/","bugs":{"url":"https://github.com/AntuBattle/Harness/issues"},"publishConfig":{"access":"public"},"type":"module","bin":{"harness":"bin/harness.js"},"keywords":["cli","agents","ai","scaffold","workflow"],"scripts":{"prebuild":"node --input-type=module -e \"import { rmSync } from 'node:fs'; rmSync('dist', { recursive: true, force: true });\"","build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","pretest":"npm run build","test":"node --test dist/tests/*.test.js","prepack":"npm run build","smoke:pack":"node scripts/smoke-pack.mjs","prepare":"npm run build"},"engines":{"node":">=20"},"devDependencies":{"@types/node":"^25.0.0","typescript":"^5.8.3"},"gitHead":"789dc6609165c4826ceaab96cf3120ece2a90119","_id":"@antubattle/harness@0.3.0","_nodeVersion":"25.7.0","_npmVersion":"11.11.0","dist":{"integrity":"sha512-M7EY7ToQMe8GbeRhyqoIYHtoxDOxgCCTJ07W87lHbtYNvvRYEfw/jrHdt2zgxE0MvA3H5echqZjiDp1lWGAsmw==","shasum":"708abb6b81a01e80b852cc8ed9a6a54525008d2d","tarball":"https://registry.npmjs.org/@antubattle/harness/-/harness-0.3.0.tgz","fileCount":15,"unpackedSize":46742,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDd8xKS5nLAvDhCgsI19pDWXLtSd6qdjgyaQxPB4n6KfgIhALy082Wnh9XBfV6khReIQrLfyefW+GhEMuO5hBPPcfuj"}]},"_npmUser":{"name":"antubattle","email":"antoniobattaglia01@gmail.com"},"directories":{},"maintainers":[{"name":"antubattle","email":"antoniobattaglia01@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/harness_0.3.0_1775673101369_0.455724463051139"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-03T16:41:02.175Z","modified":"2026-04-08T18:31:41.628Z","0.1.0":"2026-04-03T16:41:02.464Z","0.2.0":"2026-04-07T00:02:22.470Z","0.3.0":"2026-04-08T18:31:41.506Z"},"bugs":{"url":"https://github.com/AntuBattle/Harness/issues"},"license":"MIT","homepage":"https://antubattle.github.io/Harness/","keywords":["cli","agents","ai","scaffold","workflow"],"repository":{"type":"git","url":"git+https://github.com/AntuBattle/Harness.git"},"description":"Turn a blank repository into a self-reviewing workspace for coding agents.","maintainers":[{"name":"antubattle","email":"antoniobattaglia01@gmail.com"}],"readme":"# Harness\n\n**Harness turns a blank repository into a self-reviewing workspace for coding agents.**\n\nHarness is a TypeScript CLI for teams that want agents to work in a closed loop instead of improvising against an empty repo. It bootstraps the planning structure, evidence flow, and review rules first, then uses a selected interactive provider to tailor the repository to the actual project.\n\nThe result is a repository where agents can plan, implement, validate, and review with much less hidden context.\n\n## Why Harness\n\n- Start from a documentation-first scaffold instead of ad hoc agent instructions.\n- Personalize the repository interactively through a supported provider instead of guessing every project choice up front.\n- Enforce a separate validation-subagent pass so implementation and review do not collapse into one step.\n- Preserve evidence, plans, and workflow rules inside the repository itself.\n\n## What You Get\n\nHarness sets up a repository to support this loop from day one:\n\n1. Define intent through `PRODUCT_SPECS.md` and repository product specs.\n2. Record architecture and tradeoffs in design docs.\n3. Execute non-trivial work through ExecPlans.\n4. Run validations and archive evidence.\n5. Run a separate validation subagent with an explicit review prompt that follows `REVIEW.md` before considering the task complete.\n6. Review changes against explicit expectations.\n\n## Commands\n\n- `harness init`: create the baseline scaffold in the current directory.\n- `harness configure`: launch an interactive provider session that personalizes the scaffold for the real project.\n\n## Quick Installation\n\nPrerequisites:\n\n- Node.js 20 or newer.\n- `harness init` works without any provider installed.\n- `harness configure` supports the local `codex` and `opencode` executables, and requires `--provider` to choose one explicitly.\n\nGlobal install:\n\n```bash\nnpm install -g @antubattle/harness\n```\n\nOne-off use with `npx`:\n\n```bash\nnpx @antubattle/harness init --project-name \"My Project\"\n```\n\n## Quick Usage\n\nCreate or enter a project directory:\n\n```bash\nmkdir my-project\ncd my-project\n```\n\nInitialize the baseline Harness scaffold:\n\n```bash\nharness init --project-name \"My Project\"\n```\n\nThis creates the generic repository structure for product-spec standards, review guidance, design docs, ExecPlans, generated evidence, and agent workflow guidance.\n\nPersonalize that scaffold for the actual project:\n\n```bash\nharness configure --provider codex\n# or\nharness configure --provider opencode\n```\n\n`--provider` is required for `harness configure`. The built-in supported values are `codex` and `opencode`.\n\nResult:\n\n- After `init`, you have a deterministic, language-agnostic baseline scaffold.\n- After `configure`, the selected provider interviews you about the project direction, language, architecture, validation setup, observability, and tooling, then personalizes the repository guidance into a more complete, self-sufficient workspace for future agent work.\n\nThe npm package name is `@antubattle/harness`, and the installed executable is `harness`.\n\n## What Makes It Different\n\n- The scaffold is intentionally generic first and project-specific second.\n- `configure` is interactive, so the repository setup can reflect real constraints instead of hard-coded presets.\n- The workflow explicitly separates implementation from validation by requiring a distinct validation subagent.\n- The repository keeps specs, plans, design rationale, and generated evidence close to the code.\n\n## Current State\n\n- Harness is implemented as a Node-based TypeScript CLI.\n- The command surface is intentionally small and validated through typed objects.\n- Generated repositories stay language agnostic until `configure` applies project-specific guidance.\n- Interactive configuration currently supports the local Codex and OpenCode CLIs through explicit `--provider` selection.\n\n## Documentation\n\n- [Hosted Docs](https://antubattle.github.io/Harness/)\n- [Docs Home](docs/index.md)\n- [Installation Guide](docs/installation.md)\n- [Quickstart](docs/quickstart.md)\n- [Closed-Loop Workflow](docs/closed-loop-workflow.md)\n- [Publishing Guide](docs/publishing.md)\n\n## Repository Map\n\n- `AGENTS.md`: agent workflow and execution policy for this repository.\n- `CHANGELOG.md`: root release history for notable changes.\n- `REVIEW.md`: validation and review standard for reviewer agents.\n- `ARCHITECTURE.md`: system boundaries and implementation direction for Harness.\n- `PLANS.md`: ExecPlan authoring standard.\n- `PRODUCT_SPECS.md`: product-spec authoring standard.\n- `features/`: versioned product specs, design docs, ExecPlans, generated artifacts, and tech debt tracking.\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n","readmeFilename":"README.md"}