Skip to content
Back to skills

Compare Harnesses

ASecurity

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.

  • 675 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added August 31, 2026
ai-agentsgobashgit

Works with

  • cli

Security analysis

A100/100

Scanned August 31, 2026

npx -y skills add ruvnet/metaharness --skill compare-harnesses --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Compare Harnesses?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Compare Harnesses
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ruvnet-compare-harnesses/badge)](https://www.skillsdirectory.com/skills/ruvnet-compare-harnesses)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.