codex-reasonix-mcp
This server is a security-first MCP bridge enabling Codex to delegate, supervise, and inspect AI-driven development tasks performed by Reasonix in isolated Git worktrees.
Delegate Tasks (
reasonix_delegate): Submit a detailedTaskContractV1(objective, write/forbidden scopes, acceptance criteria, verification commands, invariants, pause conditions, verified context) to Reasonix. The bridge creates an isolated Git worktree and ACP session, and asynchronously starts Goal-mode work.Control Tasks (
reasonix_control): Manage task lifecycle: steer ongoing work, respond to interactions/pauses, cancel, trigger asynchronous finalization (reruns verification, checks scope/secrets, and only advances the worker branch if the tree matches the reviewed state), or close tasks. Supports up to two post-review repair rounds.Inspect Tasks (
reasonix_inspect): Retrieve bounded, paginated status, summary, changed files, diffs, verification results, acceptance evidence, risks, usage, interactions, and events.Ensure Security: Operates in a clean, sandboxed, network-isolated worktree; scoped writes; never pushes or merges automatically; Codex retains final commit decisions.
Validate Environment (
doctor): Perform a diagnostic check of Node, Git, platform, Reasonix binary, ACP extension, OS sandbox availability, and model selector, without engaging the model.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@codex-reasonix-mcpDelegate implementing the new API endpoint to Reasonix in an isolated worktree."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
codex-reasonix-mcp
codex-reasonix-mcp is a security-first MCP bridge that lets Codex supervise
Reasonix as the implementation worker. Codex owns the immutable contract,
review, and final commit decision. Reasonix works in an isolated Git worktree
through ACP Goal mode. The bridge never pushes, merges, or changes the caller's
main worktree.
The core is generic to Git repositories. It contains no application-specific paths, LLM router, native-Windows implementation, or Codex source modification.
Release status
The last published stable npm release is 0.1.1. This source tree is prepared
as 0.2.0-rc.4; that version is not available from npm until its GitHub
prerelease and trusted-publishing workflow complete successfully. Official
Reasonix v1.19.0 remains the documented compatibility baseline, while runtime
capability checks—not a version string—remain authoritative.
Related MCP server: Codex Gemini Delegator V2
Requirements
Node.js 22 or newer
pnpm 10 for source development
Git 2.36 or newer
Linux, macOS, or Windows through WSL; native Windows is rejected
Reasonix v1.19.0 or a compatible newer build with ACP v1 supervisor/status capabilities and static command metadata v1
Bubblewrap on Linux/WSL or Seatbelt on macOS (required: verification, the secret scanner, and Git hooks execute inside the OS command sandbox and fail closed when no engine is available)
A configured Reasonix provider exposing the selected model
Reasonix, provider credentials, and provider billing remain user-managed. This package neither downloads nor bundles Reasonix.
Security posture
Repository-controlled content never executes unsandboxed: verification
commands, the external secret scanner, and (when explicitly enabled) Git hooks
run inside a network-disabled, filesystem-restricted OS sandbox with hidden
credential stores. Git hooks are off by default
(CODEX_REASONIX_RUN_GIT_HOOKS=true re-enables them through the sandbox).
The Reasonix worker receives an explicitly allowlisted environment
(CODEX_REASONIX_ENV_ALLOWLIST) instead of the host environment; injection
variables are hard-denied. Finalize approvals and pause acknowledgments are
bound to reviewed-snapshot and pause tokens, journal appends are
crash-consistent, and the bridge commit requires the exact task branch.
See docs/security.md for the threat model, the proof matrix, and the configuration knobs. The matrix gates run on Linux and macOS in CI.
Install for Codex
Use the published stable package today:
codex mcp add reasonix-worker -- npx -y codex-reasonix-mcp@0.1.1For a local checkout of this release-candidate tree:
pnpm install --frozen-lockfile
pnpm build
codex mcp add reasonix-worker -- node /absolute/path/to/codex-reasonix-mcp/dist/index.jsAfter 0.2.0-rc.4 is actually published, consumers can pin that exact version
instead of relying on a moving dist-tag. Prereleases publish under next;
stable releases publish under latest.
Diagnostics
Standard doctor is local-only and does not create an ACP session or call a provider:
codex-reasonix-mcp doctorIt checks Node, Git, platform/WSL, the Reasonix binary and supervisor flags, OS
sandbox availability, state permissions, network posture, and that Codex has
tool_timeout_sec = 900 under [mcp_servers.reasonix-worker]. This explicit
value is required even when a Codex release provides a shorter default.
The deep lane is explicit, bounded to one Goal, 50,000 cumulative provider tokens, and ten minutes, and may incur provider cost:
codex-reasonix-mcp doctor --deep --allow-provider-callIt creates temporary source/state, proves a structured edit, static command, exact verification, final worker commit, and unchanged source repository, reports duration/usage/estimated cost, and always attempts cleanup. This lane is never implied by standard doctor. Failure reports preserve only bounded, privacy-safe partial proof and event-type diagnostics before cleanup.
MCP surface
The reasonix_worker server exposes exactly three tools:
reasonix_delegatevalidatesTaskContractV1, creates or resumes the isolated task, and by default waits for review, interaction, failure, or a bounded timeout.reasonix_controlsteers, answers an interaction, cancels, finalizes, or closes a task. At most two post-review repair rounds are accepted.reasonix_inspectreads bounded status, evidence, interactions, collision evidence, and optional paginated diffs. Events are opt-in.
Each tool advertises a concrete success schema and every successful response
contains matching structuredContent. Errors remain isError responses with a
redacted code, message, retryable, closed-enum next_action, and optional
safe details. Delegate/control are annotated mutating, destructive,
non-idempotent, and open-world; inspect is read-only, idempotent, and
closed-world.
Codex calls reasonix_delegate only after explicit user request or approval for
Reasonix implementation. Delegate and finalization derive repository authority
from codex/sandbox-state-meta; no model-provided repository path is accepted.
The normal success path is exactly two long-running calls: one delegate with
the default wait_mode: "review", then one finalize that waits for a terminal
result and returns the worker commit hash. Finalize echoes the reviewed
snapshot by mapping review_revision to expected_review_revision and
review_tree_hash to expected_review_tree_hash. New tasks run on the worker_lane: "fast" (direct edits in Reasonix economy + normal mode, no Goal/AutoResearch/
subagents, 600-second default deadline); choose worker_lane: "deep" only for
explicitly long-horizon Delivery + Goal work (3,600-second default).
reasoning_effort is selected per task (low, medium, high, or max);
precedence is task field, then CODEX_REASONIX_EFFORT, then medium. Choose
the lowest sufficient effort. execution_timeout_seconds is a persisted
per-task execution deadline; new tasks default by lane (600 fast / 3,600 deep)
and may request 60–14,400 seconds. The separate delegate wait remains bounded
to 600 seconds: if it expires, the call returns a recoverable running view
while the worker continues. Re-delegating the same immutable task can wait
again without changing its stored execution profile. There is no hard worker
token ceiling. path_base defaults to the
invocation cwd; use repository only for legacy repository-root path
semantics. Inspect/steer are recovery tools, not happy-path polling steps.
If finalization fails, keep the retained task at review, inspect or repair it there, and finalize again using the newly reviewed snapshot. Do not manually copy the diff into the source checkout and do not close the task as a recovery shortcut.
Completion creates a commit on the retained worker branch. It does not
integrate the caller's checkout: after reviewing the returned hash, Codex may
explicitly git cherry-pick <hash>. The bridge never pushes or merges.
Shell-first supervision
Reasonix shell requests must carry private _meta.reasonix.io static argv v1
metadata and a cwd inside the worker worktree. The bridge then applies this
precedence:
Audited reads such as safe
rg, non-in-placesed,cat,ls, safefind, and sanitized Git reads receive one-time approval.Tests, builds, formatters, package managers, project scripts, and restricted
envwrappers require an exact argv plus cwd match in contract verification orallowed_commands.Git mutations or ref/history rewrites,
gh, remotes, publish/release, network access, credentials, privilege escalation, destructive filesystem operations, shell/eval, inline interpreters, cwd escape, and metadata mismatch are always denied. A contract cannot override these rules.Unknown executables are denied with a recovery hint.
Every allowed command has a watchdog and immediate post-command scope, symlink, size, secret, and source-collision checks. Repeated identical immutable denials receive one recovery steer; the third denial in the same prompt cancels the turn and pauses the task instead of opening a permission interaction.
allowed_commands expands execution permission only. Verification commands
are implicitly allowed and remain the sole source of automated acceptance
evidence. See task contracts.
Collision safety and optional Codex hook
The bridge compares source dirty paths and committed movement since the task's
base against write_scope on resume, before and after worker mutation, at
review readiness, and throughout finalization. Overlap pauses or blocks the task
without reset, stash, or deletion. This core scanner is authoritative.
An optional user hook provides an earlier guardrail for Codex Bash and
apply_patch calls:
codex-reasonix-mcp hooks install --user
codex-reasonix-mcp hooks install --user --apply
codex-reasonix-mcp hooks status --userInstall/uninstall are dry runs without --apply. Installation atomically
merges ~/.codex/hooks.json, preserves third-party hooks, and installs a
versioned runtime in private state. You must still inspect and trust it manually
through Codex /hooks; the installer does not bypass trust. The hook is a
guardrail, never the collision authority.
Task retention
codex-reasonix-mcp task list
codex-reasonix-mcp task list --all --json
codex-reasonix-mcp task archive <id>
codex-reasonix-mcp task archive <id> --apply
codex-reasonix-mcp task prune --older-than 30d
codex-reasonix-mcp task prune --older-than 30d --applyList shows active tasks by default; --all includes terminal live tasks,
archives, and tombstones. Archive accepts only a terminal task whose worker
worktree is clean or missing. It moves the full audit atomically and may detach
a clean worktree, but never deletes the branch, ref, or commit. Prune applies
only to archives at least the requested age and replaces them with permanent,
integrity-bound tombstones. Mutations are dry runs unless --apply is present.
Local data and metrics
Task state uses a validated, version-gated v2 schema. Valid v1 records migrate atomically on read; corrupt, noncanonical, and unknown future versions fail closed. Private local metrics record only closed numeric/outcome classes for permissions, denial loops, commands/timeouts, collisions, lifecycle duration, verification, and provider usage. They hash task identity and never store raw prompts, argv, command output, secrets, or file contents. There is no telemetry or upload.
Develop
corepack enable
pnpm install --frozen-lockfile
pnpm check
pnpm audit --audit-level highpnpm check includes lint, formatting, TypeScript, V8 coverage, build, package
allowlist, and pack dry-run. Coverage minimums are 80% for lines, statements,
and functions and 75% for branches. CI runs Verify on Node 22/24 Linux and Node
22 macOS, plus dependency audit and CodeQL—the five protected checks expected by
the release train.
GitHub OIDC trusted publishing uses provenance and no long-lived npm token. The
release workflow validates exact v<package-version> tags and maps prereleases
to next and stable versions to latest. No local npm publish is part of the
release process.
See architecture, configuration, security, troubleshooting, and CONTRIBUTING.md.
Community
Use the structured bug report or feature request.
Follow the Code of Conduct.
Report vulnerabilities privately through GitHub Security Advisories, as described in SECURITY.md.
License
MIT. See LICENSE.
Available Tools
3 toolsreasonix_controlControl a Reasonix taskADestructive
Control a task created by reasonix_delegate. On the default happy path, call finalize once after reviewing the returned bundle; finalize waits for a committed terminal result. For finalize, copy review_revision to expected_review_revision and review_tree_hash to expected_review_tree_hash. finalize accepts any valid acceptance id in approved_review_criteria; automated ids are ignored for approval but every review-evidence criterion from required_review_criteria must be approved. If finalize fails, preserve the task at review, inspect or repair it there, then retry with the new snapshot; never copy the diff manually into the source checkout or close the task. Use respond, cancel, close, or steer only for explicit recovery or interaction handling. The returned commit is isolated and must be cherry-picked explicitly; this tool never merges or pushes.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| answer | No | Optional free-form answer for action respond; omit for other actions. | |
| message | No | Required when action is steer; omit for other actions. | |
| task_id | Yes | ||
| decision | No | Required when action is respond; omit for other actions. | |
| option_id | No | Optional offered option for action respond; omit for other actions. | |
| commit_message | No | Optional commit message for action finalize; omit for other actions. | |
| interaction_id | No | Required when action is respond; omit for other actions. | |
| review_summary | No | Required when action is finalize; omit for other actions. | |
| wait_timeout_seconds | No | Optional wait timeout for action finalize; omit for other actions. | |
| approved_review_criteria | No | Required when action is finalize; omit for other actions. Any valid acceptance id is accepted; automated ids are ignored for approval, but every review-evidence criterion must be present. | |
| expected_review_revision | No | Required when action is finalize: copy review_revision from the reviewed task view. Omit for other actions. | |
| expected_review_tree_hash | No | Required when action is finalize: copy review_tree_hash from the reviewed task view. Omit for other actions. |
Output Schema
| Name | Required | Description |
|---|---|---|
| phase | Yes | |
| state | Yes | |
| branch | Yes | |
| reason | No | |
| task_id | Yes | |
| worktree | Yes | |
| session_id | No | |
| updated_at | Yes | |
| commit_hash | No | |
| worker_lane | Yes | |
| contract_hash | Yes | |
| repair_rounds | Yes | |
| repository_id | Yes | |
| pause_revision | No | |
| review_revision | No | |
| review_tree_hash | No | |
| source_collision | No | |
| pause_reason_hash | No | |
| reasonix_work_mode | No | |
| integration_command | No | |
| reasonix_session_mode | No | |
| execution_timeout_seconds | Yes | |
| effective_reasoning_effort | Yes | |
| requested_reasoning_effort | Yes | |
| source_checkout_integrated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds rich behavioral detail beyond the annotations: finalize 'waits for a committed terminal result', automated ids are 'ignored for approval but every review-evidence criterion must be approved', and the returned commit is 'isolated and must be cherry-picked explicitly; this tool never merges or pushes'. These details are not present in the structured annotations and materially inform the agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is six sentences but every sentence carries operational value: the happy path, finalize parameter copying, failure recovery, and commit isolation warning. It is front-loaded with the most used action (finalize) and avoids redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 actions, 13 parameters) and the existing output schema, the description is remarkably complete. It covers the default path, failure handling with explicit retry guidance, criteria approval semantics, and the tool's non-merging behavior. It leaves no critical operational gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 85%, and the schema already documents parameters like approved_review_criteria and expected_review_revision with similar wording. The description adds workflow-level context (e.g., 'copy review_revision to expected_review_revision'), but this largely mirrors the schema's own parameter descriptions. Hence, it meets the baseline without significantly enhancing parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Control a task created by reasonix_delegate', clearly scoping the tool to lifecycle management of delegated tasks. It lists the five actions (steer, respond, cancel, finalize, close) and describes the primary happy path, distinguishing it from siblings reasonix_inspect and reasonix_delegate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: the happy path is 'call finalize once after reviewing the returned bundle'. It references reasonix_delegate as the task origin and reasonix_inspect for repair ('inspect or repair it there'). It states when to use the other actions: 'Use respond, cancel, close, or steer only for explicit recovery or interaction handling.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reasonix_delegateDelegate a contract to ReasonixADestructive
After explicit user approval, delegate one immutable TaskContractV1 to an isolated Reasonix edit worker. For a trivial edit whose local context is already verified, do one focused preflight and delegate directly; do not browse docs or memory solely to construct the contract. write_scope is the exclusive write allowlist and already denies every other path. forbidden_scope is only for sensitive carve-outs inside broader write scopes; never use **/* or another catch-all that matches a concrete write_scope target. Default wait_mode=review holds this call until review, interaction, failure, or timeout; a wait timeout is recoverable and does not cancel the worker. New tasks default to worker_lane=fast (direct edits; no Goal, AutoResearch, review/task skills, or subagents); use worker_lane=deep only for explicitly long-horizon delivery/goal work. Select the lowest reasoning_effort adequate for the task (low is the lowest supported). Set execution_timeout_seconds proportionately (fast default 600, deep default 3600, maximum 14400); omitted resumes retain the stored deadline. Use background only when the caller intentionally wants asynchronous recovery flow. Contract verification and allowed_commands run as exact static argv with no shell: sh -c/bash -c/eval, pipes, redirection, and inline interpreters are rejected. For byte-exact file content, use file_assertions instead of shell comparison commands.
| Name | Required | Description | Default |
|---|---|---|---|
| resume | No | ||
| task_id | Yes | ||
| base_ref | No | ||
| contract | Yes | ||
| path_base | No | Defaults to cwd for new tasks; omitted legacy resumes preserve stored semantics. | |
| wait_mode | No | review | |
| worker_lane | No | Worker execution lane. fast (default) is a direct-edit Reasonix session without Goal/AutoResearch/subagents; deep is an explicit long-horizon Goal session. Omitted resumes preserve the stored lane. | |
| pause_revision | No | ||
| reasoning_effort | No | Reasoning effort; low is the lowest supported value for new tasks. | |
| pause_reason_hash | No | ||
| wait_timeout_seconds | No | ||
| execution_timeout_seconds | No | Task execution deadline. New fast-lane tasks default to 600 seconds and deep-lane tasks to 3600 seconds; omitted resumes preserve the stored value. A wait timeout never cancels the worker. |
Output Schema
| Name | Required | Description |
|---|---|---|
| diff | No | |
| phase | Yes | |
| risks | No | |
| state | Yes | |
| usage | No | |
| branch | Yes | |
| reason | No | |
| summary | No | |
| task_id | Yes | |
| worktree | Yes | |
| diff_stat | No | |
| timed_out | No | |
| session_id | No | |
| updated_at | Yes | |
| commit_hash | No | |
| worker_lane | Yes | |
| changed_files | No | |
| contract_hash | Yes | |
| repair_rounds | Yes | |
| repository_id | Yes | |
| pause_revision | No | |
| resume_required | No | |
| review_revision | No | |
| inspect_required | No | |
| review_tree_hash | No | |
| source_collision | No | |
| pause_reason_hash | No | |
| active_interaction | No | |
| reasonix_work_mode | No | |
| review_diff_sha256 | No | |
| integration_command | No | |
| reasonix_session_mode | No | |
| required_review_criteria | No | |
| execution_timeout_seconds | Yes | |
| effective_reasoning_effort | Yes | |
| requested_reasoning_effort | Yes | |
| source_checkout_integrated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond annotations by disclosing key behaviors: write_scope is an exclusive allowlist, forbidden_scope is only for sensitive carve-outs, commands are exact static argv with no shell/pipes/redirection, wait_timeout is recoverable and does not cancel the worker, and omitted resumes preserve stored settings. It also notes the requirement for 'explicit user approval,' which is critical context. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded with the core purpose, followed by practical operational rules. It is longer than ideal and runs as a single block of text, but every sentence adds substantive guidance—defaults, constraints, and security invariants—so the length is justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (12 parameters, nested contract object, multiple enums, output schema, annotations), the description covers the most decision-relevant aspects: task scoping, worker behavior, timeouts, resume semantics, and command execution security. It gives enough context for an agent to select and invoke the tool correctly without requiring external documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, but the description compensates richly. It explains the semantics of write_scope and forbidden_scope, defaults for wait_mode, worker_lane, reasoning_effort (low is lowest), execution_timeout_seconds defaults (fast 600, deep 3600, max 14400), and advises file_assertions for byte-exact content. This adds meaning far beyond raw schema names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action: 'delegate one immutable TaskContractV1 to an isolated Reasonix edit worker' after explicit user approval. This clearly distinguishes the tool from siblings (inspect, control) by naming the delegated contract workflow and the worker isolation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong situational guidance: for trivial edits with verified local context, do one focused preflight and delegate directly; avoid browsing docs/memory solely to construct the contract. It also differentiates worker_lane=fast versus deep, explains background mode, and specifies when deep is needed ('explicitly long-horizon delivery/goal work').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reasonix_inspectInspect a Reasonix taskARead-onlyIdempotent
Recovery-only bounded inspection of status, evidence, interactions, and optional paginated diff or event output. Events are opt-in. The default two-call happy path uses no inspect polling.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | ||
| include | No | ||
| task_id | Yes | ||
| wait_ms | No | ||
| max_bytes | No | ||
| wait_until | No | change |
Output Schema
| Name | Required | Description |
|---|---|---|
| task_id | Yes | |
| sections | Yes | |
| truncated | Yes | |
| updated_at | Yes | |
| next_cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only and idempotent, and the description adds useful behavioral context: 'bounded' suggests output limits, 'Events are opt-in' indicates default behavior, and the note about the default happy path avoiding inspect polling clarifies the expected call pattern. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise, front-loaded sentences that pack maximum information without wasted words. Every phrase contributes meaning, from 'recovery-only' to 'no inspect polling'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the tool is complex (6 parameters, 11 include enums, wait_until). The description gives a strong high-level overview but omits many include options and polling semantics (e.g., how wait_until interacts with wait_ms). It feels too terse to be fully self-sufficient for such a feature-rich tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the full burden, and it does provide semantic hints (e.g., 'optional paginated diff or event output' maps to include/cursor, 'bounded' relates to max_bytes, 'Events are opt-in' relates to include). However, it does not explain task_id, wait_ms, or wait_until, leaving a significant gap for a 6-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as an inspection utility for Reasonix tasks, listing specific outputs (status, evidence, interactions, diff/events) and scoping it as 'recovery-only'. This distinguishes it from the sibling tools (delegate, control) which handle execution and management.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'Recovery-only' and 'The default two-call happy path uses no inspect polling', providing clear context for when to use this tool (recovery scenarios) and implying it is not part of the normal flow. It doesn't name alternatives directly but the context is sufficient to differentiate from siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
3 tool updates
v0.2.0-rc.4- Changed
reasonix_control32 fields changed- changed
Input schema / properties / approved_review_criteria / descriptionPrevious value: -"Required when action is finalize; omit for other actions."New value: +"Required when action is finalize; omit for other actions. Any valid acceptance id is accepted; automated ids are ignored for approval, but every review-evidence criterion must be present." - added
Input schema / properties / expected_review_revisionAdded value: +{ + "description": "Required when action is finalize: copy review_revision from the reviewed task view. Omit for other actions.", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / expected_review_tree_hashAdded value: +{ + "description": "Required when action is finalize: copy review_tree_hash from the reviewed task view. Omit for other actions.", + "pattern": "^[0-9a-f]{40}$", + "type": "string" +} - changed
Input schema / properties / message / minLengthPrevious value: -1New value: +0 - added
Input schema / properties / wait_timeout_secondsAdded value: +{ + "description": "Optional wait timeout for action finalize; omit for other actions.", + "maximum": 600, + "minimum": 0, + "type": "integer" +} - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Output schema / properties / branchAdded value: +{ + "minLength": 1, + "type": "string" +} - added
Output schema / properties / commit_hashAdded value: +{ + "pattern": "^[0-9a-f]{40,64}$", + "type": "string" +} - added
Output schema / properties / contract_hashAdded value: +{ + "pattern": "^[0-9a-f]{64}$", + "type": "string" +} - added
Output schema / properties / effective_reasoning_effortAdded value: +{ + "enum": [ + "minimal", + "low", + "medium", + "high", + "max" + ], + "type": "string" +} - added
Output schema / properties / execution_timeout_secondsAdded value: +{ + "maximum": 14400, + "minimum": 60, + "type": "integer" +} - added
Output schema / properties / integration_commandAdded value: +{ + "maxLength": 1024, + "minLength": 1, + "type": "string" +} - added
Output schema / properties / pause_reason_hashAdded value: +{ + "pattern": "^[0-9a-f]{64}$", + "type": "string" +} - added
Output schema / properties / pause_revisionAdded value: +{ + "minimum": 0, + "type": "integer" +} - added
Output schema / properties / phaseAdded value: +{ + "type": "string" +} - added
Output schema / properties / reasonAdded value: +{ + "type": "string" +} - added
Output schema / properties / reasonix_session_modeAdded value: +{ + "minLength": 1, + "type": "string" +} - added
Output schema / properties / reasonix_work_modeAdded value: +{ + "minLength": 1, + "type": "string" +} - added
Output schema / properties / repair_roundsAdded value: +{ + "minimum": 0, + "type": "integer" +} - added
Output schema / properties / repository_idAdded value: +{ + "minLength": 1, + "type": "string" +} - added
Output schema / properties / requested_reasoning_effortAdded value: +{ + "enum": [ + "minimal", + "low", + "medium", + "high", + "max" + ], + "type": "string" +} - added
Output schema / properties / review_revisionAdded value: +{ + "minimum": 0, + "type": "integer" +} - added
Output schema / properties / review_tree_hashAdded value: +{ + "pattern": "^[0-9a-f]{40}$", + "type": "string" +} - added
Output schema / properties / session_idAdded value: +{ + "minLength": 1, + "type": "string" +} - added
Output schema / properties / source_checkout_integratedAdded value: +{ + "const": false, + "type": "boolean" +} - added
Output schema / properties / source_collisionAdded value: +{ + "additionalProperties": false, + "properties": { + "baseCommit": { + "minLength": 1, + "type": "string" + }, + "checkpoint": { + "minLength": 1, + "type": "string" + }, + "committedPaths": { + "items": { + "type": "string" + }, + "type": "array" + }, + "detectedAt": { + "minLength": 1, + "type": "string" + }, + "dirtyPaths": { + "items": { + "type": "string" + }, + "type": "array" + }, + "overlappingPaths": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sourceHead": { + "minLength": 1, + "type": "string" + }, + "unavailable": { + "type": "boolean" + } + }, + "required": [ + "checkpoint", + "baseCommit", + "dirtyPaths", + "committedPaths", + "overlappingPaths", + "unavailable", + "detectedAt" + ], + "type": "object" +} - added
Output schema / properties / stateAdded value: +{ + "enum": [ + "provisioning", + "running", + "waiting_permission", + "waiting_input", + "paused", + "review_required", + "verifying", + "completed", + "commit_failed", + "failed", + "cancelled", + "closed" + ], + "type": "string" +} - added
Output schema / properties / task_idAdded value: +{ + "maxLength": 64, + "minLength": 1, + "type": "string" +} - added
Output schema / properties / updated_atAdded value: +{ + "minLength": 1, + "type": "string" +} - added
Output schema / properties / worker_laneAdded value: +{ + "enum": [ + "fast", + "deep" + ], + "type": "string" +} - added
Output schema / properties / worktreeAdded value: +{ + "minLength": 1, + "type": "string" +} - added
Output schema / requiredAdded value: +[ + "task_id", + "state", + "phase", + "contract_hash", + "repository_id", + "branch", + "worktree", + "worker_lane", + "requested_reasoning_effort", + "effective_reasoning_effort", + "execution_timeout_seconds", + "source_checkout_integrated", + "repair_rounds", + "updated_at" +]
- Changed
reasonix_delegate57 fields changed- added
Input schema / properties / contract / properties / allowed_commandsAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "argv": { + "items": { + "maxLength": 4096, + "type": "string" + }, + "maxItems": 128, + "minItems": 1, + "type": "array" + }, + "cwd": { + "maxLength": 1024, + "type": "string" + }, + "id": { + "$ref": "#/properties/contract/properties/acceptance_criteria/items/properties/id" + }, + "timeout_seconds": { + "maximum": 1800, + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "id", + "argv" + ], + "type": "object" + }, + "maxItems": 256, + "type": "array" +} - added
Input schema / properties / contract / properties / file_assertionsAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "expected_utf8": { + "maxLength": 65536, + "type": "string" + }, + "id": { + "$ref": "#/properties/contract/properties/acceptance_criteria/items/properties/id" + }, + "path": { + "maxLength": 1024, + "minLength": 1, + "type": "string" + }, + "proves": { + "items": { + "$ref": "#/properties/contract/properties/acceptance_criteria/items/properties/id" + }, + "maxItems": 256, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "id", + "path", + "expected_utf8", + "proves" + ], + "type": "object" + }, + "maxItems": 256, + "type": "array" +} - added
Input schema / properties / contract / properties / forbidden_scope / defaultAdded value: +[] - added
Input schema / properties / contract / properties / forbidden_scope / descriptionAdded value: +"Optional sensitive carve-outs inside broader write scopes; never use a catch-all pattern that matches a concrete write_scope target." - added
Input schema / properties / contract / properties / invariants / defaultAdded value: +[] - added
Input schema / properties / contract / properties / non_goals / defaultAdded value: +[] - added
Input schema / properties / contract / properties / pause_conditions / defaultAdded value: +[] - added
Input schema / properties / contract / properties / verified_context / defaultAdded value: +[] - added
Input schema / properties / contract / properties / write_scope / descriptionAdded value: +"Exclusive repository-relative write allowlist; every path not listed is already denied." - changed
Input schema / properties / contract / requiredPrevious value: -[ - "schema_version", - "objective", - "user_outcome", - "verified_context", - "write_scope", - "forbidden_scope", - "invariants", - "non_goals", - "acceptance_criteria", - "verification", - "pause_conditions" -]New value: +[ + "schema_version", + "objective", + "user_outcome", + "write_scope", + "acceptance_criteria", + "verification" +] - added
Input schema / properties / execution_timeout_secondsAdded value: +{ + "description": "Task execution deadline. New fast-lane tasks default to 600 seconds and deep-lane tasks to 3600 seconds; omitted resumes preserve the stored value. A wait timeout never cancels the worker.", + "maximum": 14400, + "minimum": 60, + "type": "integer" +} - added
Input schema / properties / path_baseAdded value: +{ + "description": "Defaults to cwd for new tasks; omitted legacy resumes preserve stored semantics.", + "enum": [ + "cwd", + "repository" + ], + "type": "string" +} - added
Input schema / properties / pause_reason_hashAdded value: +{ + "pattern": "^[0-9a-f]{64}$", + "type": "string" +} - added
Input schema / properties / pause_revisionAdded value: +{ + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / reasoning_effortAdded value: +{ + "description": "Reasoning effort; low is the lowest supported value for new tasks.", + "enum": [ + "low", + "medium", + "high", + "max" + ], + "type": "string" +} - added
Input schema / properties / wait_modeAdded value: +{ + "default": "review", + "enum": [ + "review", + "background" + ], + "type": "string" +} - added
Input schema / properties / wait_timeout_secondsAdded value: +{ + "default": 600, + "maximum": 600, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / worker_laneAdded value: +{ + "description": "Worker execution lane. fast (default) is a direct-edit Reasonix session without Goal/AutoResearch/subagents; deep is an explicit long-horizon Goal session. Omitted resumes preserve the stored lane.", + "enum": [ + "fast", + "deep" + ], + "type": "string" +} - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Output schema / properties / active_interactionAdded value: +{ + "additionalProperties": false, + "properties": { + "createdAt": { + "type": "string" + }, + "id": { + "type": "string" + }, + "kind": { + "enum": [ + "permission", + "input" + ], + "type": "string" + }, + "request": { + "additionalProperties": {}, + "type": "object" + }, + "resolvedAt": { + "type": "string" + }, + "response": { + "additionalProperties": {}, + "type": "object" + }, + "status": { + "enum": [ + "pending", + "resolved", + "cancelled" + ], + "type": "string" + } + }, + "required": [ + "id", + "kind", + "status", + "createdAt", + "request" + ], + "type": "object" +} - added
Output schema / properties / branchAdded value: +{ + "minLength": 1, + "type": "string" +} - added
Output schema / properties / changed_filesAdded value: +{ + "items": { + "maxLength": 1024, + "type": "string" + }, + "maxItems": 256, + "type": "array" +} - added
Output schema / properties / commit_hashAdded value: +{ + "pattern": "^[0-9a-f]{40,64}$", + "type": "string" +} - added
Output schema / properties / contract_hashAdded value: +{ + "pattern": "^[0-9a-f]{64}$", + "type": "string" +} - added
Output schema / properties / diffAdded value: +{ + "maxLength": 12288, + "type": "string" +} - added
Output schema / properties / diff_statAdded value: +{ + "maxLength": 4096, + "type": "string" +} - added
Output schema / properties / effective_reasoning_effortAdded value: +{ + "enum": [ + "minimal", + "low", + "medium", + "high", + "max" + ], + "type": "string" +} - added
Output schema / properties / execution_timeout_secondsAdded value: +{ + "maximum": 14400, + "minimum": 60, + "type": "integer" +} - added
Output schema / properties / inspect_requiredAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / integration_commandAdded value: +{ + "maxLength": 1024, + "minLength": 1, + "type": "string" +} - added
Output schema / properties / pause_reason_hashAdded value: +{ + "pattern": "^[0-9a-f]{64}$", + "type": "string" +} - added
Output schema / properties / pause_revisionAdded value: +{ + "minimum": 0, + "type": "integer" +} - added
Output schema / properties / phaseAdded value: +{ + "type": "string" +} - added
Output schema / properties / reasonAdded value: +{ + "type": "string" +} - added
Output schema / properties / reasonix_session_modeAdded value: +{ + "minLength": 1, + "type": "string" +} - added
Output schema / properties / reasonix_work_modeAdded value: +{ + "minLength": 1, + "type": "string" +} - added
Output schema / properties / repair_roundsAdded value: +{ + "minimum": 0, + "type": "integer" +} - added
Output schema / properties / repository_idAdded value: +{ + "minLength": 1, + "type": "string" +} - added
Output schema / properties / requested_reasoning_effortAdded value: +{ + "enum": [ + "minimal", + "low", + "medium", + "high", + "max" + ], + "type": "string" +} - added
Output schema / properties / required_review_criteriaAdded value: +{ + "items": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "maxItems": 1000, + "type": "array" +} - added
Output schema / properties / resume_requiredAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / review_diff_sha256Added value: +{ + "pattern": "^[0-9a-f]{64}$", + "type": "string" +} - added
Output schema / properties / review_revisionAdded value: +{ + "minimum": 0, + "type": "integer" +} - added
Output schema / properties / review_tree_hashAdded value: +{ + "pattern": "^[0-9a-f]{40}$", + "type": "string" +} - added
Output schema / properties / risksAdded value: +{ + "items": { + "maxLength": 2048, + "type": "string" + }, + "maxItems": 128, + "type": "array" +} - added
Output schema / properties / session_idAdded value: +{ + "minLength": 1, + "type": "string" +} - added
Output schema / properties / source_checkout_integratedAdded value: +{ + "const": false, + "type": "boolean" +} - added
Output schema / properties / source_collisionAdded value: +{ + "additionalProperties": false, + "properties": { + "baseCommit": { + "minLength": 1, + "type": "string" + }, + "checkpoint": { + "minLength": 1, + "type": "string" + }, + "committedPaths": { + "items": { + "type": "string" + }, + "type": "array" + }, + "detectedAt": { + "minLength": 1, + "type": "string" + }, + "dirtyPaths": { + "items": { + "type": "string" + }, + "type": "array" + }, + "overlappingPaths": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sourceHead": { + "minLength": 1, + "type": "string" + }, + "unavailable": { + "type": "boolean" + } + }, + "required": [ + "checkpoint", + "baseCommit", + "dirtyPaths", + "committedPaths", + "overlappingPaths", + "unavailable", + "detectedAt" + ], + "type": "object" +} - added
Output schema / properties / stateAdded value: +{ + "enum": [ + "provisioning", + "running", + "waiting_permission", + "waiting_input", + "paused", + "review_required", + "verifying", + "completed", + "commit_failed", + "failed", + "cancelled", + "closed" + ], + "type": "string" +} - added
Output schema / properties / summaryAdded value: +{ + "maxLength": 4096, + "type": "string" +} - added
Output schema / properties / task_idAdded value: +{ + "maxLength": 64, + "minLength": 1, + "type": "string" +} - added
Output schema / properties / timed_outAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / updated_atAdded value: +{ + "minLength": 1, + "type": "string" +} - added
Output schema / properties / usageAdded value: +{ + "additionalProperties": false, + "properties": { + "cacheHitRatio": { + "anyOf": [ + { + "maximum": 1, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ] + }, + "cacheHitTokens": { + "minimum": 0, + "type": "number" + }, + "cacheMissTokens": { + "minimum": 0, + "type": "number" + }, + "completionTokens": { + "minimum": 0, + "type": "number" + }, + "currency": { + "type": [ + "string", + "null" + ] + }, + "estimatedCost": { + "anyOf": [ + { + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ] + }, + "promptTokens": { + "minimum": 0, + "type": "number" + }, + "reasoningTokens": { + "minimum": 0, + "type": "number" + }, + "usageSource": { + "type": "string" + } + }, + "required": [ + "promptTokens", + "completionTokens", + "reasoningTokens", + "cacheHitTokens", + "cacheMissTokens", + "cacheHitRatio", + "estimatedCost", + "currency", + "usageSource" + ], + "type": "object" +} - added
Output schema / properties / worker_laneAdded value: +{ + "enum": [ + "fast", + "deep" + ], + "type": "string" +} - added
Output schema / properties / worktreeAdded value: +{ + "minLength": 1, + "type": "string" +} - added
Output schema / requiredAdded value: +[ + "task_id", + "state", + "phase", + "contract_hash", + "repository_id", + "branch", + "worktree", + "worker_lane", + "requested_reasoning_effort", + "effective_reasoning_effort", + "execution_timeout_seconds", + "source_checkout_integrated", + "repair_rounds", + "updated_at" +]
- Changed
reasonix_inspect8 fields changed- added
Input schema / properties / wait_untilAdded value: +{ + "default": "change", + "enum": [ + "change", + "review_required", + "interaction", + "terminal" + ], + "type": "string" +} - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Output schema / properties / next_cursorAdded value: +{ + "type": "string" +} - added
Output schema / properties / sectionsAdded value: +{ + "additionalProperties": false, + "properties": { + "acceptance_evidence": { + "anyOf": [ + { + "items": { + "additionalProperties": false, + "properties": { + "approved": { + "type": "boolean" + }, + "criterionId": { + "type": "string" + }, + "evidence": { + "enum": [ + "automated", + "review" + ], + "type": "string" + }, + "outputBytes": { + "minimum": 0, + "type": "integer" + }, + "sha256": { + "type": "string" + }, + "source": { + "type": "string" + } + }, + "required": [ + "criterionId", + "evidence", + "approved", + "source" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "string" + } + ] + }, + "changed_files": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ] + }, + "diff": { + "type": "string" + }, + "diff_stat": { + "type": "string" + }, + "events": { + "anyOf": [ + { + "items": { + "additionalProperties": false, + "properties": { + "data": {}, + "seq": { + "minimum": 0, + "type": "integer" + }, + "timestamp": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "seq", + "timestamp", + "type" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "string" + } + ] + }, + "interactions": { + "anyOf": [ + { + "items": { + "additionalProperties": false, + "properties": { + "createdAt": { + "type": "string" + }, + "id": { + "type": "string" + }, + "kind": { + "enum": [ + "permission", + "input" + ], + "type": "string" + }, + "request": { + "additionalProperties": {}, + "type": "object" + }, + "resolvedAt": { + "type": "string" + }, + "response": { + "additionalProperties": {}, + "type": "object" + }, + "status": { + "enum": [ + "pending", + "resolved", + "cancelled" + ], + "type": "string" + } + }, + "required": [ + "id", + "kind", + "status", + "createdAt", + "request" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "string" + } + ] + }, + "risks": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ] + }, + "status": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "branch": { + "minLength": 1, + "type": "string" + }, + "commit_hash": { + "pattern": "^[0-9a-f]{40,64}$", + "type": "string" + }, + "contract_hash": { + "pattern": "^[0-9a-f]{64}$", + "type": "string" + }, + "effective_reasoning_effort": { + "enum": [ + "minimal", + "low", + "medium", + "high", + "max" + ], + "type": "string" + }, + "execution_timeout_seconds": { + "maximum": 14400, + "minimum": 60, + "type": "integer" + }, + "integration_command": { + "maxLength": 1024, + "minLength": 1, + "type": "string" + }, + "pause_reason_hash": { + "pattern": "^[0-9a-f]{64}$", + "type": "string" + }, + "pause_revision": { + "minimum": 0, + "type": "integer" + }, + "phase": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "reasonix_session_mode": { + "minLength": 1, + "type": "string" + }, + "reasonix_work_mode": { + "minLength": 1, + "type": "string" + }, + "repair_rounds": { + "minimum": 0, + "type": "integer" + }, + "repository_id": { + "minLength": 1, + "type": "string" + }, + "requested_reasoning_effort": { + "enum": [ + "minimal", + "low", + "medium", + "high", + "max" + ], + "type": "string" + }, + "review_revision": { + "minimum": 0, + "type": "integer" + }, + "review_tree_hash": { + "pattern": "^[0-9a-f]{40}$", + "type": "string" + }, + "session_id": { + "minLength": 1, + "type": "string" + }, + "source_checkout_integrated": { + "const": false, + "type": "boolean" + }, + "source_collision": { + "additionalProperties": false, + "properties": { + "baseCommit": { + "minLength": 1, + "type": "string" + }, + "checkpoint": { + "minLength": 1, + "type": "string" + }, + "committedPaths": { + "items": { + "type": "string" + }, + "type": "array" + }, + "detectedAt": { + "minLength": 1, + "type": "string" + }, + "dirtyPaths": { + "items": { + "type": "string" + }, + "type": "array" + }, + "overlappingPaths": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sourceHead": { + "minLength": 1, + "type": "string" + }, + "unavailable": { + "type": "boolean" + } + }, + "required": [ + "checkpoint", + "baseCommit", + "dirtyPaths", + "committedPaths", + "overlappingPaths", + "unavailable", + "detectedAt" + ], + "type": "object" + }, + "state": { + "enum": [ + "provisioning", + "running", + "waiting_permission", + "waiting_input", + "paused", + "review_required", + "verifying", + "completed", + "commit_failed", + "failed", + "cancelled", + "closed" + ], + "type": "string" + }, + "task_id": { + "$ref": "#/properties/task_id" + }, + "updated_at": { + "minLength": 1, + "type": "string" + }, + "worker_lane": { + "enum": [ + "fast", + "deep" + ], + "type": "string" + }, + "worktree": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "task_id", + "state", + "phase", + "contract_hash", + "repository_id", + "branch", + "worktree", + "worker_lane", + "requested_reasoning_effort", + "effective_reasoning_effort", + "execution_timeout_seconds", + "source_checkout_integrated", + "repair_rounds", + "updated_at" + ], + "type": "object" + }, + { + "type": "string" + } + ] + }, + "summary": { + "type": "string" + }, + "usage": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "cacheHitRatio": { + "anyOf": [ + { + "maximum": 1, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ] + }, + "cacheHitTokens": { + "minimum": 0, + "type": "number" + }, + "cacheMissTokens": { + "minimum": 0, + "type": "number" + }, + "completionTokens": { + "minimum": 0, + "type": "number" + }, + "currency": { + "type": [ + "string", + "null" + ] + }, + "estimatedCost": { + "anyOf": [ + { + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ] + }, + "promptTokens": { + "minimum": 0, + "type": "number" + }, + "reasoningTokens": { + "minimum": 0, + "type": "number" + }, + "usageSource": { + "type": "string" + } + }, + "required": [ + "promptTokens", + "completionTokens", + "reasoningTokens", + "cacheHitTokens", + "cacheMissTokens", + "cacheHitRatio", + "estimatedCost", + "currency", + "usageSource" + ], + "type": "object" + }, + { + "type": "string" + } + ] + }, + "verification": { + "anyOf": [ + { + "items": { + "additionalProperties": false, + "properties": { + "argv": { + "items": { + "type": "string" + }, + "type": "array" + }, + "cwd": { + "type": "string" + }, + "exitCode": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "finishedAt": { + "type": "string" + }, + "id": { + "type": "string" + }, + "logPath": { + "type": "string" + }, + "outputBytes": { + "minimum": 0, + "type": "integer" + }, + "passed": { + "type": "boolean" + }, + "proves": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sha256": { + "type": "string" + }, + "startedAt": { + "type": "string" + }, + "timedOut": { + "type": "boolean" + } + }, + "required": [ + "id", + "argv", + "cwd", + "startedAt", + "finishedAt", + "exitCode", + "timedOut", + "passed", + "proves", + "logPath", + "sha256", + "outputBytes" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" +} - added
Output schema / properties / task_idAdded value: +{ + "maxLength": 64, + "minLength": 1, + "type": "string" +} - added
Output schema / properties / truncatedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / updated_atAdded value: +{ + "minLength": 1, + "type": "string" +} - added
Output schema / requiredAdded value: +[ + "task_id", + "sections", + "truncated", + "updated_at" +]
2 tool updates
v0.1.1- Changed
reasonix_control13 fields changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#" - added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / actionAdded value: +{ + "enum": [ + "steer", + "respond", + "cancel", + "finalize", + "close" + ], + "type": "string" +} - added
Input schema / properties / answerAdded value: +{ + "description": "Optional free-form answer for action respond; omit for other actions.", + "maxLength": 10000, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / approved_review_criteriaAdded value: +{ + "description": "Required when action is finalize; omit for other actions.", + "items": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "maxItems": 1000, + "type": "array" +} - added
Input schema / properties / commit_messageAdded value: +{ + "description": "Optional commit message for action finalize; omit for other actions.", + "maxLength": 5000, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / decisionAdded value: +{ + "description": "Required when action is respond; omit for other actions.", + "enum": [ + "allow", + "deny" + ], + "type": "string" +} - added
Input schema / properties / interaction_idAdded value: +{ + "description": "Required when action is respond; omit for other actions.", + "maxLength": 256, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / messageAdded value: +{ + "description": "Required when action is steer; omit for other actions.", + "maxLength": 20000, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / option_idAdded value: +{ + "description": "Optional offered option for action respond; omit for other actions.", + "maxLength": 1024, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / review_summaryAdded value: +{ + "description": "Required when action is finalize; omit for other actions.", + "maxLength": 20000, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / task_idAdded value: +{ + "maxLength": 64, + "minLength": 1, + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "task_id", + "action" +]
- Changed
reasonix_delegate3 fields changed- removed
Input schema / properties / contract / properties / verification / items / properties / argv / additionalItemsRemoved value: -{ - "maxLength": 4096, - "type": "string" -} - changed
Input schema / properties / contract / properties / verification / items / properties / argv / itemsPrevious value: -[ - { - "maxLength": 4096, - "minLength": 1, - "type": "string" - } -]New value: +{ + "maxLength": 4096, + "type": "string" +} - added
Input schema / properties / contract / properties / verification / items / properties / argv / maxItemsAdded value: +128
3 tool updates
v0.1.0-rc.1- First observed
reasonix_control - First observed
reasonix_delegate - First observed
reasonix_inspect
TDQS
Each tool targets a distinct phase of the task lifecycle: inspect for observation, delegate for creation, and control for lifecycle actions. There is no meaningful overlap; even control's recovery actions are clearly separate from inspection.
All tool names follow the exact same pattern of 'reasonix_' plus an imperative verb (inspect, delegate, control). This is perfectly consistent and predictable.
With three tools, the surface is minimal but complete for its stated purpose. Each tool is necessary and none are redundant; the narrow domain of delegating and managing isolated worker tasks does not require more tools.
The lifecycle is fully covered: creation via delegate, inspection via inspect, and all terminal/control actions (finalize, cancel, close, steer, respond) via control. Since tasks are immutable, there is no need for an update tool, and the set covers every operation needed for the domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A paid remote MCP for OpenAI Codex agent coordination MCP, built to return verdicts, receipts, usage
Remote MCP learning coach for coding agents.
A paid remote MCP for OpenAI Codex context compressor, built to return verdicts, receipts, usage log
A paid remote MCP for OpenAI Codex memory MCP, built to return verdicts, receipts, usage logs, and a
Related MCP Servers
- AlicenseAqualityBmaintenanceA project-local MCP bridge that allows Codex Desktop to plan tasks and OpenCode to execute them within the current project directory, with session reuse and native OpenCode background subagents.41MIT
- AlicenseAqualityBmaintenanceAn MCP server that lets OpenAI Codex delegate tasks to Google Gemini agents as isolated background workers, with Git worktree isolation, loop detection, and security boundary enforcement.71MIT
- AlicenseAqualityAmaintenanceAn MCP server that enables a supervising OpenAI Codex agent to delegate bounded implementation tasks to isolated worker threads with enforced file scopes and verification, optionally running in parallel git worktrees.57796MIT
- AlicenseNot gradedqualityBmaintenanceMCP server that lets Codex supervise Claude Code or DeepSeek Harness as workers in isolated Git worktrees, with a bridge_run/bridge_respond/bridge_apply workflow for task delegation and safe cherry-pick integration.16MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rixzkiye/codex-reasonix-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server