Status: Accepted direction; implementation remains transitional
Date: 2026-07-27
This is the portable, non-UI contract. A UI may progressively enhance it, but must not own correctness, task persistence, or recovery.
- Public tool names stay unversioned. Git commits record experiments and
changes; do not create
_v2names for contract experiments. - The core surface is
run_task,check_task,get_task, andlist_tasks.list_tasksis the aggregate view of active work. run_taskreturns promptly withjobId/taskId,sessionKey, status, continuation metadata, and an exact next action.check_taskowns server-side waiting. The default wait target is 45 seconds and callers may override it. Ordinary progress does not end a wait early; terminal or actionable states do (completed,completed_no_summary,error,blocked,needs_human).- A wait timeout is non-terminal. Return
continuePolling: trueand direct the caller to invokecheck_taskagain immediately with the same identifiers. Never create a duplicate task because polling timed out. get_taskis an immediate snapshot for diagnostics, manual reads, and UI. Task identity is split deliberately:taskIdidentifies one execution;sessionKeyidentifies conversational continuity. Multiple tasks and sessions may coexist.- Rich snapshots should expose elapsed time, phase, latest meaningful update, poll count, and a compact timeline/summary when available. Add request-level telemetry for tool name, job/task ID, poll number, wait duration, returned status, request duration, duplicate-job detection, and terminal retrieval.
- MCP safety/idempotency annotations classify intent only; they are not behavioral guarantees.
- Current evidence is that ChatGPT can repeatedly poll long runs successfully, while the Activity UI can make a healthy 10+ minute run appear stuck. The portable contract must therefore remain usable with UI absent.
- UI exploration is reopened as optional progressive enhancement. The server remains authoritative, and UI behavior must have a non-UI fallback.
The current checkout still exposes compatibility behavior, including the existing long-poll defaults and implementation-specific status shapes. The record above is the target decision boundary for the next experiment; it is not a claim that production has already been migrated. The next evidence-producing step is a pinned draft-app comparison of the existing wait path, a bounded hybrid wait, and immediate snapshots with request/task telemetry and duplicate detection.
- ClawConnect repository
- A non-public incident report on a ChatGPT polling stall, and a non-public discussion thread, both of which produced the decisions above. Neither is reachable from this repository and neither is required to apply the contract.