Reasonbook in your harness
The Codex developer plugin was verified in a live bundled Codex app-server on 2026-10-11,
using codex-cli 0.159.0-alpha.12.1 and an isolated candidate installation. ChatGPT Work remains
UNVERIFIED. The other non-Claude adapters below remain UNVERIFIED in a live harness;
their vendor documentation was checked on 2026-10-09. Local fixtures alone check the CLI
contract and package contents, not whether a vendor delivers hook output to a model.
The Codex plugin below installs its own pinned runtime. For the other adapters, install the CLI before enabling hooks:
npm install -g @aquex/[email protected]
reasonbook --version
npm root -g
If the former package is installed globally, run npm uninstall -g @aquex/cmos-mcp first. Version 4 provides only the reasonbook command; update scripts and MCP configurations that use the old command. The adapters below run reasonbook. See the migration guide when upgrading.
The last command locates the global packages directory. The configuration sources
listed below live in its @aquex/reasonbook/adapters/ directory. Merge entries into an
existing destination instead of replacing unrelated hooks. Make reasonbook available
on the harness process's PATH. Hooks call the installed CLI directly: invoking npx
inside a hook would spend its short deadline finding or downloading the package.
Configure the Reasonbook MCP server in your harness separately when using an adapter; it adds lifecycle hooks, not an MCP server. See getting started.
Coverage
“Start” means the adapter can provide the project digest. “Prompt” means it can inject recall and a pending draft offer before a user turn. “Reply” means it can read the next user reply through a hook. These describe the implemented adapter contract, subject to the live-verification limitation above.
| Harness | Start | Prompt / draft offer | Reply observation | Close | Decision approval through MCP |
|---|---|---|---|---|---|
| Claude Code plugin | Yes | Yes | Yes | SessionEnd | Hook evidence when the MCP server shares the verified harness session |
| Codex developer plugin | Yes | Yes; Stop captures a draft from last_assistant_message |
Yes | SessionEnd | Hook evidence bound to the MCP conversation and enclosing project |
| Cursor IDE / CLI adapter | Yes | No | No | Manual | Agent-attested |
| Devin CLI / Devin Local adapter | Yes | Yes for existing drafts; no automatic Stop draft capture | Observed; no named-draft binding | Hook cleanup; manual MCP close | Agent-attested; MCP session linkage is unverified |
| Copilot CLI / cloud adapter | Yes | No | No | Manual | Agent-attested |
| VS Code Local adapter | Yes | No | No | Manual | Agent-attested |
| Zed / Warp / goose, using the fallback below | Agent-invoked | Agent-invoked | Agent judgment | Agent-invoked | Agent-attested |
Agent-attested decisions mean the agent states that the operator approved the text. Constraint, rule and profile drafts require verified hook approval and cannot use agent-attested capture. A stable ID in hook stdin alone does not establish a connection to the MCP server process. Non-Claude transcripts are not scanned as Claude transcripts; their outside-content provenance remains unknown. Without MCP session linkage, SessionEnd cleans up hook-owned state but cannot close the MCP process's separate session; close that session through MCP. Stop, compaction and end hooks never request an extra model turn.
Codex
Install the developer plugin from the Reasonbook marketplace:
codex plugin marketplace add kneelinghorse/reasonbook
codex plugin add reasonbook@reasonbook
If the plugin is installed under its former name, remove it first, because both plugins answer as the
same server: codex plugin remove cmos@cmos, and codex plugin remove cmos-chat@cmos for the chat
plugin.
It includes the MCP server, skills and five lifecycle hooks. Node 20 or newer is
required. The server launcher checks PATH, the login shell and the usual Homebrew
folders. The plugin installs its exact Reasonbook version in
~/.config/rbook/plugins, or the selected legacy config folder for an existing installation.
Both Codex plugins and the developer hooks share that installation; no package is installed
in Codex's private plugin data directory. The developer plugin requests forwarding of
RBOOK_CONFIG_DIR and the other supported settings. The portable chat plugin uses the
environment inherited from its host. Both retain legacy CMOS_* fallback.
Set a custom root to an absolute folder; shared entries refuse empty or relative values
because hooks and servers run in different folders. Actual forwarding depends on the
client's plugin loader; custom-root forwarding through every loader is unverified.
Use the default root or a
manually configured server if your loader does not forward the setting.
During a cold install the server answers immediately
with an installing message. Start a new session after installation finishes to
load the tools reliably. The bootstrap fixture kept the original thread at zero
tools. A candidate-runtime status probe listed all 15 as connected; the published
runtime listed 15 while reporting a failed connection. New sessions in the same
app connected successfully with all 15 tools. Model access to tools in the
original session remains unverified.
In the Codex CLI, use /hooks to inspect and review the five commands from
hooks/codex.json. For the desktop app, use its
bundled Codex CLI with the same Codex home if the app does not expose hook review.
Trust applies to the exact definition. The commands contain no release version,
and an isolated version-update probe preserved their trust. Changed definitions
require review again. Do not bypass review or write trust records on the
operator's behalf. Codex hooks
If you enabled the CMOS 3.3.0 adapter, remove its five CMOS entries from
.codex/hooks.json before enabling the plugin. Preserve unrelated entries. Also
remove any other imported CMOS hook registration: the adapter and plugin can both
run, and duplicate delivery is not prevented without verified process identity.
The plugin supplies its own MCP server; remove a duplicate manual Reasonbook server or
set pluginServer to off in the Reasonbook user config when deliberately retaining the
manual server.
The hooks map session_id, cwd, turn_id and last_assistant_message into the
shared CLI. They wire SessionStart, UserPromptSubmit, Stop, PreCompact and SessionEnd;
start and prompt use the nested hookSpecificOutput.additionalContext envelope.
Use the plugin's skills for the guided workflows. Bootstrap, hook-trust updates and
tool refresh were probed with codex-cli 0.159.0-alpha.12.1.
The live two-turn acceptance separately verified a project digest, a trailing
Would record: draft captured by Stop, and a literal yes on the next turn. The
model recorded that draft through MCP with approval_mode=approved and
approval_words=yes. Its author session belonged to the hash of that Codex
conversation, and SessionEnd completed it. The run used actual plugin hooks, with
no manually supplied hook events. This establishes the tested Codex boundary;
VS Code extension-host and Claude Desktop linkage remain unverified.
For an ordinary call without projectRoot, Codex supplies the client folder and
Reasonbook reports resolvedBy=client-cwd. Approval linkage additionally requires hook
evidence for that conversation in the same physical project store. A call naming
a different project or lacking that evidence keeps process ownership; a decision
may be agent-attested, while constraint, rule and profile drafts still require
hook-bound approval. The boundary fixtures
cover missing metadata, first drafts, other projects and SessionEnd cleanup.
Cursor IDE and CLI
Merge adapters/cursor/hooks.json into
.cursor/hooks.json. Trust the workspace. If Reasonbook hooks are also imported from
Claude configuration, turn off Settings → Agents → Third-Party Imports → Include
Third-Party Plugins, Skills, and Other Configs, or remove the duplicate imported
Reasonbook hook registration. That switch affects other imported configuration too.
Cursor runs matching hooks from every source; native priority does not suppress
duplicates. Third-party imports
This adapter wires only sessionStart, returning additional_context. Current
docs identify its session_id as the same ID as conversation_id. Cursor's prompt
hook cannot inject the pending offer, so this adapter does not wire it. Hosted cloud
agents do not provide this session-start boundary; this adapter therefore does not
claim cloud coverage. Check Customize's Hooks tab and the Hooks output channel.
Live runtime: UNVERIFIED. Cursor hooks
Devin CLI and Devin Local
Merge adapters/devin/hooks.v1.json into
.devin/hooks.v1.json. This file is the event map itself, without a hooks wrapper.
It wires SessionStart, UserPromptSubmit and SessionEnd. The adapter uses
DEVIN_PROJECT_DIR, session_id and prompt_id; start/prompt output uses the nested
hookSpecificOutput.additionalContext envelope. Run /hooks to inspect loaded
sources. Live runtime: UNVERIFIED. Devin hooks
Merge adapters/devin/config.json into
.devin/config.json to set read_config_from.claude to false and prevent imported
Claude hooks from running alongside these native hooks. This also disables imported
Claude rules, skills and MCP configuration; retain the required native configuration
and AGENTS.md. Do not install the Reasonbook plugin's hooks alongside this adapter.
Devin import controls
The documented Stop payload has no assistant reply, and PostCompaction is a different boundary from Reasonbook's pre-compact hook. Neither event is wired. Prompt hooks observe replies, but without Stop they cannot establish which named draft the assistant showed for approval. Record agreed decisions through MCP; without verified session linkage, their draft approval is agent-attested. Devin lifecycle
GitHub Copilot and VS Code Local
Choose one of these alternatives for .github/hooks/rbook.json:
- Copilot CLI or cloud agent:
adapters/copilot/rbook.json. Usesversion: 1,sessionStart,sessionId, and top-leveladditionalContext. Its Bash and PowerShell commands invoke the same installed CLI. Cloud jobs require the package and project store to be available in the job; their network access is restricted and their filesystem is ephemeral. No prompt hook is wired because config-file prompt output is discarded. Live runtime: UNVERIFIED. Copilot hooks - VS Code Local session target:
adapters/vscode/rbook.json. UsesSessionStartwithout a numericversion, optionalsession_id, and nestedhookSpecificOutput.additionalContext. Local hook support is preview. Enablechat.useHooks, trust the workspace, and leavechat.useClaudeHooksoff when using this adapter. Inspect Chat: Configure Hooks and the GitHub Copilot Chat Hooks output channel. Live runtime: UNVERIFIED. Local hook configuration, Local schemas
VS Code can parse Copilot configuration, but its Local runtime sends different payloads and consumes a different output envelope. Select the adapter for the actual session target, and replace the Reasonbook entry when switching targets. Installing both files would run both. Remove any duplicate Reasonbook hook registrations from imported Claude settings or installed plugins. These adapters intentionally provide only the start digest: close the Reasonbook session explicitly with the close-out command or MCP.
MCP prompts and harnesses without hooks
Reasonbook exposes four MCP prompts from the same source files as its skills:
rbook-start, rbook-close-out, rbook-plan, and rbook-build. Select them through your
client's MCP prompt picker or slash-command menu when available. They are invoked by
the user or agent; exposing a prompt does not make it run automatically. Client
support varies, so no prompt-only client is described as having lifecycle hooks.
For Zed, Warp, goose, or any harness without this adapter support, run:
reasonbook init --no-hooks
Use the AGENTS.md output from that command. Its labelled hook-less block is at most 15 lines and comes from the same init source used for every project; do not maintain a second copy of the procedure in a client-specific rules file. If the harness does not load AGENTS.md automatically, include that file through its project instructions. The fallback asks the agent to review the project record and capture unfinished work, so delivery depends on the agent following the instructions. Live runtimes: UNVERIFIED.
Duplicate execution and verification limits
Enable one Reasonbook hook source in each harness. Cross-source election requires a real, verified harness-process lifetime; turn deduplication requires a stable turn ID. Missing identity means no deduplication guarantee. Do not substitute a guessed PID, hook process PID, timestamp, or prompt-text hash. Native filenames prevent Claude Code from loading these adapters, but they do not prevent another harness from also importing existing Claude hooks.
Repository fixture tests cover native config structure, shipped files, payload normalization and output envelopes. A live verification must additionally show that the selected harness discovers the configuration, executes the installed CLI, and delivers the digest exactly once. None of the non-Claude rows above claims that verification has happened.