{
  "revision": "cb602e117a42b234fe18531d6b3dde6ca06a7f77",
  "runtime_version": "v0.99.476-dev (cb602e117)",
  "generated_at": "2026-10-31T15:29:02.521Z",
  "scope": "Linux normal-session model-facing built-in tool definitions from the filtered tools:full export. Includes optional codemode and integration tools. Excludes hidden/internal tools, external MCP server tools, and self-development tools. Session configuration and provider transforms can change the actual tool surface. The source revision is the runtime base commit; runtime_version records whether the build was dirty.",
  "tools": [
    {
      "name": "agentgrep",
      "description": "Search code and file names. Defaults to grep mode when mode is omitted.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "file": {
            "description": "Single file to inspect. Required for outline.",
            "type": "string"
          },
          "glob": {
            "description": "Optional file glob filter such as **/*.rs. Omit to search everything.",
            "type": "string"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "max_files": {
            "description": "Maximum number of files to return for find/trace-style modes.",
            "type": "integer"
          },
          "max_regions": {
            "description": "Maximum number of matching regions to return.",
            "type": "integer"
          },
          "mode": {
            "description": "Mode: grep (default), find (file names), outline (one file), trace (relationship DSL).",
            "enum": [
              "grep",
              "find",
              "outline",
              "trace"
            ],
            "type": "string"
          },
          "path": {
            "description": "Directory or file to search, relative to the workspace. Omit to search the whole workspace.",
            "type": "string"
          },
          "paths_only": {
            "description": "Return only matching paths instead of match excerpts where supported.",
            "type": "boolean"
          },
          "query": {
            "description": "Search query. Required for grep (literal unless regex=true); optional ranking terms for find.",
            "type": "string"
          },
          "regex": {
            "description": "In grep mode, treat query as a regex. Defaults to false (literal).",
            "type": "boolean"
          },
          "terms": {
            "description": "Trace DSL terms, e.g. [\"subject:auth_status\", \"relation:rendered\"]. Not for grep/find; use query.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "type": {
            "description": "Optional ripgrep file type filter, such as rs, py, js, ts, or md.",
            "type": "string"
          }
        },
        "required": [
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "apply_patch",
      "description": "Apply a multi-file patch (Codex *** Begin Patch or unified diff).",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "patch_text": {
            "description": "Patch text.",
            "type": "string"
          }
        },
        "required": [
          "patch_text",
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "bash",
      "description": "Run bash. Prefer agentgrep/rg. Include hidden/ignored with --hidden --no-ignore.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "command": {
            "description": "The bash command to execute. Put large temp files under `$JCODE_SCRATCH_DIR`, not `/tmp`.",
            "type": "string"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "justification": {
            "description": "Only when re-issuing a command the destructive gate refused; explain which user request it serves.",
            "type": "string"
          },
          "notify": {
            "description": "Notify on completion.",
            "type": "boolean"
          },
          "run_in_background": {
            "description": "Run in background. Emit `JCODE_PROGRESS {json}` lines for progress reporting.",
            "type": "boolean"
          },
          "stall_wake_seconds": {
            "description": "With run_in_background: wake after N seconds without output/progress (min 30). For jobs that may hang.",
            "type": "integer"
          },
          "timeout": {
            "description": "Timeout in MILLISECONDS (not seconds), e.g. 600000 = 10min; kills with exit 124. Omit for no timeout.",
            "type": "integer"
          },
          "wake": {
            "description": "Wake on completion.",
            "type": "boolean"
          }
        },
        "required": [
          "command",
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "batch",
      "description": "Run independent tool calls in parallel (1-10). Each tool_calls entry contains tool, intent, and the tool's normal arguments as sibling fields. Do not batch dependent calls or nest batch.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "tool_calls": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "intent": {
                  "description": "Required short label shown in the UI: why this call is being made.",
                  "type": "string"
                },
                "tool": {
                  "description": "Tool name.",
                  "type": "string"
                }
              },
              "required": [
                "tool",
                "intent"
              ],
              "type": "object"
            },
            "maxItems": 10,
            "minItems": 1,
            "type": "array"
          }
        },
        "required": [
          "tool_calls",
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "bg",
      "description": "Manage background tasks. Prefer action='wait' over polling or sleeping.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "action": {
            "description": "Action. Prefer wait over polling; watch is an alias for delivery.",
            "enum": [
              "list",
              "status",
              "output",
              "tail",
              "cancel",
              "cleanup",
              "watch",
              "delivery",
              "subscribe",
              "wait"
            ],
            "type": "string"
          },
          "dry_run": {
            "description": "For cleanup, report what would be removed without deleting.",
            "type": "boolean"
          },
          "graceful_timeout_ms": {
            "description": "For cancel, grace period for detached process termination before force kill.",
            "type": "integer"
          },
          "include_output_preview": {
            "description": "When wait returns, include a recent output preview. Failed tasks include a preview by default.",
            "type": "boolean"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "latest": {
            "description": "Use latest matching task when task_id is omitted.",
            "type": "boolean"
          },
          "lines": {
            "description": "Alias for tail_lines.",
            "type": "integer"
          },
          "max_age_hours": {
            "description": "Cleanup age in hours.",
            "type": "integer"
          },
          "max_wait_seconds": {
            "description": "For wait: max seconds to block. Default 60, cap 3600, 0 = immediate check.",
            "type": "integer"
          },
          "notify": {
            "description": "When using delivery/watch/subscribe, whether to notify on completion. Defaults to true.",
            "type": "boolean"
          },
          "return_on_progress": {
            "description": "For wait: return on the first progress/checkpoint event too. Defaults to true.",
            "type": "boolean"
          },
          "session_only": {
            "description": "Restrict list/implicit selection to current session.",
            "type": "boolean"
          },
          "stall_wake_seconds": {
            "description": "For delivery/watch: also wake after N seconds without output/progress (min 30). For jobs that may hang.",
            "type": "integer"
          },
          "status_filter": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            ],
            "description": "Status filter string or array: running, completed, failed, superseded, terminal, all."
          },
          "tail_lines": {
            "description": "Return only the last N output lines for output/tail/wait preview.",
            "type": "integer"
          },
          "task_id": {
            "description": "Task ID.",
            "type": "string"
          },
          "task_ids": {
            "description": "Task IDs for multi-task wait/status.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "wait_mode": {
            "description": "For multi-task wait, return on any completion, all completions, or first failure. Defaults to any.",
            "enum": [
              "any",
              "all",
              "first_failure"
            ],
            "type": "string"
          },
          "wake": {
            "description": "When using delivery/watch/subscribe, whether to wake on completion. Defaults to true.",
            "type": "boolean"
          }
        },
        "required": [
          "action",
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "browser",
      "description": "Control the browser using direct actions. Check action='status' first; run setup only if not ready. Browser handoff is disabled for this process. Complete browser tasks with direct actions in the requested tab.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "action": {
            "description": "Action. Check status first and run setup only when not ready. Use direct browser actions in the requested tab. Handoff is disabled for this process.",
            "enum": [
              "status",
              "setup",
              "list_tabs",
              "new_tab",
              "select_tab",
              "get_active_tab",
              "list_frames",
              "open",
              "snapshot",
              "get_content",
              "interactables",
              "click",
              "type",
              "fill_form",
              "select",
              "wait",
              "screenshot",
              "eval",
              "scroll",
              "upload",
              "press",
              "provider_command"
            ],
            "type": "string"
          },
          "all_frames": {
            "type": "boolean"
          },
          "behavior": {
            "type": "string"
          },
          "browser": {
            "description": "Browser. Omit or use auto for the user's detected browser.",
            "enum": [
              "auto",
              "firefox",
              "chrome",
              "chromium",
              "edge",
              "brave",
              "safari"
            ],
            "type": "string"
          },
          "clear": {
            "type": "boolean"
          },
          "contains": {
            "type": "string"
          },
          "fields": {
            "description": "Form fields.",
            "items": {
              "properties": {
                "checked": {
                  "type": "boolean"
                },
                "selector": {
                  "type": "string"
                },
                "value": {
                  "type": "string"
                }
              },
              "required": [
                "selector"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "focus": {
            "type": "boolean"
          },
          "format": {
            "description": "Format.",
            "enum": [
              "annotated",
              "text",
              "textFast",
              "html",
              "title"
            ],
            "type": "string"
          },
          "frame_id": {
            "type": "integer"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "key": {
            "type": "string"
          },
          "new_tab": {
            "description": "Create/bind a tab with url. Open defaults true without tab_id. False reuses the current tab.",
            "type": "boolean"
          },
          "page_world": {
            "type": "boolean"
          },
          "params": {
            "description": "Raw provider params.",
            "type": "object"
          },
          "path": {
            "type": "string"
          },
          "position": {
            "type": "string"
          },
          "provider_action": {
            "description": "Provider command name.",
            "type": "string"
          },
          "script": {
            "type": "string"
          },
          "scroll_to": {
            "properties": {
              "x": {
                "type": "number"
              },
              "y": {
                "type": "number"
              }
            },
            "type": "object"
          },
          "selector": {
            "type": "string"
          },
          "submit": {
            "type": "boolean"
          },
          "tab_id": {
            "type": "integer"
          },
          "text": {
            "type": "string"
          },
          "timeout_ms": {
            "type": "integer"
          },
          "url": {
            "type": "string"
          },
          "wait": {
            "type": "boolean"
          },
          "window_id": {
            "description": "Scope the action to one browser window when multiple agents share the browser.",
            "type": "integer"
          },
          "x": {
            "type": "number"
          },
          "y": {
            "type": "number"
          }
        },
        "required": [
          "action",
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "calendar",
      "description": "Use Google Calendar: list calendars, view, create, update, and delete events.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "action": {
            "description": "Action. list defaults to the next 7 days. quick_add parses text like 'Lunch tomorrow 1pm'.",
            "enum": [
              "calendars",
              "list",
              "get",
              "create",
              "quick_add",
              "update",
              "delete"
            ],
            "type": "string"
          },
          "attendees": {
            "description": "Guest emails. Replaces the guest list on update.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "calendar_id": {
            "description": "Calendar ID from 'calendars'. Default: primary.",
            "type": "string"
          },
          "confirmed": {
            "description": "Confirm delete or emailing guests.",
            "type": "boolean"
          },
          "description": {
            "type": "string"
          },
          "end": {
            "description": "Same formats as start. Default: 30 minutes after start, or the next day for all-day.",
            "type": "string"
          },
          "event_id": {
            "type": "string"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "location": {
            "type": "string"
          },
          "max_results": {
            "type": "integer"
          },
          "query": {
            "description": "Free-text search for list.",
            "type": "string"
          },
          "reminder_minutes": {
            "description": "Popup reminders, minutes before start. 0 = at start. [] = no reminders. Omit for calendar defaults.",
            "items": {
              "type": "integer"
            },
            "type": "array"
          },
          "send_updates": {
            "description": "Email guests about the change. Default none. Anything else needs confirmed: true.",
            "enum": [
              "none",
              "all",
              "externalOnly"
            ],
            "type": "string"
          },
          "start": {
            "description": "RFC 3339, local YYYY-MM-DDTHH:MM (time_zone or calendar zone), or YYYY-MM-DD all-day.",
            "type": "string"
          },
          "summary": {
            "description": "Event title.",
            "type": "string"
          },
          "text": {
            "description": "Text for quick_add.",
            "type": "string"
          },
          "time_max": {
            "description": "List window end. Default 7 days after time_min.",
            "type": "string"
          },
          "time_min": {
            "description": "List window start. Default now.",
            "type": "string"
          },
          "time_zone": {
            "description": "IANA zone for local start/end, e.g. America/Los_Angeles.",
            "type": "string"
          }
        },
        "required": [
          "action",
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "codemode",
      "description": "Run sandboxed JavaScript to chain, filter, or parallelize tool calls, including MCP. Supply an async function body using await/return; only returned values and console.log reach the conversation.\nawait tools.<name>(args) or callTool(name, args) uses normal tool arguments; JSON output becomes objects, other output stays text, and failures throw. Use Promise.all for independent calls.\nlistTools(filter?) lists names/descriptions; describeTool(name) gives the schema. Inspect these when unsure. store(key, value), load(key), storedKeys() persist JSON within this session.\nNo direct filesystem, network, timers, or modules. Limits: 64 MB heap, 300 s, 2000 tool calls per run.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "code": {
            "description": "Body of an async JavaScript function. Use await and return.",
            "type": "string"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          }
        },
        "required": [
          "code",
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "compile_remote",
      "description": "Compile in an isolated Linux sandbox using Jcode subscription cloud-compute credits (shared with cloud agents). Uploads eligible source files and returns compiler output and metered usage. Requires a Jcode subscription; use action=status to check access and credits. Use only when the user has requested remote builds or authorized source sharing. Failed builds also consume credits. No automatic top-ups.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "action": {
            "description": "compile (default) uploads source and spends credits. status checks access without uploading.",
            "enum": [
              "compile",
              "status"
            ],
            "type": "string"
          },
          "command": {
            "description": "Remote Linux build command, e.g. cargo check. Required for compile. Never include secrets.",
            "maxLength": 8192,
            "type": "string"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "path": {
            "description": "Git repo root relative to workspace (default cwd). Uploads tracked/untracked non-ignored files.",
            "type": "string"
          },
          "timeout_seconds": {
            "description": "Build deadline in seconds, default 300. Credits reserved up front, settled by measured usage.",
            "maximum": 600,
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "conversation_search",
      "description": "Search conversation history.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "query": {
            "description": "Search query.",
            "type": "string"
          },
          "stats": {
            "description": "Return stats.",
            "type": "boolean"
          },
          "turns": {
            "description": "Turn range.",
            "properties": {
              "end": {
                "description": "End turn.",
                "type": "integer"
              },
              "start": {
                "description": "Start turn.",
                "type": "integer"
              }
            },
            "required": [
              "start",
              "end"
            ],
            "type": "object"
          }
        },
        "required": [
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "edit",
      "description": "Atomically edit a file using a nonempty array of exact replacements.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "edits": {
            "description": "Required replacements in order. Each old_string must match once unless replace_all is set.",
            "items": {
              "properties": {
                "new_string": {
                  "description": "Replacement text.",
                  "type": "string"
                },
                "old_string": {
                  "description": "Exact text to replace.",
                  "type": "string"
                },
                "replace_all": {
                  "description": "Replace every match.",
                  "type": "boolean"
                }
              },
              "required": [
                "old_string",
                "new_string"
              ],
              "type": "object"
            },
            "minItems": 1,
            "type": "array"
          },
          "file_path": {
            "description": "File path.",
            "type": "string"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "new_string": {
            "description": "Single-edit shorthand: replacement text.",
            "type": "string"
          },
          "old_string": {
            "description": "Single-edit shorthand: exact text to replace. Omit when using edits.",
            "type": "string"
          },
          "replace_all": {
            "description": "Single-edit shorthand: replace every match.",
            "type": "boolean"
          }
        },
        "required": [
          "file_path",
          "edits",
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "gmail",
      "description": "Use Gmail.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "action": {
            "description": "Action. 'connect' runs browser OAuth. Revise drafts with 'update_draft' + draft_id, not a new draft.",
            "enum": [
              "connect",
              "search",
              "read",
              "list",
              "draft",
              "update_draft",
              "list_drafts",
              "delete_draft",
              "send",
              "send_draft",
              "threads",
              "thread",
              "labels",
              "trash",
              "modify_labels"
            ],
            "type": "string"
          },
          "add_labels": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "attachments": {
            "description": "Absolute file paths to attach (for draft/send actions).",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "bcc": {
            "description": "Comma-separated Bcc addresses. On update_draft, omit to keep, \"\" to clear.",
            "type": "string"
          },
          "body": {
            "type": "string"
          },
          "cc": {
            "description": "Comma-separated Cc addresses (draft/send/update_draft).",
            "type": "string"
          },
          "confirmed": {
            "description": "Confirm.",
            "type": "boolean"
          },
          "draft_id": {
            "type": "string"
          },
          "in_reply_to": {
            "type": "string"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "label_ids": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "max_results": {
            "type": "integer"
          },
          "message_id": {
            "type": "string"
          },
          "query": {
            "type": "string"
          },
          "remove_labels": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "subject": {
            "type": "string"
          },
          "thread_id": {
            "type": "string"
          },
          "to": {
            "type": "string"
          }
        },
        "required": [
          "action",
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "integration_tools",
      "description": "Call this before using any product, service, dev tool, API, or data source you don't already have a tool for. Catalog tools have integrated with this agent for seamless setup. Use a built-in tool directly when available. Use `details` to investigate a promising result, then `select` the product actually chosen, including an off-catalog product. Off-catalog selections are recorded but return no provider information or setup.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "action": {
            "description": "Phase: search, details investigates one without selecting it, select (with setup), suggest.",
            "enum": [
              "search",
              "details",
              "select",
              "suggest"
            ],
            "type": "string"
          },
          "category": {
            "description": "Missing capability category; infer it from the user's goal.",
            "enum": [
              "payments",
              "git",
              "code-review",
              "databases",
              "browser-automation",
              "deployment",
              "observability",
              "authentication",
              "security",
              "storage",
              "analytics",
              "web-search",
              "web-data",
              "financial-data",
              "cloud-infrastructure",
              "compliance-and-privacy",
              "integration-platforms",
              "email-messaging",
              "ai-models",
              "other"
            ],
            "type": "string"
          },
          "gap_evidence": {
            "description": "Which search results were close and why they did not fit. Maintainers only.",
            "maxLength": 500,
            "type": "string"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "investigation_goal": {
            "description": "For details: the primary question the investigation should resolve.",
            "enum": [
              "capability_fit",
              "compatibility",
              "implementation_method",
              "setup_effort",
              "pricing",
              "security_compliance",
              "reliability",
              "migration_feasibility",
              "documentation_clarity"
            ],
            "type": "string"
          },
          "prior_request_id": {
            "description": "For details or suggest: the request ID returned by the preceding search in this category.",
            "type": "string"
          },
          "product_name": {
            "description": "Required only for a known_product suggestion. Public product, package, service, or MCP name.",
            "maxLength": 100,
            "minLength": 2,
            "type": "string"
          },
          "product_url": {
            "description": "Optional public HTTPS URL for a known_product suggestion. Never include credentials or private URLs.",
            "maxLength": 500,
            "type": "string"
          },
          "query": {
            "description": "Capability summary. May be shared with integration providers; never secrets or personal data.",
            "maxLength": 500,
            "minLength": 20,
            "type": "string"
          },
          "reason": {
            "description": "Why the candidate is relevant, or why results were unsuitable. Never include private data.",
            "maxLength": 2000,
            "minLength": 40,
            "type": "string"
          },
          "requirements": {
            "description": "For details or suggest: public constraints the integration should satisfy.",
            "items": {
              "maxLength": 240,
              "minLength": 3,
              "type": "string"
            },
            "maxItems": 8,
            "type": "array"
          },
          "suggestion_kind": {
            "description": "For suggest: known_product only when confident the public product exists, else capability_gap.",
            "enum": [
              "known_product",
              "capability_gap"
            ],
            "type": "string"
          },
          "tool": {
            "description": "Product name. Off-catalog selections are recorded without provider information.",
            "maxLength": 100,
            "minLength": 2,
            "type": "string"
          },
          "topics": {
            "description": "For details: optional sections to prioritize in the agent-friendly brief.",
            "items": {
              "enum": [
                "capabilities",
                "setup",
                "authentication",
                "limitations",
                "pricing",
                "security",
                "examples"
              ],
              "type": "string"
            },
            "maxItems": 7,
            "type": "array",
            "uniqueItems": true
          },
          "work_relevance": {
            "description": "For details: how closely this candidate relates to the current work.",
            "enum": [
              "blocking_requirement",
              "core_requirement",
              "likely_requirement",
              "optional_improvement",
              "alternative_candidate",
              "future_consideration"
            ],
            "type": "string"
          }
        },
        "required": [
          "category",
          "query",
          "reason",
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "jcode_docs",
      "description": "Search bundled Jcode docs. Use first for questions about Jcode itself.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "action": {
            "description": "Search documentation (default), read one document, or list bundled documents.",
            "enum": [
              "search",
              "read",
              "list"
            ],
            "type": "string"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "limit": {
            "description": "Maximum search results. Defaults to 5.",
            "maximum": 10,
            "minimum": 1,
            "type": "integer"
          },
          "path": {
            "description": "Exact bundled path returned by search/list. Required for read.",
            "type": "string"
          },
          "query": {
            "description": "Words or question to search for. Required for search.",
            "type": "string"
          }
        },
        "required": [
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "maintainer_feedback",
      "description": "Send product feedback to Jcode's maintainer. Respects telemetry settings.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "category": {
            "description": "Kind of feedback.",
            "enum": [
              "bug",
              "praise",
              "suggestion",
              "usability",
              "other"
            ],
            "type": "string"
          },
          "details": {
            "description": "Optional reproduction steps or expected versus actual behavior. Never include private data.",
            "maxLength": 1500,
            "minLength": 1,
            "type": "string"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "origin": {
            "description": "Whether this reflects the user's words, the agent's observation, or both.",
            "enum": [
              "user",
              "agent",
              "mixed"
            ],
            "type": "string"
          },
          "summary": {
            "description": "Self-contained maintainer-facing summary. Paraphrase rather than quoting the user.",
            "maxLength": 240,
            "minLength": 1,
            "type": "string"
          },
          "user_confirmed": {
            "description": "True only if the user approved sharing user-originated feedback. Agent observations may use false.",
            "type": "boolean"
          }
        },
        "required": [
          "category",
          "origin",
          "user_confirmed",
          "summary",
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "mcp",
      "description": "Search and call MCP (Model Context Protocol) tools, or manage servers. Search returns tool names and input schemas. Interactive OAuth login is CLI-only: `jcode mcp login <configured-server>`.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "action": {
            "description": "Action.",
            "enum": [
              "search",
              "call",
              "list",
              "connect",
              "disconnect",
              "reload",
              "status",
              "logout"
            ],
            "type": "string"
          },
          "args": {
            "description": "Command args.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "arguments": {
            "additionalProperties": true,
            "description": "Call: arguments matching the discovered input schema.",
            "type": "object"
          },
          "command": {
            "description": "Stdio server command. Mutually exclusive with url.",
            "type": "string"
          },
          "env": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "Server env.",
            "type": "object"
          },
          "headers": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "HTTP headers for an ad hoc remote connect. A static Authorization header overrides stored OAuth credentials.",
            "type": "object"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "query": {
            "description": "Search: optional name or description keywords.",
            "type": "string"
          },
          "server": {
            "description": "Server name. Optional exact filter for search, required for call.",
            "type": "string"
          },
          "tool": {
            "description": "Call: required raw tool name returned by search.",
            "type": "string"
          },
          "transport": {
            "description": "Ad hoc transport. Remote URLs default to Streamable HTTP with legacy SSE fallback.",
            "enum": [
              "stdio",
              "http",
              "streamable-http",
              "sse"
            ],
            "type": "string"
          },
          "url": {
            "description": "HTTP(S) MCP endpoint for an ad hoc remote connect, or OAuth status/logout. Omit command/url to connect a configured server by name.",
            "type": "string"
          }
        },
        "required": [
          "action",
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "memory",
      "description": "Manage memory.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "action": {
            "description": "Action.",
            "enum": [
              "remember",
              "recall",
              "search",
              "list",
              "forget",
              "tag",
              "link",
              "related"
            ],
            "type": "string"
          },
          "category": {
            "enum": [
              "fact",
              "preference",
              "entity",
              "correction"
            ],
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "from_id": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "limit": {
            "description": "Max results for recall, search, or list. Zero returns no results. Recall defaults to 10.",
            "minimum": 0,
            "type": "integer"
          },
          "query": {
            "type": "string"
          },
          "scope": {
            "enum": [
              "project",
              "global",
              "all"
            ],
            "type": "string"
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "to_id": {
            "type": "string"
          }
        },
        "required": [
          "action",
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "open",
      "description": "Open or reveal a file, folder, or URL for the user.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "action": {
            "description": "Open action. Use 'open' to open the target or 'reveal' to show it in the file manager.",
            "enum": [
              "open",
              "reveal"
            ],
            "type": "string"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "target": {
            "description": "Open target.",
            "type": "string"
          }
        },
        "required": [
          "target",
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "panel",
      "description": "Open and manage desktop panels from Markdown content or a Markdown/PDF file.",
      "input_schema": {
        "additionalProperties": false,
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "action": {
            "default": "spawn",
            "description": "Default spawn. Spawn/update need content or file_path. Focus/close need panel_id.",
            "enum": [
              "spawn",
              "update",
              "focus",
              "close",
              "list"
            ],
            "type": "string"
          },
          "content": {
            "description": "Markdown for spawn/update, mutually exclusive with file_path.",
            "type": "string"
          },
          "file_path": {
            "description": "Markdown/PDF path for spawn/update, relative to cwd. Exclusive with content.",
            "type": "string"
          },
          "focus": {
            "description": "Focus after spawn/update. Defaults true for spawn and false for update.",
            "type": "boolean"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "panel_id": {
            "description": "Same-session panel ID for update/focus/close. Omit for spawn.",
            "type": "string"
          },
          "title": {
            "description": "Panel title for spawn/update.",
            "type": "string"
          }
        },
        "required": [
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "read",
      "description": "Read a file. Supports text files, image files, and PDFs.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "file_path": {
            "description": "Path to a file.",
            "type": "string"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "limit": {
            "description": "Max text lines to read. Default 5000.",
            "type": "integer"
          },
          "start_line": {
            "description": "1-based start line for text files.",
            "type": "integer"
          }
        },
        "required": [
          "file_path",
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "schedule",
      "description": "Schedule independent future tasks. For blocked todos, use todo external_blocker.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "action": {
            "description": "Action to perform. Defaults to create for backwards compatibility.",
            "enum": [
              "create",
              "list",
              "cancel"
            ],
            "type": "string"
          },
          "background_context": {
            "description": "Optional background context for the scheduled task.",
            "type": "string"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "priority": {
            "enum": [
              "low",
              "normal",
              "high"
            ],
            "type": "string"
          },
          "relevant_files": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "schedule_id": {
            "description": "Scheduled task ID. Required for action=cancel.",
            "type": "string"
          },
          "success_criteria": {
            "type": "string"
          },
          "target": {
            "description": "Delivery target. Defaults to resuming this session; 'spawn' runs one new child session.",
            "enum": [
              "resume",
              "spawn",
              "ambient"
            ],
            "type": "string"
          },
          "task": {
            "description": "Task. Required for action=create.",
            "type": "string"
          },
          "wake_at": {
            "type": "string"
          },
          "wake_in_minutes": {
            "type": "integer"
          }
        },
        "required": [
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "session_search",
      "description": "Search past chat sessions. Current session and tool noise hidden by default.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "after": {
            "description": "Only include sessions/messages at or after this RFC3339 timestamp or YYYY-MM-DD date.",
            "type": "string"
          },
          "before": {
            "description": "Only include sessions/messages at or before this RFC3339 timestamp or YYYY-MM-DD date.",
            "type": "string"
          },
          "canary": {
            "description": "Restrict Jcode sessions by canary flag.",
            "type": "boolean"
          },
          "context_after": {
            "description": "Number of following messages to include around each hit.",
            "maximum": 5,
            "minimum": 0,
            "type": "integer"
          },
          "context_before": {
            "description": "Number of preceding messages to include around each hit.",
            "maximum": 5,
            "minimum": 0,
            "type": "integer"
          },
          "debug": {
            "description": "Restrict Jcode sessions by debug/test flag.",
            "type": "boolean"
          },
          "exhaustive": {
            "description": "Search every session instead of the recent indexed subset. Slower; for deep recall.",
            "type": "boolean"
          },
          "include_current": {
            "description": "Include the current active session. Defaults to false.",
            "type": "boolean"
          },
          "include_external": {
            "description": "Include external session sources discovered by the session picker. Defaults to true.",
            "type": "boolean"
          },
          "include_system": {
            "description": "Include system reminders and display/system messages. Defaults to false.",
            "type": "boolean"
          },
          "include_tools": {
            "description": "Include raw tool calls and tool results. Defaults to false to reduce log noise.",
            "type": "boolean"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "limit": {
            "description": "Max results.",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "max_per_session": {
            "description": "Maximum hits to return from one session. Defaults to 1 for result diversity.",
            "maximum": 20,
            "minimum": 1,
            "type": "integer"
          },
          "max_scan_sessions": {
            "description": "Bound the number of recent sessions scanned per source.",
            "maximum": 10000,
            "minimum": 1,
            "type": "integer"
          },
          "model": {
            "description": "Restrict by model substring.",
            "type": "string"
          },
          "provider": {
            "description": "Restrict by provider/source substring, e.g. openai, claude, codex, pi, opencode, cursor.",
            "type": "string"
          },
          "query": {
            "description": "Search query. Use distinctive keywords; stop-word-only queries are rejected.",
            "type": "string"
          },
          "role": {
            "description": "Restrict results to a role or to metadata-only hits. Defaults to all transcript roles plus metadata.",
            "enum": [
              "all",
              "user",
              "assistant",
              "metadata"
            ],
            "type": "string"
          },
          "saved": {
            "description": "Restrict Jcode sessions by saved/bookmarked flag.",
            "type": "boolean"
          },
          "source": {
            "description": "Restrict session source. Defaults to all available sources.",
            "enum": [
              "all",
              "jcode",
              "claude",
              "codex",
              "pi",
              "opencode",
              "cursor"
            ],
            "type": "string"
          },
          "working_dir": {
            "description": "Only sessions whose working directory matches this path prefix (case-insensitive).",
            "type": "string"
          }
        },
        "required": [
          "query",
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "skill_manage",
      "description": "Manage skills.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "action": {
            "description": "Action.",
            "enum": [
              "load",
              "list",
              "reload",
              "reload_all",
              "read"
            ],
            "type": "string"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "name": {
            "description": "Skill name.",
            "type": "string"
          }
        },
        "required": [
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "swarm",
      "description": "Coordinate agents: spawn workers for todo lanes, message them, and manage swarm plans.\n\nSwarm prompt (user-tunable via ~/.jcode/swarm-prompt.md):\n<!--\nThis file IS the swarm config. Swarms are complicated, dynamic systems, so\nrouting policy is passed to the models as a prompt rather than as options in\na standard config file. Edit freely: override globally at\n~/.jcode/swarm-prompt.md or per-project at ./.jcode/swarm-prompt.md.\n-->\n\n- Spawn workers when work can be parallelized.\n- Avoid reviewers, auditors, critics, or verifier agents because that is often not useful.\n- Avoid pure research or scouting workers. Fold the needed investigation into\n  the implementation task, or do it yourself first.\n\nThe named todo lane is the source of truth: its tasks and details\n  are prepopulated into the worker and sent before it starts, with updates synced\n  only to that lane. `prompt` is optional extra context, not a duplicate task list.\n  If the lane does not exist, one is created from `prompt` or `label`.\n\n- Only the root session may spawn agents. Workers must complete their assigned\n  task directly and report back rather than creating another generation.",
      "input_schema": {
        "anyOf": [
          {
            "properties": {
              "action": {
                "enum": [
                  "spawn"
                ],
                "type": "string"
              },
              "label": {
                "minLength": 1,
                "type": "string"
              }
            },
            "required": [
              "action",
              "label"
            ],
            "type": "object"
          },
          {
            "properties": {
              "action": {
                "enum": [
                  "launch",
                  "message",
                  "status",
                  "plan_status",
                  "list",
                  "summary",
                  "await_members",
                  "stop",
                  "resume",
                  "retry",
                  "list_models",
                  "list_swarms"
                ],
                "type": "string"
              }
            },
            "required": [
              "action"
            ],
            "type": "object"
          }
        ],
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "action": {
            "description": "launch: lanes. spawn requires label. message: agent/channel, coordinator-only broadcast. list_models.",
            "enum": [
              "launch",
              "spawn",
              "message",
              "status",
              "plan_status",
              "list",
              "summary",
              "await_members",
              "stop",
              "resume",
              "retry",
              "list_models",
              "list_swarms"
            ],
            "type": "string"
          },
          "background": {
            "description": "For launch/run_plan: detach as a background task (default true); false blocks until the plan resolves.",
            "type": "boolean"
          },
          "channel": {
            "description": "Channel name for channel actions. Discouraged: prefer DMs.",
            "type": "string"
          },
          "concurrency_limit": {
            "description": "Max live workers for launch.",
            "minimum": 1,
            "type": "integer"
          },
          "delivery": {
            "description": "Optional delivery mode for dm/channel messaging.",
            "enum": [
              "notify",
              "interrupt",
              "wake"
            ],
            "type": "string"
          },
          "force": {
            "description": "For stop/cleanup: allow stopping non-owned/user-created swarm sessions. Defaults to false.",
            "type": "boolean"
          },
          "initial_message": {
            "description": "Alias of prompt for spawn; wins when both are set.",
            "type": "string"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "label": {
            "description": "Required for spawn: lane name, the source of truth. Existing lane tasks are prepopulated and synced.",
            "minLength": 1,
            "type": "string"
          },
          "limit": {
            "description": "Optional max items for summary-style reads.",
            "minimum": 1,
            "type": "integer"
          },
          "message": {
            "description": "Message body. Goes to to_session, or to channel; with neither, everyone (coordinator only).",
            "type": "string"
          },
          "mode": {
            "description": "await_members: all or any.",
            "enum": [
              "all",
              "any"
            ],
            "type": "string"
          },
          "notify": {
            "description": "For await_members/run_plan: show a notification when resolved. Defaults to true.",
            "type": "boolean"
          },
          "phase": {
            "description": "For spawn: which phase the worker's lane belongs to. Defaults to the active phase.",
            "minimum": 1,
            "type": "integer"
          },
          "prompt": {
            "description": "Optional extra context for spawn. Lane tasks are prepopulated: do not repeat its tasks.",
            "type": "string"
          },
          "retain_agents": {
            "description": "For launch/run_plan: keep spawned workers after the plan finishes. Defaults to false.",
            "type": "boolean"
          },
          "session_ids": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "spawn_mode": {
            "description": "Omit to use the user's configured mode. Set only when the user asks for one.",
            "enum": [
              "visible",
              "headless",
              "inline",
              "auto"
            ],
            "type": "string"
          },
          "target_session": {
            "description": "Session ID or unique friendly name for management actions. Alias of to_session.",
            "type": "string"
          },
          "target_status": {
            "description": "Optional completion statuses for await_members. Defaults to ready/completed/stopped/failed.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "task_id": {
            "description": "Optional plan task ID. When omitted the coordinator picks or resumes the relevant task.",
            "type": "string"
          },
          "timeout_minutes": {
            "description": "await_members timeout. Returned dependency ID pauses todo.waiting_on until completion or timeout.",
            "minimum": 1,
            "type": "integer"
          },
          "tldr": {
            "description": "Optional one-line summary (under ~120 chars); recommended for bodies over 240 chars, else auto-derived.",
            "type": "string"
          },
          "to_session": {
            "description": "Session ID or unique friendly name of one agent. Alias of target_session.",
            "type": "string"
          },
          "to_swarm": {
            "description": "Cross-swarm DM: swarm label or id (see list_swarms). With to_session, that agent; else its coordinator.",
            "type": "string"
          },
          "wake": {
            "description": "Wake this agent when a message or awaited background task resolves (default true).",
            "type": "boolean"
          },
          "working_dir": {
            "description": "Optional working directory for spawn.",
            "type": "string"
          }
        },
        "required": [
          "action",
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "todo",
      "description": "Read or update todos and goal assessments. For multi-step work, write the plan once with `phases` containing lanes containing items. Then use `update` by id for status/field changes and `add` for new work. Reserve full replacement for restructuring; remove rarely. Mark work in_progress before starting and completed as soon as it is done. Keep the live list current after meaningful steps. Use short titles, with longer context in details. Organize parallel lanes within sequential phases. A lane may set `after` to prerequisite todo IDs in earlier phases, replacing the whole-phase barrier so it can start once all those items are completed. Omit `after` for normal phase ordering. Incremental `lane_after` edits on one item update its entire lane; null restores normal ordering. Set waiting_on to existing background task IDs or swarm await_members dependency IDs from this session when work must wait. They block only while running, never after completion. Saving enables completion notify/wake. Use [] or null to clear waiting_on. Block only when progress requires an indispensable action that only someone else can perform, and no safe workaround exists after investigation. The reason must name who must do exactly what to unblock this item, and why the agent cannot do it or work around it. Valid examples: a credential only its owner can provide, required data only its custodian can supply, or explicit approval genuinely required for an irreversible action. Implementation choices, uncertainty, task size, prioritization, and agent coordination never qualify. Decide, investigate, split the work, or coordinate directly instead. Do not invent approval requirements for already-authorized work. Continue independent items. For an external blocker without a dependency ID, set external_blocker to {reason, review_at}, with a concrete reason and future RFC3339 deadline. Keep the todo pending/in_progress. Pokes pause until review_at and a durable scheduler wakes this session to reassess, not assume resolution or completion. Clear external_blocker with null when unblocked. Use this instead of a separate schedule call for todo blocker reviews. completely_blocked: No way forward.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "add": {
            "description": "Add items with explicit phase and lane, or inherit missing membership from an existing after id.",
            "items": {
              "additionalProperties": false,
              "properties": {
                "after": {
                  "description": "Existing todo id to insert after.",
                  "type": "string"
                },
                "completely_blocked": {
                  "additionalProperties": false,
                  "description": "Only when an indispensable action can be performed only by someone else and no safe workaround exists after investigation. Name who must do exactly what, and why the agent cannot do it or work around it. Not for implementation decisions, uncertainty, task size, or agent coordination.",
                  "properties": {
                    "reason": {
                      "description": "Who must do exactly what, and why the agent cannot do it or work around it.",
                      "minLength": 1,
                      "type": "string"
                    }
                  },
                  "required": [
                    "reason"
                  ],
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "completion_confidence": {
                  "description": "Evidence state behind this todo's completion. Use only for completed items.",
                  "enum": [
                    "speculative",
                    "plausible",
                    "validated",
                    "verified"
                  ],
                  "type": "string"
                },
                "confidence": {
                  "description": "Evidence state that this todo can be completed correctly; reassess as evidence accumulates.",
                  "enum": [
                    "speculative",
                    "plausible",
                    "validated",
                    "verified"
                  ],
                  "type": "string"
                },
                "content": {
                  "description": "Short title, ideally under 40 characters; todos render side by side. Put longer context in details.",
                  "type": "string"
                },
                "details": {
                  "description": "Longer brief for the assigned worker: files, acceptance criteria, context. Hidden from the card.",
                  "type": "string"
                },
                "external_blocker": {
                  "additionalProperties": false,
                  "description": "Only when an indispensable action can be performed only by someone else and no safe workaround exists after investigation. Name who must do exactly what, and why the agent cannot do it or work around it. Not for implementation decisions, uncertainty, task size, or agent coordination. No dependency ID: pause until durable review_at to reassess. null cancels.",
                  "properties": {
                    "reason": {
                      "description": "Who must do exactly what, and why the agent cannot do it or work around it.",
                      "minLength": 1,
                      "type": "string"
                    },
                    "review_at": {
                      "description": "Future finite RFC3339 reassessment deadline. Does not mean the blocker resolves then.",
                      "format": "date-time",
                      "type": "string"
                    }
                  },
                  "required": [
                    "reason",
                    "review_at"
                  ],
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "id": {
                  "description": "ID.",
                  "type": "string"
                },
                "lane": {
                  "description": "Lane name: coherent goal owned by one worker, tasks ordered within it. Omit for flat list.",
                  "type": "string"
                },
                "lane_after": {
                  "description": "Lane-wide prerequisite todo IDs in strictly earlier phases by first appearance. Editing one member updates the entire lane. Null restores the default phase barrier.",
                  "items": {
                    "minLength": 1,
                    "type": "string"
                  },
                  "minItems": 1,
                  "type": [
                    "array",
                    "null"
                  ],
                  "uniqueItems": true
                },
                "phase": {
                  "description": "Sequential phase (1, 2...). Lanes inside each phase run in parallel. Omit for list order.",
                  "minimum": 1,
                  "type": "integer"
                },
                "priority": {
                  "description": "Priority.",
                  "type": "string"
                },
                "status": {
                  "description": "Status. Use completed when the task is done.",
                  "enum": [
                    "pending",
                    "in_progress",
                    "completed",
                    "cancelled"
                  ],
                  "type": "string"
                },
                "waiting_on": {
                  "description": "Session task/await_members IDs: pending blocks+notify/wake; done/timeout unblocks. []/null clears.",
                  "items": {
                    "type": "string"
                  },
                  "type": [
                    "array",
                    "null"
                  ]
                }
              },
              "required": [
                "content",
                "status",
                "priority",
                "id",
                "confidence"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "goals": {
            "description": "Goal-level assessments, one per todo group (null = ungrouped). Omitted groups are retained.",
            "items": {
              "properties": {
                "autonomy": {
                  "description": "How far beyond the literal request the work went. Assess from what was completed.",
                  "enum": [
                    "requested_only",
                    "necessary_followthrough",
                    "proactive",
                    "stewardship"
                  ],
                  "type": "string"
                },
                "closed_feedback_loop": {
                  "description": "How much of this goal's correctness the feedback_loop can verify on its own.",
                  "enum": [
                    "absent",
                    "weak",
                    "usable",
                    "strong",
                    "closed"
                  ],
                  "type": "string"
                },
                "delivery_state": {
                  "description": "Completion-time: how far the result actually traveled toward the user's outcome.",
                  "enum": [
                    "change_made",
                    "integrated",
                    "workflow_validated",
                    "outcome_delivered"
                  ],
                  "type": "string"
                },
                "difficulty": {
                  "description": "Honest intrinsic difficulty of this goal. Descriptive only.",
                  "enum": [
                    "trivial",
                    "routine",
                    "involved",
                    "complex",
                    "hard",
                    "expert",
                    "research",
                    "open_ended"
                  ],
                  "type": "string"
                },
                "feedback_loop": {
                  "description": "Requirement-to-check process: an explicit observation or check for each requirement of this goal.",
                  "type": "string"
                },
                "feedback_loop_coverage": {
                  "description": "Coverage of integration boundaries, edge cases, packaging, and likely failure modes.",
                  "enum": [
                    "narrow",
                    "main_paths",
                    "edge_and_integration_paths"
                  ],
                  "type": "string"
                },
                "feedback_loop_relevance": {
                  "description": "How directly checks represent observable acceptance behavior. indirect = inspection or an internal proxy; synthetic = custom harnesses, stubs, mocks, copied sources, or synthetic fixtures; representative = real public interfaces but not the complete acceptance workflow; acceptance_blocked = the real acceptance workflow was attempted but an external constraint prevented a result; acceptance_aligned = the real project build, integration test, or end-user workflow passed. Substitute-only validation is never acceptance_aligned.",
                  "enum": [
                    "indirect",
                    "synthetic",
                    "representative",
                    "acceptance_blocked",
                    "acceptance_aligned"
                  ],
                  "type": "string"
                },
                "feedback_loop_traceability": {
                  "description": "How completely each requirement and changed output maps to a concrete check and observed result.",
                  "enum": [
                    "unmapped",
                    "partial",
                    "complete"
                  ],
                  "type": "string"
                },
                "group": {
                  "description": "Group label this goal describes. Omit or null for the ungrouped list.",
                  "type": "string"
                },
                "iteration_maturity": {
                  "description": "How far the feedback loop was actually exercised, and any evidence-based reason to stop iterating.",
                  "enum": [
                    "not_started",
                    "exploring",
                    "improving",
                    "plateau_unproven",
                    "outcome_reached",
                    "constraints_exhausted",
                    "plateau_confirmed",
                    "budget_exhausted"
                  ],
                  "type": "string"
                },
                "stopping_evidence": {
                  "description": "Evidence for the reported iteration_maturity: attempts, observations, or a real budget limit.",
                  "type": "string"
                }
              },
              "required": [
                "closed_feedback_loop",
                "feedback_loop",
                "feedback_loop_relevance",
                "feedback_loop_coverage",
                "feedback_loop_traceability"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "phases": {
            "description": "Replace plan: sequential phases, parallel lanes, ordered items. A lane's optional after todo IDs replace its phase barrier for early start. [] clears.",
            "items": {
              "additionalProperties": false,
              "properties": {
                "lanes": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "after": {
                        "description": "Prerequisite todo IDs from strictly earlier phases. Omit or null for the default phase barrier.",
                        "items": {
                          "minLength": 1,
                          "type": "string"
                        },
                        "minItems": 1,
                        "type": [
                          "array",
                          "null"
                        ],
                        "uniqueItems": true
                      },
                      "items": {
                        "items": {
                          "additionalProperties": false,
                          "properties": {
                            "completely_blocked": {
                              "additionalProperties": false,
                              "description": "Only when an indispensable action can be performed only by someone else and no safe workaround exists after investigation. Name who must do exactly what, and why the agent cannot do it or work around it. Not for implementation decisions, uncertainty, task size, or agent coordination.",
                              "properties": {
                                "reason": {
                                  "description": "Who must do exactly what, and why the agent cannot do it or work around it.",
                                  "minLength": 1,
                                  "type": "string"
                                }
                              },
                              "required": [
                                "reason"
                              ],
                              "type": [
                                "object",
                                "null"
                              ]
                            },
                            "completion_confidence": {
                              "description": "Evidence state behind this todo's completion. Use only for completed items.",
                              "enum": [
                                "speculative",
                                "plausible",
                                "validated",
                                "verified"
                              ],
                              "type": "string"
                            },
                            "confidence": {
                              "description": "Evidence state that this todo can be completed correctly; reassess as evidence accumulates.",
                              "enum": [
                                "speculative",
                                "plausible",
                                "validated",
                                "verified"
                              ],
                              "type": "string"
                            },
                            "content": {
                              "description": "Short title, ideally under 40 characters; todos render side by side. Put longer context in details.",
                              "type": "string"
                            },
                            "details": {
                              "description": "Longer brief for the assigned worker: files, acceptance criteria, context. Hidden from the card.",
                              "type": "string"
                            },
                            "external_blocker": {
                              "additionalProperties": false,
                              "description": "Only when an indispensable action can be performed only by someone else and no safe workaround exists after investigation. Name who must do exactly what, and why the agent cannot do it or work around it. Not for implementation decisions, uncertainty, task size, or agent coordination. No dependency ID: pause until durable review_at to reassess. null cancels.",
                              "properties": {
                                "reason": {
                                  "description": "Who must do exactly what, and why the agent cannot do it or work around it.",
                                  "minLength": 1,
                                  "type": "string"
                                },
                                "review_at": {
                                  "description": "Future finite RFC3339 reassessment deadline. Does not mean the blocker resolves then.",
                                  "format": "date-time",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "reason",
                                "review_at"
                              ],
                              "type": [
                                "object",
                                "null"
                              ]
                            },
                            "id": {
                              "description": "ID.",
                              "type": "string"
                            },
                            "priority": {
                              "description": "Priority.",
                              "type": "string"
                            },
                            "status": {
                              "description": "Status. Use completed when the task is done.",
                              "enum": [
                                "pending",
                                "in_progress",
                                "completed",
                                "cancelled"
                              ],
                              "type": "string"
                            },
                            "waiting_on": {
                              "description": "Session task/await_members IDs: pending blocks+notify/wake; done/timeout unblocks. []/null clears.",
                              "items": {
                                "type": "string"
                              },
                              "type": [
                                "array",
                                "null"
                              ]
                            }
                          },
                          "required": [
                            "content",
                            "status",
                            "priority",
                            "id",
                            "confidence"
                          ],
                          "type": "object"
                        },
                        "minItems": 1,
                        "type": "array"
                      },
                      "lane": {
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "lane",
                      "items"
                    ],
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "phase": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "required": [
                "phase",
                "lanes"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "plan": {
            "description": "Plan-level understanding of the request. Send on first write and whenever understanding changes.",
            "properties": {
              "understands_user_intent": {
                "description": "How well you understand what the user wants. Report uncertain or partial when guessing.",
                "enum": [
                  "uncertain",
                  "partial",
                  "clear",
                  "complete"
                ],
                "type": "string"
              },
              "user_intention": {
                "description": "What the user actually wants: underlying reason and desired end state. Omit later to retain.",
                "type": "string"
              }
            },
            "required": [
              "user_intention",
              "understands_user_intent"
            ],
            "type": "object"
          },
          "remove": {
            "description": "Ids of todos to delete. Prefer marking status cancelled.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "update": {
            "description": "Patch todos by id and changed fields only. Unmentioned data stays untouched. Prefer for status updates.",
            "items": {
              "additionalProperties": false,
              "properties": {
                "completely_blocked": {
                  "additionalProperties": false,
                  "description": "Only when an indispensable action can be performed only by someone else and no safe workaround exists after investigation. Name who must do exactly what, and why the agent cannot do it or work around it. Not for implementation decisions, uncertainty, task size, or agent coordination.",
                  "properties": {
                    "reason": {
                      "description": "Who must do exactly what, and why the agent cannot do it or work around it.",
                      "minLength": 1,
                      "type": "string"
                    }
                  },
                  "required": [
                    "reason"
                  ],
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "completion_confidence": {
                  "description": "Evidence state behind this todo's completion. Use only for completed items.",
                  "enum": [
                    "speculative",
                    "plausible",
                    "validated",
                    "verified"
                  ],
                  "type": "string"
                },
                "confidence": {
                  "description": "Evidence state that this todo can be completed correctly; reassess as evidence accumulates.",
                  "enum": [
                    "speculative",
                    "plausible",
                    "validated",
                    "verified"
                  ],
                  "type": "string"
                },
                "content": {
                  "description": "Short title, ideally under 40 characters; todos render side by side. Put longer context in details.",
                  "type": "string"
                },
                "details": {
                  "description": "Longer brief for the assigned worker: files, acceptance criteria, context. Hidden from the card.",
                  "type": "string"
                },
                "external_blocker": {
                  "additionalProperties": false,
                  "description": "Only when an indispensable action can be performed only by someone else and no safe workaround exists after investigation. Name who must do exactly what, and why the agent cannot do it or work around it. Not for implementation decisions, uncertainty, task size, or agent coordination. No dependency ID: pause until durable review_at to reassess. null cancels.",
                  "properties": {
                    "reason": {
                      "description": "Who must do exactly what, and why the agent cannot do it or work around it.",
                      "minLength": 1,
                      "type": "string"
                    },
                    "review_at": {
                      "description": "Future finite RFC3339 reassessment deadline. Does not mean the blocker resolves then.",
                      "format": "date-time",
                      "type": "string"
                    }
                  },
                  "required": [
                    "reason",
                    "review_at"
                  ],
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "id": {
                  "description": "ID.",
                  "type": "string"
                },
                "lane": {
                  "description": "Lane name: coherent goal owned by one worker, tasks ordered within it. Omit for flat list.",
                  "type": "string"
                },
                "lane_after": {
                  "description": "Lane-wide prerequisite todo IDs in strictly earlier phases by first appearance. Editing one member updates the entire lane. Null restores the default phase barrier.",
                  "items": {
                    "minLength": 1,
                    "type": "string"
                  },
                  "minItems": 1,
                  "type": [
                    "array",
                    "null"
                  ],
                  "uniqueItems": true
                },
                "phase": {
                  "description": "Sequential phase (1, 2...). Lanes inside each phase run in parallel. Omit for list order.",
                  "minimum": 1,
                  "type": "integer"
                },
                "priority": {
                  "description": "Priority.",
                  "type": "string"
                },
                "status": {
                  "description": "Status. Use completed when the task is done.",
                  "enum": [
                    "pending",
                    "in_progress",
                    "completed",
                    "cancelled"
                  ],
                  "type": "string"
                },
                "waiting_on": {
                  "description": "Session task/await_members IDs: pending blocks+notify/wake; done/timeout unblocks. []/null clears.",
                  "items": {
                    "type": "string"
                  },
                  "type": [
                    "array",
                    "null"
                  ]
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "type": "array"
          }
        },
        "required": [
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "webfetch",
      "description": "Fetch a URL.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "format": {
            "description": "Output format.",
            "enum": [
              "text",
              "markdown",
              "html"
            ],
            "type": "string"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "timeout": {
            "description": "Timeout in seconds.",
            "type": "integer"
          },
          "url": {
            "description": "URL.",
            "type": "string"
          }
        },
        "required": [
          "url",
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "websearch",
      "description": "Search the web.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          },
          "num_results": {
            "description": "Max results.",
            "type": "integer"
          },
          "query": {
            "description": "Search query.",
            "type": "string"
          }
        },
        "required": [
          "query",
          "intent"
        ],
        "type": "object"
      }
    },
    {
      "name": "write",
      "description": "Write a file.",
      "input_schema": {
        "properties": {
          "accept_large_output": {
            "description": "Re-run accepting the stated token cost of a withheld result.",
            "type": "boolean"
          },
          "content": {
            "description": "File content.",
            "type": "string"
          },
          "file_path": {
            "description": "File path.",
            "type": "string"
          },
          "intent": {
            "description": "Required short label shown in the UI: why this call is being made.",
            "type": "string"
          }
        },
        "required": [
          "file_path",
          "content",
          "intent"
        ],
        "type": "object"
      }
    }
  ]
}
