Skip to content

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 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.

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, off and on; Claude cannot invoke them.
  • Everything else (create, improve, run, disable, rollback, …) is the rematch CLI in a terminal.
  • Codex has no /rematch command. The optional $rematch-status skill runs the sync, digest and approvals, each command after your approval.
  • In omp, most /rematch <sub> commands run rematch <sub>; why, library, disable, rollback, approve, decline, mark and digest differ (the mapping). Approving and uninstalling are reserved to you, never the rematch tool.
  • Pi uses /rematch <subcommand> and a model-facing rematch tool. User-only controls stay in commands and digest confirmations. Install with pi install /path/to/rematch/adapters/pi.
  • OpenCode registers /rematch-status, -why, -library, -digest, -mark, -approve, -decline, -off and -on. The model-facing tool is read-only. Configure the plugin’s checkout path; do not overwrite the rest of opencode.json.
  • 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.

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.