Skip to content

coding_agent_timeout_contract

github-actions[bot] edited this page Sep 20, 2026 · 1 revision

Coding-Agent Timeout Contract

Coding-agent execution has several independent timeout layers. They must not be treated as one generic "agent timeout": each layer has a different owner and recovery action.

Effective runtime matrix

Layer Claude Code Codex CLI Cursor CLI Pi CLI Owner
Provider turn deadline none none none none Workflow/scheduler caller
Provider MCP-call control CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT = 90m mcp_servers.api-bridge.tool_timeout_sec = 90m no documented control no documented control CLI provider
mcpbridge HTTP timeout 5m ordinary, 90m long-running same same same mcpbridge
Server tool timeout 90m in desktop runtime same same same TOOL_EXECUTION_TIMEOUT
Persistent tmux idle retention 3h 3h 3h 3h Provider adapter
Initial prompt readiness 5m inactivity by default 10m inactivity, 90m absolute 5m 5m Provider adapter

The shared 90-minute MCP value is configured by CODING_AGENT_MCP_TOOL_TIMEOUT. Invalid, zero, or negative values fall back to 90 minutes so the final stuck-call guard cannot be accidentally disabled.

Required behavior

  1. Workflow and scheduler contexts own the business deadline. Provider adapters do not impose a shorter fixed turn deadline on an active tmux process.
  2. call_sub_agent and call_generic_agent are durable asynchronous starts. They return an execution_id immediately, so they do not hold an MCP request open for the child runtime.
  3. HTTP request cancellation is authoritative. Stopping a parent cancels an in-flight bridge/custom/virtual request; handlers must not replace the request context with context.Background().
  4. The 90-minute MCP value is only a final backstop for a silent or stuck call. It is not a normal completion signal and is not extended by tmux pane text.
  5. Timeout and cancellation errors identify the firing layer, tool, session, and configured timeout so operators can distinguish a bridge timeout from a workflow or prompt-readiness timeout.

Provider notes

  • Claude Code: the supported client watchdog is supplied in milliseconds.
  • Codex CLI: the bridge server's tool_timeout_sec is supplied in seconds.
  • Cursor CLI: current official CLI configuration documents MCP discovery and management but no MCP-call timeout setting. Do not invent an undocumented flag; rely on cancellation and mcpbridge.
  • Pi CLI: the current Pi settings and MCP adapter expose no MCP-call timeout setting. Do not invent an undocumented setting; rely on cancellation and mcpbridge.

Verification

Fast contract tests cover:

  • the shared default and override policy;
  • Claude millisecond and Codex second conversion;
  • cancellation propagation through custom and virtual per-tool HTTP routes;
  • deterministic timeout cleanup for a silent custom tool;
  • bridge timeout/cancellation diagnostics.

The real tmux path is exercised by mcp-agent test coding-agent-chat-e2e. It uses a temporary chat workspace, calls execute_shell_command through the actual api-bridge, waits through a silent sleep, sends live input during an active tool call, and stops the session during cleanup. Run it once per active provider when provider credentials are available.

Clone this wiki locally