In release — preview. This surface is fully built and in the release process; it is not yet generally available. Treat the commands and behavior here as preview until GA.
The Agent Harness is the local feedback loop for coding agents. It watches what your agent changes, runs shipmoor scan against those edits, and routes the findings back into the agent’s context — so the agent fixes its own mistakes during the session, not after a human finds them in review.
Where Agent Skills tell an agent how to behave, the harness is the runtime that enforces the loop mechanically: lifecycle hooks, wrappers, and watchers that fire on every edit whether or not the agent remembered its instructions.
The mental model
- CLI = source of truth.
shipmoor scan,shipmoor capabilities --json,shipmoor whoami --jsonown detection, auth, and entitlement state. - Harness = runtime. Hooks, wrappers, and watchers that invoke the CLI against agent edits and feed findings back. It contains no detection logic — it’s a client of the CLI’s JSON contracts.
- Skill = behavior. Static instructions the agent follows (Agent Skills).
- IDE = visualization. The same CLI-backed state, rendered in your editor (IDE Extension, preview).
The harness and skills can be installed side by side — each writes its own marker-wrapped managed block and never touches the other’s.
How it works
Two small pieces:
- The scanner is the only CLI-aware module. It locates the binary (
PATH, then~/.shipmoor/bin/shipmoor;SHIPMOOR_BINoverrides), checks the version, runsscan --changed|--staged|--diff|--patch --json, and parses the stable JSON contract. Human output is never scraped. - The orchestrator folds a scan result into a decision: a mode (
observe/feedback/block) plus deterministic, severity-ordered feedback text formatted from the parsed findings.
Per-agent adapters then deliver that decision the way each agent natively understands — a Claude Code hook response, an Aider lint failure, a Codex re-prompt, a watcher event for Cursor. See Agent support.
The harness reads the CLI’s exit codes the way you should: 1 means findings met the gate (a signal, parsed normally), and only 2/3 are treated as errors. A missing or failing CLI degrades to a no-op — your agent is never broken by tooling problems.
What it ships
The harness has its own console script, shipmoor-harness, separate from the shipmoor binary it shells to:
| Command | Purpose |
|---|---|
install <agent> / uninstall <agent> | Wire the loop into Claude Code, Aider, Codex, or Cursor |
mode observe|feedback|block | How intrusive the loop is |
status [--json] | CLI/capabilities/mode/adapters/watch state |
codex -- <args> | Run Codex wrapped in the feedback loop |
watch [--emit json|file] | Debounced scan-on-change with a privacy-safe event stream |
The harness is gated by the agent_harness entitlement (IC plan), enforced once at install — adapters never read account state.
Next
- Install & modes — wiring it in and choosing observe/feedback/block.
- The self-correction loop — a real block → fix → clear cycle.
- Watch mode — the agent-agnostic fallback.