---
name: Diag Harness
slug: diag-harness
category: Quality
description: Diag Harness checks whether a scaffolded harness matches the installed `@metaharness/kernel` version and reports the skew verdict. Use it before other harness commands or when compatibility errors appear.
github: "https://github.com/ruvnet/metaharness/tree/main/.claude-plugin/skills/diag-harness"
language: TypeScript
stars: 609
forks: 72
install: "npx degit https://github.com/ruvnet/metaharness/tree/main/.claude-plugin/skills/diag-harness ~/.claude/skills/diag-harness"
installs_to: ~/.claude/skills/diag-harness
source_path: .claude-plugin/skills/diag-harness/SKILL.md
collection_size: 16
category_size: 1354
collection_url: "https://dirskills.com/collections/ruvnet/metaharness"
added: 2026-08-25T05:12:51.710Z
last_synced: 2026-08-25T05:12:51.710Z
canonical_url: "https://dirskills.com/skills/diag-harness"
---

# Diag Harness

Diag Harness checks whether a scaffolded harness matches the installed `@metaharness/kernel` version and reports the skew verdict. Use it before other harness commands or when compatibility errors appear.

**Install:**

```bash
npx degit https://github.com/ruvnet/metaharness/tree/main/.claude-plugin/skills/diag-harness ~/.claude/skills/diag-harness
```

## README

# diag-harness

> Codex skill: kernel-version skew check for a scaffolded harness — the ADR-027 diagnostic UX loop.

## What it does

Single-question check: **does my local `@metaharness/kernel` match what this harness was scaffolded against?** That's the cross-machine compatibility question almost every "this harness doesn't work" support ticket turns out to be.

Reads `.harness/manifest.json`:

| Field | Source | Meaning |
|---|---|---|
| `meta.surface` | iter 56 | Which surface produced the harness (`cli` or `web-ui`) |
| `meta.kernel_version` | iter 58 | The `@metaharness/kernel` version stamped at scaffold time |

Resolves the local `@metaharness/kernel` via `createRequire` rooted at the harness's own `package.json` (real Node resolution). Computes the skew verdict and prints a copy-pasteable next step.

| Verdict | Exit | Message |
|---|---|---|
| `match` | 0 | `PASS kernel versions match exactly` |
| `patch-diff` | 0 | `WARN patch-level skew (usually safe; may include bugfixes)` |
| `minor-diff` | 1 | `WARN minor-level skew (new kernel features may be missing)` + `Run: npm install @metaharness/kernel@X.Y.Z` |
| `major-diff` | 1 | `FAIL MAJOR skew — APIs may have changed; expect breakage` + `Run: npm install @metaharness/kernel@X.Y.Z` |
| no `.harness/manifest.json` at path | 2 | `FAIL no .harness/manifest.json found at this path` |

## Usage from Codex

```
/diag-harness                           # cwd
/diag-harness path=./my-harness
```

## Equivalent CLI

```bash
harness diag                            # cwd
harness diag ./my-harness               # explicit path
harness diag ./my-harness --json        # machine-readable for CI
harness diag ./my-harness --bundle      # support-ticket JSON (iter 90)
```

The `--bundle` form (iter 90) emits a single JSON snapshot of the diag report + sanitised manifest + `@metaharness/*` deps + Node/platform info — everything a maintainer needs to triage a bug report. Object keys matching `secret|token|key|password|api_key` are redacted so the bundle is safe to paste into a public GitHub issue.

## Sample output

```
harness diag — checking /tmp/my-harness

  surface:              cli
  manifest kernel:      0.1.0
  installed kernel:     0.1.0

  PASS kernel versions match exactly
```

## When to run

- After cloning someone else's harness — first thing
- After bumping `@metaharness/kernel` in a harness's `package.json`
- When `harness doctor` fails with cryptic shape errors (skew is the usual cause)
- In CI before any other harness subcommand — fail fast

## Lifecycle position

```
scaffold (create-agent-harness)
    ↓
 your code lives in the harness
    ↓
 diag (this skill)           <- before anything else, check compatibility
    ↓
 doctor / validate / sign / publish
```

## Related

- ADR-027 — CLI ↔ Web-UI integration (the parity contract diag enforces)
- iter 56 — `manifest.meta.surface` added
- iter 58 — `manifest.meta.kernel_version` stamped at scaffold time
- iter 66 — `harness diag` subcommand
