Skip to content

feat(mcp): pass through the Reasonix per-server startup_timeout_seconds - #2620

Merged
dyoshikawa merged 2 commits into
mainfrom
resolve-issue-2599-reasonix-mcp-startup-timeout
Aug 7, 2026
Merged

feat(mcp): pass through the Reasonix per-server startup_timeout_seconds#2620
dyoshikawa merged 2 commits into
mainfrom
resolve-issue-2599-reasonix-mcp-startup-timeout

Conversation

@dyoshikawa

Copy link
Copy Markdown
Owner

REASONIX_PLUGIN_FIELDS is a strict allowlist and rulesync owns the plugins key wholesale, so a hand-written startup_timeout_seconds was silently dropped on the next generate. It now round-trips as a passthrough field alongside call_timeout_seconds and tool_timeout_seconds.

Reasonix documents it as a per-server override of the global mcp_startup_timeout_seconds, capping the background launch/authorization/initialize/tools/list sequence, with 0 meaning defer to that global cap. A test covers the 0 case specifically, since a falsy-but-meaningful value is the easy thing to drop.

Also in this PR

Two stale prose spots claimed the exact Bash=<literal> form is "the only way to pre-authorize dynamic or nested Bash in headless reasonix run short of YOLO" - docs/reference/file-formats.md and the rawAllow comment in src/types/permissions.ts. That stopped being true in v1.19.0, which added the blanket [permissions] allow_dynamic_bash opt-in (SPEC: "lets an Allow fallback, including Auto, cover this class; explicit ask and deny rules retain precedence"). Both now mention it exists, while stating that authoring it through rulesync is unsupported.

Verified against SPEC.md: # startup_timeout_seconds = 60 # initialize + tools/list cap; 0 = global/default cap. Checked locally with the MCP e2e spec.

Part of #2599

Gaps 2 (the allow_dynamic_bash authoring shape) and 3 (the hook cwd canonical field) are design items and remain open.

🤖 Generated with Claude Code

REASONIX_PLUGIN_FIELDS is a strict allowlist, and rulesync owns the
plugins key wholesale, so a hand-written startup_timeout_seconds was
dropped on the next generate. Reasonix documents it as a per-server
override of the global mcp_startup_timeout_seconds, with 0 meaning defer
to that cap, so it now round-trips as a passthrough field alongside
call_timeout_seconds and tool_timeout_seconds.

Also correct two stale claims that the exact Bash=<literal> form is the
only way to pre-authorize dynamic or nested Bash in a headless run short
of YOLO: v1.19.0 added the allow_dynamic_bash opt-in. Authoring it
through rulesync remains unsupported.
…rkTimeout

Canonical networkTimeout does cover the same startup phase - Codex CLI
deep-maps it to startup_timeout_sec - so claiming no canonical equivalent
was wrong. The reason for passing through is the mismatch: canonical
timeouts are milliseconds against Reasonix's seconds, and Reasonix's
meaningful 0 has no canonical spelling. Vibe passes its own
startup_timeout_sec through for the same reason.

Also cover the 0 case on the export side, and narrow the Bash wording to
nested or indirect execution, which is the class SPEC 3.7 actually gates
behind a literal grant.
@dyoshikawa
dyoshikawa merged commit 5eda7e7 into main Aug 7, 2026
9 checks passed
@dyoshikawa
dyoshikawa deleted the resolve-issue-2599-reasonix-mcp-startup-timeout branch August 7, 2026 16:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants