ReadonlycapabilitiesWhat this harness can drive — gates which ports below are required.
ReadonlydialectFormat axis: tool catalog, hook events, instruction targets, plugin-root token.
Optional ReadonlyharnessPillar-2 deterministic-runner driver: how runHarnessTest builds this
harness's argv, starts its scripted mock, and parses its stdout. Present iff
capabilities.harnessTesting (it composes the runtime + modelMock into the
one seam the runner dispatches through). Carried on the bundle so the runner
never imports a sibling adapter to find it.
Optional ReadonlyhookTransport axis: how a hook signals a block/deny. Present iff
capabilities.shellHooks.
ReadonlylayoutLayout axis: where the instruction file / skills / agents / hooks live on disk.
Optional ReadonlymodelTransport axis: the mock model's wire format + endpoints. Present iff
capabilities.harnessTesting.
ReadonlynameStable identifier, e.g. "claude-code". The CLI/registry key.
Optional ReadonlyruntimeTransport axis: the agent binary to spawn + the mock-model env. Present iff
capabilities.harnessTesting.
How strongly a repo at root looks like it targets this harness — the CLI
uses it to auto-detect which adapter to use (the library selects by import).
Returns a specificity score: 0 = not this harness; higher = a more
specific match. The registry picks the highest scorer, so a strong signal
(a .claude-plugin/ manifest) beats a weak one (a bare CLAUDE.md, or an
AGENTS.md that many harnesses share) regardless of registration order.
vigiles/adapter— the harness-adapter authoring kit.Everything you need to teach vigiles a new harness, in one import: the five port interfaces to implement, the
HarnessAdapterbundle that groups them, the conformance kit to validate yours, and the registry the CLI detects through. vigiles ships a Claude Code adapter; building your own is welcome and supported — seedocs/authoring-an-adapter.md.import { type HarnessAdapter, type HarnessDialect, type PluginLayout, type HarnessRuntime, type HookProtocol, type ModelMock, assertAdapterConformance, } from "vigiles/adapter";
export const myHarnessAdapter: HarnessAdapter = { name: "my-harness", … };