Harnesses
A harness is a concrete agent runtime with its own on-disk configuration layout. Each harness gets one adapter that implements pack (layout → canonical bundle) and unpack (bundle → layout).
Capability levels
Adapters declare, per component type, exactly how faithfully they can represent it — and the conformance suite holds them to it:
- Native — the harness has a first-class home for the component and the adapter round-trips it losslessly (digest-verified).
- Emulated — no exact home; the adapter installs a faithful approximation and says so in the fidelity report.
- Planned — on the adapter roadmap; today the component is reported as skipped, never silently dropped.
Support matrix
| Component | Claude Code | Codex | OpenCode | Cursor | Factory | Devin CLI |
|---|---|---|---|---|---|---|
| Instructions | ||||||
| Commands | ||||||
| Subagents | ||||||
| Skills | ||||||
| MCP servers | ||||||
| Hooks | ||||||
| Permissions | ||||||
| Setup | ||||||
| Env | ||||||
| Files |
The harnesses
Anthropic's terminal agent. The UAP reference adapter — every core component maps natively.
OpenAI's terminal agent. TOML-based subagents and config; skills follow the cross-tool .agents standard.
The open-source terminal agent. Everything core maps natively, including commands and subagents.
Cursor's agent (editor + CLI). The richest instructions mapping — all four activation modes are native rules.
Factory's droid CLI. Subagents install as droids; MCP supports SSE natively with ${VAR} expansion.
Cognition's terminal agent. File-configured and Claude Code-compatible; subagents live in per-agent directories.
Reading a conversion
Every pack/unpack prints a fidelity report — one line per component. A conversion is lossy iff anything was emulated or skipped, and the report tells you exactly what and why:
✅ instructions/core
◐ instructions/frontend-rules (activation "auto" folded into AGENTS.md)
— commands/triage (commands not supported by this adapter yet)
unpack was LOSSY — see entries above.