Harness capabilities
Rematch’s binary, shared skills and counters are common. Adapters use each host’s own event and skill APIs; they do not make every harness interchangeable.
Reflection model calls and batch rollouts still use omp, even when evidence comes from another harness. Session ids distinguish sources: bare omp ids, cc:, codex:, pi: and oc:. Pi/OpenCode resume segments add :r<n> so finished evidence stays immutable.
Capability matrix
Section titled “Capability matrix”| Capability | omp | Claude Code | Pi 1.4.0 | OpenCode 1.19.4 | Codex |
|---|---|---|---|---|---|
| Live main-session trace | Yes | Yes | Yes | Yes | No: import rollouts |
| Corrections and explicit marks | Yes | Yes | Yes | Yes | Post-hoc |
| Shared skills | Yes | Yes | Native resource discovery | In-memory skills.paths |
Sync before launch |
| Approved blocking hooks | Yes | Yes | Yes | Yes | No |
| Stuck-call detection | Yes | Completed calls | Yes | Completed calls | No |
| Skill-unit retrieval | Before requests | Once per prompt | Before requests | Experimental system transform | No |
| Old-output truncation | Yes | No API for it | Yes | Experimental message transform | No |
| Generated subagents | Yes, once approved | Adapted copies, once approved | No native subagent definitions | Not delivered | No |
Personal system prompt (approved AGENTS.fragment.md) |
before_agent_start |
Session-start context | before_agent_start |
System transform | No: skills only |
| Digest | Notifications/dialog | Session-start message | Notifications/dialog | TUI toast or command | CLI/optional status skill |
| User approval | Dialog or command | Command | Dialog or command | Command | CLI |
| Detached reflection trigger | Session start | Session start | Session start | Plugin start | Manual |
| History importer | Yes | Yes | Native session files | Read-only SQLite store | Rollout files |
| Batch solver | omp | Uses omp | Uses omp | Uses omp | Uses omp |
Verified targets: omp 18.12.6, Claude Code 2.1.285, @earendil-works/pi-coding-agent 1.4.0, and opencode-ai / @opencode-ai/plugin 1.19.4. Old Pi package names and OpenCode 2 are not tested compatibility targets.
Pi and OpenCode acceptance tests launch their real pinned runtimes with a local scripted model and isolated state. This proves adapter behavior, not cloud-provider performance or a measured improvement in the agent.
Commands per harness
Section titled “Commands per harness”| In Claude Code | Same as |
|---|---|
/rematch:rematch-status |
rematch status + the skills and agents synced for this directory |
/rematch:rematch-why [cc:<id>] |
rematch library why (default: the latest session here) |
/rematch:rematch-library |
every entry with its raw counters |
/rematch:rematch-mark correction |
overrides the classifier for the last turn of this session |
/rematch:rematch-approve <id> · /rematch:rematch-decline <id> |
the digest’s approve/decline dialog in omp |
/rematch:rematch-off · /rematch:rematch-on |
/rematch off · /rematch on (on also re-links the skills for this directory) |
- Only you can run
mark,approve,decline,offandon; Claude cannot invoke them. - Everything else (
create,improve,run,disable,rollback, …) is therematchCLI in a terminal. - Codex has no
/rematchcommand. The optional$rematch-statusskill runs the sync, digest and approvals, each command after your approval. - In omp, most
/rematch <sub>commands runrematch <sub>;why,library,disable,rollback,approve,decline,markanddigestdiffer (the mapping). Approving and uninstalling are reserved to you, never therematchtool. - Pi uses
/rematch <subcommand>and a model-facingrematchtool. User-only controls stay in commands and digest confirmations. Install withpi install /path/to/rematch/adapters/pi. - OpenCode registers
/rematch-status,-why,-library,-digest,-mark,-approve,-decline,-offand-on. The model-facing tool is read-only. Configure the plugin’s checkout path; do not overwrite the rest ofopencode.json.
Pi and OpenCode limits
Section titled “Pi and OpenCode limits”- Pi: no native subagent-definition surface. Retrieved context is a hidden custom message that Pi sends as user-role content; it is not counted as a human correction.
- OpenCode: no reliable session-end event. Idle ends a run; finalization happens on process disposal, crash reconciliation, or a six-hour quiet-session cutoff. Resume then starts a new segment.
- OpenCode: main sessions are traced live; child sessions are imported afterwards. Generated agent profiles and an approval dialog are not implemented.
- Both: installation uses a local checkout. Their shared-helper imports are not a standalone npm release. Reflection requires omp; a missing optional harness does not make other integrations unusable.
The adapters’ shell checks catch direct attempts to invoke user-only controls. They are not a sandbox against an agent that already has arbitrary shell access.
How each adapter is wired
Section titled “How each adapter is wired”| Claude Code | Codex | |
|---|---|---|
| Lives in | adapters/claude-code/ (a plugin) |
adapters/codex/ (a skill and setup notes) |
| Input | each hook payload, unchanged, piped to rematch trace-event / hook-check |
session rollouts ~/.codex/sessions/**/rollout-*.jsonl, at import |
| Skills | plugin skills/ → ~/.rematch/skills (made at the first SessionStart) |
~/.agents/skills/rematch → ~/.rematch/skills |
| Fails | never fails a hook except by an intentional block | nothing runs in the session |
Hook mappings, exact installation and smoke coverage: Claude Code, Pi, OpenCode, Codex. Contract: DESIGN §18.