Diff two scaffolded harnesses (ADR-031). Reports manifest meta drift + host list + per-file fingerprint changes (added/removed/changed). Exits 0 IDENTICAL, 1 DRIFT, 2 missing manifest. Use --bundle for the ADR-031 schema-1 JSON envelope.
Scanned 8/31/2026
Install to Claude Code
npx -y skills add ruvnet/metaharness --skill compare-harnesses --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Compare Harnesses?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/ruvnet-compare-harnesses)More formats (shields.io, HTML) on the badges page.
---
name: compare-harnesses
description: Diff two scaffolded harnesses (ADR-031). Reports manifest meta drift + host list + per-file fingerprint changes (added/removed/changed). Exits 0 IDENTICAL, 1 DRIFT, 2 missing manifest. Use --bundle for the ADR-031 schema-1 JSON envelope.
---
# compare-harnesses
> Codex skill: diff two scaffolded harnesses — the ADR-031 Bundle JSON
> Pattern surfaced through Codex (iter 105 → iter 109).
## What it does
Two-harness diff. Useful when you've forked an upstream template, when a
support ticket says "mine and theirs scaffolded different things", or when a
CI script wants a byte-equality check between a candidate scaffold and a
known-good baseline.
Reports three sections:
1. **Manifest meta** — same name? same kernel? same surface?
2. **Hosts** — which host adapters each side ships (`claude-code` /
`codex` / `pi-dev` / `hermes` / `openclaw` / `rvm`)
3. **Files** — added / removed / changed (per-file SHA-256 fingerprints;
the cheapest possible byte-equality test)
| Verdict | Exit | Meaning |
|---|---|---|
| `IDENTICAL` | 0 | meta + hosts + every file fingerprint matches |
| `DRIFT` | 1 | at least one of meta / hosts / files differs |
| `no-manifest-in-a` | 2 | `a/.harness/manifest.json` missing |
| `no-manifest-in-b` | 2 | `b/.harness/manifest.json` missing |
| `no-manifest-in-either` | 2 | both sides missing manifest |
## Usage from Codex
```
/compare-harnesses a=./my-fork b=./upstream
/compare-harnesses a=./my-fork b=./upstream bundle=true
```
## Equivalent CLI
```bash
harness compare ./my-fork ./upstream # text output
harness compare ./my-fork ./upstream --bundle # ADR-031 schema-1 JSON
```
The `--bundle` form (ADR-031) emits a schema-1 JSON envelope so CI scripts
can json-parse the verdict without re-parsing human text. The envelope
shape is shared with `harness diag --bundle`, `harness export-config`, and
`harness audit --bundle`:
```json
{
"schema": 1,
"generatedAt": "2026-06-15T...",
"a": "/path/to/a",
"b": "/path/to/b",
"meta": { "sameKernel": true, "sameSurface": true, "sameName": false },
"hosts": { "a": ["claude-code"], "b": ["claude-code", "codex"], "verdict": "PASS" | "FAIL" },
"files": { "added": [...], "removed": [...], "changed": [...] },
"identical": false,
"exitCode": 1
}
```
Errors are bundle-formed too (`{ "schema": 1, "error": "no-manifest-in-a" }`),
so a CI script never has to dual-parse text + JSON. Object keys matching
`secret|token|key|password|passphrase` are redacted via the canonical
ADR-031 sanitisation regex before emission — safe to paste into a public
GitHub issue.
## Sample output (text mode)
```
harness compare — diffing /tmp/a /tmp/b
name: A=cmp-a B=cmp-b FAIL
kernel: A=0.1.0 B=0.1.0 PASS
surface: A=cli B=cli PASS
hosts: A=[claude-code] B=[claude-code,codex] FAIL
added: 3 files
+ src/agents/codex-tester.ts
+ src/agents/codex-reviewer.ts
+ .codex/config.toml
removed: 0 files
changed: 1 file
~ .harness/manifest.json
DRIFT (exit 1)
```
## When to use it
- You forked the project's upstream template, edited it, and want to know
exactly what diverged before sending a PR upstream.
- A user files a "this doesn't work" bug; you run `harness compare
their-zip yours-zip --bundle > diff.json` and attach the bundle to the
issue.
- CI is the canonical place: a nightly job runs `compare` between today's
scaffold output and a frozen baseline, fails the run on `DRIFT`.
## Related skills
- `diag-harness` — single-harness kernel-version skew check (iter 66)
- `validate-harness` — release-readiness umbrella (iter 20)
- `verify-witness` — Ed25519 witness signature verification (iter 8)
## See also
- [ADR-030 — Discovery Loop](../../../docs/adrs/ADR-030-discovery-loop.md) —
why new subcommands propagate to codex skills.
- [ADR-031 — Bundle JSON Pattern](../../../docs/adrs/ADR-031-bundle-json-pattern.md) —
the envelope shape this skill's `--bundle` mode conforms to.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!