{
  "schemaVersion": 1,
  "updatedAt": "2026-10-15",
  "contracts": [
    {
      "harness": "codex",
      "observedVersion": "0.162.1",
      "notes": [
        "The shell CLI installs and removes plugins but has no enable, disable, update or validate command; the /plugins browser can switch plugins on or off.",
        "--worktree starts new sessions in a managed Git worktree and works with codex fork given an explicit session; resume, queue, archive, unarchive and delete reject it at run time.",
        "MCP protocol capabilities are recorded in mcp.json; these records cover the operator commands."
      ],
      "commands": [
        {
          "id": "codex-mcp-list",
          "family": "mcp",
          "surface": "cli",
          "command": "codex mcp list [--json]",
          "operation": "list",
          "description": "List configured MCP servers.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-mcp"
        },
        {
          "id": "codex-mcp-get",
          "family": "mcp",
          "surface": "cli",
          "command": "codex mcp get <NAME> [--json]",
          "operation": "inspect",
          "description": "Show one MCP server's configuration.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-mcp",
          "notes": ["--json prints the raw config entry."]
        },
        {
          "id": "codex-mcp-add",
          "family": "mcp",
          "surface": "cli",
          "command": "codex mcp add <NAME> (--url <URL> | -- <COMMAND>...)",
          "operation": "add",
          "description": "Register a stdio or streamable-HTTP MCP server.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-mcp",
          "notes": [
            "--env is stdio-only; --bearer-token-env-var, --oauth-client-id, --oauth-client-secret, --oauth-client-registration and --oauth-resource are HTTP-only."
          ]
        },
        {
          "id": "codex-mcp-remove",
          "family": "mcp",
          "surface": "cli",
          "command": "codex mcp remove <NAME>",
          "operation": "remove",
          "description": "Delete a stored MCP server definition.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-mcp"
        },
        {
          "id": "codex-mcp-login",
          "family": "mcp",
          "surface": "cli",
          "command": "codex mcp login <NAME>",
          "operation": "authenticate",
          "description": "Start an OAuth login for a configured streamable-HTTP MCP server.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-mcp",
          "notes": [
            "--no-browser prints the URL to paste the callback by hand; --scopes; --oauth-client-registration."
          ]
        },
        {
          "id": "codex-mcp-logout",
          "family": "mcp",
          "surface": "cli",
          "command": "codex mcp logout <NAME>",
          "operation": "deauthenticate",
          "description": "Remove stored OAuth credentials for an MCP server.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-mcp"
        },
        {
          "id": "codex-mcp-panel",
          "family": "mcp",
          "surface": "interactive",
          "command": "/mcp",
          "operation": "list",
          "description": "List the MCP servers and tools available in the session.",
          "evidence": ["codex-developer-commands-docs"],
          "aliases": ["/mcp verbose"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#list-mcp-tools-with-mcp",
          "notes": ["/mcp verbose adds server diagnostics."]
        },
        {
          "id": "codex-mcp-login-interactive",
          "family": "mcp",
          "surface": "interactive",
          "command": "/mcp login <name>",
          "operation": "authenticate",
          "description": "Sign in to a configured MCP server from the active session.",
          "evidence": ["codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#list-mcp-tools-with-mcp",
          "notes": ["Added in 0.161.0."]
        },
        {
          "id": "codex-plugin-add",
          "family": "plugin",
          "surface": "cli",
          "command": "codex plugin add <PLUGIN[@MARKETPLACE]>",
          "operation": "install",
          "description": "Install a plugin from a configured or remote marketplace.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-plugin",
          "notes": ["-m/--marketplace when the selector has no @MARKETPLACE; --json."]
        },
        {
          "id": "codex-plugin-list",
          "family": "plugin",
          "surface": "cli",
          "command": "codex plugin list",
          "operation": "list",
          "description": "List plugins from configured and remote marketplaces.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-plugin",
          "notes": [
            "-m filters by marketplace; --available adds uninstalled plugins and requires --json."
          ]
        },
        {
          "id": "codex-plugin-remove",
          "family": "plugin",
          "surface": "cli",
          "command": "codex plugin remove <PLUGIN[@MARKETPLACE]>",
          "operation": "uninstall",
          "description": "Uninstall a plugin and remove its local cache.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-plugin",
          "notes": ["-m/--marketplace; --json."]
        },
        {
          "id": "codex-plugin-browser",
          "family": "plugin",
          "surface": "interactive",
          "command": "/plugins",
          "operation": "manage",
          "description": "Open the plugin browser to review, install, uninstall, enable or disable plugins.",
          "evidence": ["codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#browse-plugins-with-plugins",
          "notes": [
            "The shell CLI has no enable or disable command; only this browser can toggle a plugin."
          ]
        },
        {
          "id": "codex-marketplace-add",
          "family": "plugin-marketplace",
          "surface": "cli",
          "command": "codex plugin marketplace add <SOURCE>",
          "operation": "add",
          "description": "Add a local path, owner/repo[@ref], HTTPS Git or SSH Git marketplace source.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-plugin-marketplace",
          "notes": ["--ref; --sparse <PATH> (repeatable, Git only); --json."]
        },
        {
          "id": "codex-marketplace-list",
          "family": "plugin-marketplace",
          "surface": "cli",
          "command": "codex plugin marketplace list",
          "operation": "list",
          "description": "List the marketplaces Codex is considering and their roots.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-plugin-marketplace",
          "notes": ["--json."]
        },
        {
          "id": "codex-marketplace-upgrade",
          "family": "plugin-marketplace",
          "surface": "cli",
          "command": "codex plugin marketplace upgrade [MARKETPLACE_NAME]",
          "operation": "update",
          "description": "Refresh one or all configured Git marketplace snapshots.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-plugin-marketplace",
          "notes": ["--json."]
        },
        {
          "id": "codex-marketplace-remove",
          "family": "plugin-marketplace",
          "surface": "cli",
          "command": "codex plugin marketplace remove <MARKETPLACE_NAME>",
          "operation": "remove",
          "description": "Remove a configured marketplace source by name.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-plugin-marketplace",
          "notes": ["--json."]
        },
        {
          "id": "codex-agents-view",
          "family": "supervised-session",
          "surface": "cli",
          "command": "codex agents",
          "operation": "manage",
          "description": "Open the agent command center for sessions on the shared local or a remote app-server.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-agents",
          "notes": [
            "No --json. Takes --remote, --remote-auth-token-env, -C/--cd and --no-alt-screen; rejects --no-daemon.",
            "Keys: Open, New, New worktree, Resume, Fork, Rename, Stop (interrupts an active thread), Archive, Hide, Delete, Pin."
          ]
        },
        {
          "id": "codex-agents-view-interactive",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/agents",
          "operation": "manage",
          "description": "Open the agent command center from inside a session.",
          "evidence": ["codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#manage-chats-with-agents",
          "notes": ["Requires a shared local or remote server."]
        },
        {
          "id": "codex-session-resume",
          "family": "supervised-session",
          "surface": "cli",
          "command": "codex resume [SESSION_ID] [PROMPT]",
          "operation": "resume",
          "description": "Resume a saved interactive session by UUID or name, with a picker by default.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-resume",
          "notes": [
            "--last, --all, --include-non-interactive, --remote, --remote-auth-token-env.",
            "--worktree parses but is rejected at run time."
          ]
        },
        {
          "id": "codex-session-resume-interactive",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/resume [session]",
          "operation": "resume",
          "description": "Open the saved-session picker, or resume a session by id or name.",
          "evidence": ["codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#resume-a-saved-chat-with-resume"
        },
        {
          "id": "codex-session-fork",
          "family": "supervised-session",
          "surface": "cli",
          "command": "codex fork [SESSION_ID] [PROMPT]",
          "operation": "fork",
          "description": "Fork a saved session into a new chat, with a picker by default.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-fork",
          "notes": [
            "SESSION_ID is documented as a UUID only.",
            "--worktree works only with an explicit SESSION_ID."
          ]
        },
        {
          "id": "codex-session-fork-interactive",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/fork [name]",
          "operation": "fork",
          "description": "Fork the current chat, optionally into a new managed worktree.",
          "evidence": ["codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#fork-the-current-chat-with-fork"
        },
        {
          "id": "codex-session-queue",
          "family": "supervised-session",
          "surface": "cli",
          "command": "codex queue --thread <THREAD> --message <TEXT>",
          "operation": "queue",
          "description": "Queue a text message for an existing session by UUID or exact name.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-queue",
          "notes": ["Image attachments are not supported. --worktree is rejected."]
        },
        {
          "id": "codex-session-archive",
          "family": "supervised-session",
          "surface": "cli",
          "command": "codex archive <SESSION>",
          "operation": "archive",
          "description": "Archive a saved session by id or name.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-archive-and-codex-unarchive",
          "notes": ["A UUID takes precedence over a name. --worktree is rejected."]
        },
        {
          "id": "codex-session-archive-interactive",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/archive",
          "operation": "archive",
          "description": "Archive the current session after confirmation.",
          "evidence": ["codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#archive-the-current-session-with-archive",
          "notes": ["Stops a running turn (0.162.0)."]
        },
        {
          "id": "codex-session-unarchive",
          "family": "supervised-session",
          "surface": "cli",
          "command": "codex unarchive <SESSION>",
          "operation": "unarchive",
          "description": "Restore an archived session by id or name.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-archive-and-codex-unarchive",
          "notes": ["--worktree is rejected."]
        },
        {
          "id": "codex-session-delete",
          "family": "supervised-session",
          "surface": "cli",
          "command": "codex delete <SESSION>",
          "operation": "delete",
          "description": "Permanently delete a saved session by id or name.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-delete",
          "notes": [
            "Destructive. --force skips the prompt but requires a UUID; names always need confirmation."
          ]
        },
        {
          "id": "codex-session-delete-interactive",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/delete",
          "operation": "delete",
          "description": "Permanently delete the current session and its subagent threads after confirmation.",
          "evidence": ["codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#delete-the-current-session-with-delete",
          "notes": ["Destructive. Unavailable while a task runs or in a side chat."]
        },
        {
          "id": "codex-app-server-daemon-start",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "codex app-server daemon start",
          "operation": "serve",
          "description": "Start the local app-server daemon if it is not already running.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-app-server"
        },
        {
          "id": "codex-app-server-daemon-restart",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "codex app-server daemon restart",
          "operation": "restart",
          "description": "Restart the local app-server daemon.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-app-server"
        },
        {
          "id": "codex-app-server-daemon-stop",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "codex app-server daemon stop",
          "operation": "shutdown",
          "description": "Stop the local app-server daemon.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-app-server"
        },
        {
          "id": "codex-app-server-daemon-version",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "codex app-server daemon version",
          "operation": "status",
          "description": "Print the local CLI and running app-server versions as JSON.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-app-server",
          "notes": ["Reports versions only, not pid or uptime."]
        },
        {
          "id": "codex-app-server-daemon-update",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "codex app-server daemon update",
          "operation": "update",
          "description": "Replace the daemon package.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-app-server",
          "notes": [
            "May interrupt running work. --from-cli pins this CLI's package; -y requires --from-cli. Added in 0.155.0."
          ]
        },
        {
          "id": "codex-app-server-daemon-bootstrap",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "codex app-server daemon bootstrap",
          "operation": "install",
          "description": "Install durable local app-server management for SSH-driven use.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-app-server",
          "notes": ["--remote-control starts it with remote control on."]
        },
        {
          "id": "codex-app-server-daemon-enable-remote-control",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "codex app-server daemon enable-remote-control",
          "operation": "enable",
          "description": "Enable remote control for future starts and a running managed daemon.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-app-server"
        },
        {
          "id": "codex-app-server-daemon-disable-remote-control",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "codex app-server daemon disable-remote-control",
          "operation": "disable",
          "description": "Disable remote control for future starts and a running managed daemon.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-app-server"
        },
        {
          "id": "codex-daemon-menu",
          "family": "session-supervisor",
          "surface": "interactive",
          "command": "/daemon",
          "operation": "update",
          "description": "Show the background-server connection and offer to update it.",
          "evidence": ["codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#manage-the-background-server-with-daemon",
          "notes": ["Confirming exits Codex and may interrupt work. Added in 0.156.0."]
        },
        {
          "id": "codex-remote-control-run",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "codex remote-control",
          "operation": "serve",
          "description": "Start remote control through the managed daemon, falling back to the foreground.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-remote-control",
          "notes": [
            "Experimental. --no-daemon runs an embedded app-server in the foreground until Ctrl-C."
          ]
        },
        {
          "id": "codex-remote-control-start",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "codex remote-control start",
          "operation": "serve",
          "description": "Start the app-server daemon with remote control enabled.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-remote-control",
          "notes": ["Experimental; --json."]
        },
        {
          "id": "codex-remote-control-stop",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "codex remote-control stop",
          "operation": "shutdown",
          "description": "Stop the app-server daemon.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-remote-control",
          "notes": ["Experimental; --json."]
        },
        {
          "id": "codex-remote-control-pair",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "codex remote-control pair",
          "operation": "authenticate",
          "description": "Create and print a short-lived manual pairing code.",
          "evidence": ["codex-cli-0.162.1-help", "codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#codex-remote-control",
          "notes": ["Experimental. The daemon must already be running."]
        },
        {
          "id": "codex-thread-rename",
          "family": "thread-naming",
          "surface": "interactive",
          "command": "/rename [name]",
          "operation": "rename",
          "description": "Rename the current thread; a bare /rename opens the naming prompt.",
          "evidence": ["codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#rename-the-current-chat-with-rename"
        },
        {
          "id": "codex-external-import",
          "family": "migration",
          "surface": "interactive",
          "command": "/import",
          "operation": "import",
          "description": "Import setup, project files and recent chats from Claude Code or Cursor.",
          "evidence": ["codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#import-claude-code-or-cursor-setup-with-import",
          "notes": [
            "The source description names Claude Code only; the docs add Cursor. Covers up to 50 chats from the last 30 days."
          ]
        },
        {
          "id": "codex-account-usage",
          "family": "usage",
          "surface": "interactive",
          "command": "/usage [daily|weekly|cumulative]",
          "operation": "inspect",
          "description": "View account usage analytics, or redeem a usage-limit reset.",
          "evidence": ["codex-developer-commands-docs"],
          "reference": "https://learn.chatgpt.com/docs/developer-commands#view-account-usage-with-usage",
          "notes": ["Redeeming consumes a reset. Requires ChatGPT sign-in."]
        }
      ]
    },
    {
      "harness": "claude-code",
      "observedVersion": "2.1.296",
      "commandGroupAliases": {
        "claude plugin": "claude plugins"
      },
      "notes": [
        "Some plugin authoring and evaluation commands are newer than the public reference, so each command keeps its live help evidence.",
        "Plugin installs that run a marketplace-declared command need --accept-command <sha256> without a TTY.",
        "Interactive commands are recorded separately from their shell equivalents."
      ],
      "commands": [
        {
          "id": "claude-mcp-add",
          "family": "mcp",
          "surface": "cli",
          "command": "claude mcp add [options] <name> <commandOrUrl> [args...]",
          "operation": "add",
          "description": "Add a stdio, SSE or HTTP MCP server.",
          "evidence": ["claude-cli-2.1.296-help", "claude-mcp-docs"],
          "reference": "https://code.claude.com/docs/en/mcp#installing-mcp-servers",
          "notes": ["WebSocket servers can only be added with add-json or .mcp.json."]
        },
        {
          "id": "claude-mcp-add-json",
          "family": "mcp",
          "surface": "cli",
          "command": "claude mcp add-json [options] <name> <json>",
          "operation": "add",
          "description": "Add a stdio, SSE, HTTP or WebSocket MCP server from a JSON string.",
          "evidence": ["claude-cli-2.1.296-help", "claude-mcp-docs"],
          "reference": "https://code.claude.com/docs/en/mcp#add-mcp-servers-from-json-configuration"
        },
        {
          "id": "claude-mcp-add-desktop",
          "family": "mcp",
          "surface": "cli",
          "command": "claude mcp add-from-claude-desktop [-s <scope>]",
          "operation": "import",
          "description": "Import MCP servers from Claude Desktop on macOS or WSL.",
          "evidence": ["claude-cli-2.1.296-help", "claude-mcp-docs"],
          "reference": "https://code.claude.com/docs/en/mcp#import-mcp-servers-from-claude-desktop"
        },
        {
          "id": "claude-mcp-get",
          "family": "mcp",
          "surface": "cli",
          "command": "claude mcp get <name>",
          "operation": "inspect",
          "description": "Show an MCP server and its approval or health state.",
          "evidence": ["claude-cli-2.1.296-help", "claude-mcp-docs"],
          "reference": "https://code.claude.com/docs/en/mcp#managing-your-servers",
          "notes": [
            "Hides the command, arguments and environment of plugin-provided stdio servers."
          ]
        },
        {
          "id": "claude-mcp-list",
          "family": "mcp",
          "surface": "cli",
          "command": "claude mcp list",
          "operation": "list",
          "description": "List configured MCP servers and their health.",
          "evidence": ["claude-cli-2.1.296-help", "claude-mcp-docs"],
          "reference": "https://code.claude.com/docs/en/mcp#managing-your-servers",
          "notes": ["Unapproved .mcp.json servers show as pending and are not connected."]
        },
        {
          "id": "claude-mcp-login",
          "family": "mcp",
          "surface": "cli",
          "command": "claude mcp login [--no-browser] <name>",
          "operation": "authenticate",
          "description": "Sign in to an HTTP, SSE or claude.ai connector MCP server.",
          "evidence": ["claude-cli-2.1.296-help", "claude-mcp-docs"],
          "reference": "https://code.claude.com/docs/en/mcp#authenticate-from-the-command-line"
        },
        {
          "id": "claude-mcp-logout",
          "family": "mcp",
          "surface": "cli",
          "command": "claude mcp logout <name>",
          "operation": "deauthenticate",
          "description": "Clear stored OAuth credentials for an MCP server.",
          "evidence": ["claude-cli-2.1.296-help", "claude-mcp-docs"],
          "reference": "https://code.claude.com/docs/en/mcp#authenticate-from-the-command-line"
        },
        {
          "id": "claude-mcp-remove",
          "family": "mcp",
          "surface": "cli",
          "command": "claude mcp remove [-s <scope>] <name>",
          "operation": "remove",
          "description": "Remove an MCP server from a chosen or detected scope.",
          "evidence": ["claude-cli-2.1.296-help", "claude-mcp-docs"],
          "reference": "https://code.claude.com/docs/en/mcp#managing-your-servers",
          "notes": ["Also deletes a remote server's stored OAuth tokens."]
        },
        {
          "id": "claude-mcp-reset",
          "family": "mcp",
          "surface": "cli",
          "command": "claude mcp reset-project-choices",
          "operation": "reset-approvals",
          "description": "Reset approved and rejected .mcp.json server choices.",
          "evidence": ["claude-cli-2.1.296-help", "claude-mcp-docs"],
          "reference": "https://code.claude.com/docs/en/mcp#project-scope"
        },
        {
          "id": "claude-mcp-serve",
          "family": "mcp",
          "surface": "cli",
          "command": "claude mcp serve",
          "operation": "serve",
          "description": "Run Claude Code as a stdio MCP server.",
          "evidence": ["claude-cli-2.1.296-help", "claude-mcp-docs"],
          "reference": "https://code.claude.com/docs/en/mcp#use-claude-code-as-an-mcp-server"
        },
        {
          "id": "claude-mcp-panel",
          "family": "mcp",
          "surface": "interactive",
          "command": "/mcp",
          "operation": "manage",
          "description": "Open the MCP status and sign-in panel.",
          "evidence": ["claude-mcp-docs"],
          "reference": "https://code.claude.com/docs/en/mcp#managing-your-servers",
          "notes": ["With -p it prints a text status summary."]
        },
        {
          "id": "claude-mcp-enable-command",
          "family": "mcp",
          "surface": "interactive",
          "command": "/mcp enable [<server>|all]",
          "operation": "enable",
          "description": "Re-enable a disabled MCP server, or all of them.",
          "evidence": ["claude-mcp-docs"],
          "reference": "https://code.claude.com/docs/en/mcp#disable-a-server-without-removing-it"
        },
        {
          "id": "claude-mcp-disable-command",
          "family": "mcp",
          "surface": "interactive",
          "command": "/mcp disable [<server>|all]",
          "operation": "disable",
          "description": "Stop connecting to an MCP server while keeping its configuration.",
          "evidence": ["claude-mcp-docs"],
          "reference": "https://code.claude.com/docs/en/mcp#disable-a-server-without-removing-it",
          "notes": ["Recorded per project in ~/.claude.json."]
        },
        {
          "id": "claude-mcp-reconnect-command",
          "family": "mcp",
          "surface": "interactive",
          "command": "/mcp reconnect (<server>|all)",
          "operation": "reconnect",
          "description": "Reconnect one MCP server, or retry every failed one.",
          "evidence": ["claude-mcp-docs"],
          "reference": "https://code.claude.com/docs/en/mcp#retry-failed-servers-yourself"
        },
        {
          "id": "claude-plugin-configure",
          "family": "plugin",
          "surface": "cli",
          "command": "claude plugin configure [--json] [--values-stdin] <plugin>",
          "operation": "configure",
          "description": "Show a plugin's options and which are unset, or save values read from stdin.",
          "evidence": ["claude-cli-2.1.296-help", "claude-plugins-cli-docs"],
          "reference": "https://code.claude.com/docs/en/plugins/cli-reference#plugin-configure",
          "notes": ["Added in 2.1.285. Takes the qualified name@marketplace id."]
        },
        {
          "id": "claude-plugin-details",
          "family": "plugin",
          "surface": "cli",
          "command": "claude plugin details <name>",
          "operation": "inspect",
          "description": "Show a plugin's components and projected token cost.",
          "evidence": ["claude-cli-2.1.296-help", "claude-plugins-cli-docs"],
          "reference": "https://code.claude.com/docs/en/plugins/cli-reference#plugin-details"
        },
        {
          "id": "claude-plugin-disable",
          "family": "plugin",
          "surface": "cli",
          "command": "claude plugin disable [-a|--all] [-s <scope>] [--json] [plugin]",
          "operation": "disable",
          "description": "Disable one or all enabled plugins.",
          "evidence": ["claude-cli-2.1.296-help", "claude-plugins-cli-docs"],
          "reference": "https://code.claude.com/docs/en/plugins/cli-reference#plugin-disable"
        },
        {
          "id": "claude-plugin-enable",
          "family": "plugin",
          "surface": "cli",
          "command": "claude plugin enable [-s <scope>] [--json] <plugin>",
          "operation": "enable",
          "description": "Enable a disabled plugin.",
          "evidence": ["claude-cli-2.1.296-help", "claude-plugins-cli-docs"],
          "reference": "https://code.claude.com/docs/en/plugins/cli-reference#plugin-enable"
        },
        {
          "id": "claude-plugin-eval",
          "family": "plugin",
          "surface": "cli",
          "command": "claude plugin eval [options] [target]",
          "operation": "evaluate",
          "description": "Run and score a plugin's eval cases against a no-plugin baseline.",
          "evidence": ["claude-cli-2.1.296-help", "claude-plugins-cli-docs"],
          "reference": "https://code.claude.com/docs/en/plugins/cli-reference#plugin-eval",
          "notes": [
            "Asks for confirmation in an untrusted plugin directory; --trust-plugin answers for CI. Scaffold scripts and real MCP servers start only on opt-in and run outside the sandbox.",
            "-j/--concurrency runs up to 8 agent runs at once on your credential."
          ]
        },
        {
          "id": "claude-plugin-eval-init",
          "family": "plugin",
          "surface": "cli",
          "command": "claude plugin eval init [name]",
          "operation": "scaffold",
          "description": "Write a plugin eval suite through an interview.",
          "evidence": ["claude-cli-2.1.296-help", "claude-plugins-cli-docs"],
          "reference": "https://code.claude.com/docs/en/plugins/cli-reference#plugin-eval-init",
          "notes": ["--bare <name> writes a blank single-case template instead."]
        },
        {
          "id": "claude-plugin-init",
          "family": "plugin",
          "surface": "cli",
          "command": "claude plugin init <name>",
          "operation": "scaffold",
          "description": "Create a plugin at ~/.claude/skills/<name>/, loaded next session.",
          "evidence": ["claude-cli-2.1.296-help", "claude-plugins-cli-docs"],
          "aliases": ["claude plugin new <name>"],
          "reference": "https://code.claude.com/docs/en/plugins/cli-reference#plugin-init"
        },
        {
          "id": "claude-plugin-install",
          "family": "plugin",
          "surface": "cli",
          "command": "claude plugin install [options] <plugin>",
          "operation": "install",
          "description": "Install a plugin from an available marketplace.",
          "evidence": ["claude-cli-2.1.296-help", "claude-plugins-cli-docs"],
          "aliases": ["claude plugin i <plugin>"],
          "reference": "https://code.claude.com/docs/en/plugins/cli-reference#plugin-install",
          "notes": [
            "--marketplace <source> adds the marketplace first (2.1.292+). --config sets options, including <server>.<key>=<value>.",
            "--json prints one result line; --accept-command <sha256> accepts exactly the displayed marketplace command; -y is required without a TTY."
          ]
        },
        {
          "id": "claude-plugin-list",
          "family": "plugin",
          "surface": "cli",
          "command": "claude plugin list [--json] [--available] [--data-size [plugin]]",
          "operation": "list",
          "description": "List installed plugins, optionally with available ones and data sizes.",
          "evidence": ["claude-cli-2.1.296-help", "claude-plugins-cli-docs"],
          "reference": "https://code.claude.com/docs/en/plugins/cli-reference#plugin-list",
          "notes": ["--available and --data-size require --json."]
        },
        {
          "id": "claude-plugin-prune",
          "family": "plugin",
          "surface": "cli",
          "command": "claude plugin prune [--dry-run] [-s <scope>] [-y]",
          "operation": "prune",
          "description": "Remove automatically installed dependencies that are no longer needed.",
          "evidence": ["claude-cli-2.1.296-help", "claude-plugins-cli-docs"],
          "aliases": ["claude plugin autoremove"],
          "reference": "https://code.claude.com/docs/en/plugins/cli-reference#plugin-prune"
        },
        {
          "id": "claude-plugin-tag",
          "family": "plugin",
          "surface": "cli",
          "command": "claude plugin tag [options] [path]",
          "operation": "release-tag",
          "description": "Create a {name}--v{version} Git tag after checking the manifest.",
          "evidence": ["claude-cli-2.1.296-help", "claude-plugins-cli-docs"],
          "reference": "https://code.claude.com/docs/en/plugins/cli-reference#plugin-tag"
        },
        {
          "id": "claude-plugin-test",
          "family": "plugin",
          "surface": "cli",
          "command": "claude plugin test [dir]",
          "operation": "evaluate",
          "description": "Run a mod's *.test.ts files in a hook-like environment.",
          "evidence": ["claude-cli-2.1.296-help", "claude-plugins-cli-docs"],
          "reference": "https://code.claude.com/docs/en/plugins/cli-reference#plugin-test",
          "notes": ["Needs no session, sign-in or network; exits 1 on failure."]
        },
        {
          "id": "claude-plugin-uninstall",
          "family": "plugin",
          "surface": "cli",
          "command": "claude plugin uninstall [options] <plugin>",
          "operation": "uninstall",
          "description": "Uninstall a plugin from a scope.",
          "evidence": ["claude-cli-2.1.296-help", "claude-plugins-cli-docs"],
          "aliases": ["claude plugin remove <plugin>"],
          "reference": "https://code.claude.com/docs/en/plugins/cli-reference#plugin-uninstall",
          "notes": [
            "Deletes the plugin's data unless --keep-data; --prune also removes orphaned dependencies."
          ]
        },
        {
          "id": "claude-plugin-update",
          "family": "plugin",
          "surface": "cli",
          "command": "claude plugin update [options] <plugin>",
          "operation": "update",
          "description": "Update a plugin to its latest version; restart to apply.",
          "evidence": ["claude-cli-2.1.296-help", "claude-plugins-cli-docs"],
          "reference": "https://code.claude.com/docs/en/plugins/cli-reference#plugin-update"
        },
        {
          "id": "claude-plugin-validate",
          "family": "plugin",
          "surface": "cli",
          "command": "claude plugin validate [--json] [--strict] <path>",
          "operation": "validate",
          "description": "Validate a plugin or marketplace manifest, or a directory's skills, agents and commands.",
          "evidence": ["claude-cli-2.1.296-help", "claude-plugins-cli-docs"],
          "reference": "https://code.claude.com/docs/en/plugins/cli-reference#plugin-validate"
        },
        {
          "id": "claude-plugin-manager",
          "family": "plugin",
          "surface": "interactive",
          "command": "/plugin [subcommand]",
          "operation": "manage",
          "description": "Open the plugin panel, or run a subcommand against it.",
          "evidence": ["claude-plugins-cli-docs"],
          "aliases": ["/plugins"],
          "reference": "https://code.claude.com/docs/en/plugins/cli-reference#plugin-in-a-session",
          "notes": [
            "Interactive terminal only. Subcommands include list, install, manage, stats, enable, disable, uninstall, configure, validate, tag and marketplace."
          ]
        },
        {
          "id": "claude-plugin-reload",
          "family": "plugin",
          "surface": "interactive",
          "command": "/reload-plugins [--force]",
          "operation": "reload",
          "description": "Apply pending plugin changes without restarting.",
          "evidence": ["claude-plugins-cli-docs"],
          "reference": "https://code.claude.com/docs/en/plugins/cli-reference#reload-plugins",
          "notes": ["Skips a reload that would invalidate the prompt cache unless --force."]
        },
        {
          "id": "claude-marketplace-add",
          "family": "plugin-marketplace",
          "surface": "cli",
          "command": "claude plugin marketplace add [options] <source>",
          "operation": "add",
          "description": "Add a plugin marketplace from a GitHub repo, URL or local path.",
          "evidence": ["claude-cli-2.1.296-help", "claude-plugins-cli-docs"],
          "reference": "https://code.claude.com/docs/en/plugins/cli-reference#plugin-marketplace-add",
          "notes": ["--claudeai, --sparse, --scope, --json."]
        },
        {
          "id": "claude-marketplace-list",
          "family": "plugin-marketplace",
          "surface": "cli",
          "command": "claude plugin marketplace list [--json]",
          "operation": "list",
          "description": "List configured plugin marketplaces.",
          "evidence": ["claude-cli-2.1.296-help", "claude-plugins-cli-docs"],
          "reference": "https://code.claude.com/docs/en/plugins/cli-reference#plugin-marketplace-list"
        },
        {
          "id": "claude-marketplace-remove",
          "family": "plugin-marketplace",
          "surface": "cli",
          "command": "claude plugin marketplace remove [--scope <scope>] [--json] <name>",
          "operation": "remove",
          "description": "Remove a configured plugin marketplace.",
          "evidence": ["claude-cli-2.1.296-help", "claude-plugins-cli-docs"],
          "aliases": ["claude plugin marketplace rm <name>"],
          "reference": "https://code.claude.com/docs/en/plugins/cli-reference#plugin-marketplace-remove",
          "notes": ["Without --scope it removes the marketplace from every scope."]
        },
        {
          "id": "claude-marketplace-update",
          "family": "plugin-marketplace",
          "surface": "cli",
          "command": "claude plugin marketplace update [--json] [name]",
          "operation": "update",
          "description": "Refresh one or all plugin marketplaces.",
          "evidence": ["claude-cli-2.1.296-help", "claude-plugins-cli-docs"],
          "reference": "https://code.claude.com/docs/en/plugins/cli-reference#plugin-marketplace-update",
          "notes": ["--json works only with a name."]
        },
        {
          "id": "claude-marketplace-command",
          "family": "plugin-marketplace",
          "surface": "interactive",
          "command": "/plugin marketplace (add|list|update|remove)",
          "operation": "manage",
          "description": "Add, list, refresh or remove marketplaces from a session.",
          "evidence": ["claude-plugins-cli-docs"],
          "aliases": ["/marketplace"],
          "reference": "https://code.claude.com/docs/en/plugins/cli-reference#plugin-in-a-session"
        },
        {
          "id": "claude-session-dispatch",
          "family": "supervised-session",
          "surface": "cli",
          "command": "claude --bg [--name <name>] [prompt]",
          "operation": "dispatch",
          "description": "Start a supervised session that keeps running without a terminal, and print its short id.",
          "evidence": ["claude-cli-2.1.296-help", "claude-agent-view-docs"],
          "aliases": ["claude --background [prompt]"],
          "reference": "https://code.claude.com/docs/en/agent-view#from-your-shell",
          "notes": [
            "Rejected with -p. With --resume <session-id> it continues that session in the background.",
            "Checks workspace trust; an untrusted directory errors in a script."
          ]
        },
        {
          "id": "claude-session-dispatch-exec",
          "family": "supervised-session",
          "surface": "cli",
          "command": "claude --bg --exec <command>",
          "operation": "dispatch",
          "description": "Run a shell job under the supervisor instead of a model session.",
          "evidence": ["claude-cli-2.1.296-help", "claude-agent-view-docs"],
          "reference": "https://code.claude.com/docs/en/agent-view#run-a-shell-command",
          "notes": [
            "Output stays in memory; the row is cleaned up about 5 minutes after exit. Not shown in claude --help."
          ]
        },
        {
          "id": "claude-session-dispatch-agent",
          "family": "supervised-session",
          "surface": "cli",
          "command": "claude --bg --agent <agent> [prompt]",
          "operation": "dispatch",
          "description": "Start a supervised session whose main agent is a named subagent definition.",
          "evidence": ["claude-agent-view-docs"],
          "reference": "https://code.claude.com/docs/en/agent-view#from-your-shell",
          "notes": ["An unknown name still reports as backgrounded, then exits immediately."]
        },
        {
          "id": "claude-agents-view",
          "family": "supervised-session",
          "surface": "cli",
          "command": "claude agents [options]",
          "operation": "manage",
          "description": "Open agent view to monitor and start supervised sessions.",
          "evidence": ["claude-cli-2.1.296-help", "claude-agent-view-docs"],
          "reference": "https://code.claude.com/docs/en/agent-view#manage-sessions-from-the-shell",
          "notes": ["Requires an interactive terminal."]
        },
        {
          "id": "claude-agents-list",
          "family": "supervised-session",
          "surface": "cli",
          "command": "claude agents --json [--all] [--cwd <path>]",
          "operation": "list",
          "description": "Print active interactive and background sessions as JSON.",
          "evidence": ["claude-cli-2.1.296-help", "claude-agent-view-docs"],
          "reference": "https://code.claude.com/docs/en/agent-view#list-sessions-as-json",
          "notes": [
            "State is working, blocked, done, failed or stopped, on background entries only."
          ]
        },
        {
          "id": "claude-session-attach",
          "family": "supervised-session",
          "surface": "cli",
          "command": "claude attach <id|name>",
          "operation": "attach",
          "description": "Open a supervised session in this terminal, restarting it if it exited.",
          "evidence": ["claude-cli-2.1.296-help", "claude-agent-view-docs"],
          "reference": "https://code.claude.com/docs/en/agent-view#attach-to-a-session",
          "notes": [
            "Part of the session name works while it runs (2.1.290+); use the id to restart a stopped one. Ctrl+Z returns to the shell."
          ]
        },
        {
          "id": "claude-session-logs",
          "family": "supervised-session",
          "surface": "cli",
          "command": "claude logs <id|name>",
          "operation": "logs",
          "description": "Print a supervised session's recent output.",
          "evidence": ["claude-cli-2.1.296-help", "claude-agent-view-docs"],
          "reference": "https://code.claude.com/docs/en/agent-view#manage-sessions-from-the-shell"
        },
        {
          "id": "claude-session-stop",
          "family": "supervised-session",
          "surface": "cli",
          "command": "claude stop <id>",
          "operation": "stop",
          "description": "Stop a supervised session's process while keeping its conversation.",
          "evidence": ["claude-cli-2.1.296-help", "claude-agent-view-docs"],
          "aliases": ["claude kill <id>"],
          "reference": "https://code.claude.com/docs/en/agent-view#manage-sessions-from-the-shell"
        },
        {
          "id": "claude-session-delete",
          "family": "supervised-session",
          "surface": "cli",
          "command": "claude rm <id> [--discard-unpushed <commit>@<worktree-id>] [--force-remove-worktree <worktree-id>]",
          "operation": "delete",
          "description": "Remove a supervised session from the list, and its worktree when safe.",
          "evidence": ["claude-cli-2.1.296-help", "claude-agent-view-docs"],
          "reference": "https://code.claude.com/docs/en/agent-view#what-deleting-a-session-removes",
          "notes": ["The conversation transcript stays on disk."]
        },
        {
          "id": "claude-session-respawn",
          "family": "supervised-session",
          "surface": "cli",
          "command": "claude respawn <id>|--all",
          "operation": "restart",
          "description": "Restart one supervised session, or every running one, on the installed binary.",
          "evidence": ["claude-cli-2.1.296-help", "claude-agent-view-docs"],
          "reference": "https://code.claude.com/docs/en/agent-view#manage-sessions-from-the-shell"
        },
        {
          "id": "claude-session-background-command",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/background [prompt]",
          "operation": "dispatch",
          "description": "Move the current conversation into a supervised session and free the terminal.",
          "evidence": ["claude-agent-view-docs"],
          "aliases": ["/bg [prompt]"],
          "reference": "https://code.claude.com/docs/en/agent-view#send-the-session-to-the-background",
          "notes": ["An in-flight response continues."]
        },
        {
          "id": "claude-session-fork-command",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/fork [prompt]",
          "operation": "fork",
          "description": "Copy the current conversation into a new supervised session.",
          "evidence": ["claude-agent-view-docs"],
          "reference": "https://code.claude.com/docs/en/agent-view#copy-the-session-with-%2Ffork",
          "notes": ["Requires 2.1.212+; with agent view off it starts a forked subagent instead."]
        },
        {
          "id": "claude-session-stop-command",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/stop",
          "operation": "stop",
          "description": "Stop the background session you are attached to, keeping its transcript and worktree.",
          "evidence": ["claude-commands-docs"],
          "reference": "https://code.claude.com/docs/en/commands#all-commands",
          "notes": ["Use /exit to detach without stopping."]
        },
        {
          "id": "claude-daemon-status",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "claude daemon status",
          "operation": "status",
          "description": "Print the supervisor's pid, version, uptime and worker count.",
          "evidence": ["claude-cli-2.1.296-help", "claude-agent-view-docs"],
          "reference": "https://code.claude.com/docs/en/agent-view#the-supervisor-process",
          "notes": ["Exits 1 when no supervisor runs."]
        },
        {
          "id": "claude-daemon-stop",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "claude daemon stop [--any] [--keep-workers]",
          "operation": "shutdown",
          "description": "Stop the supervisor and the sessions it hosts.",
          "evidence": ["claude-cli-2.1.296-help", "claude-agent-view-docs"],
          "reference": "https://code.claude.com/docs/en/agent-view#the-supervisor-process",
          "notes": ["--keep-workers leaves sessions running for the next supervisor."]
        },
        {
          "id": "claude-daemon-run",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "claude daemon run [json-path]",
          "operation": "serve",
          "description": "Run the supervisor in the foreground of this terminal.",
          "evidence": ["claude-cli-2.1.296-help", "claude-cli-reference-docs"],
          "reference": "https://code.claude.com/docs/en/cli-reference#cli-commands"
        },
        {
          "id": "claude-daemon-logs",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "claude daemon logs",
          "operation": "logs",
          "description": "Follow the supervisor log until Ctrl+C.",
          "evidence": ["claude-cli-2.1.296-help", "claude-agent-view-docs"],
          "reference": "https://code.claude.com/docs/en/agent-view#manage-sessions-from-the-shell"
        },
        {
          "id": "claude-daemon-uninstall",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "claude daemon uninstall",
          "operation": "uninstall",
          "description": "Remove the background service registration.",
          "evidence": ["claude-cli-2.1.296-help"],
          "notes": [
            "Service install is disabled in this version, so this only cleans up an earlier registration. Not documented."
          ]
        },
        {
          "id": "claude-import",
          "family": "migration",
          "surface": "cli",
          "command": "claude import [--dry-run] [--yes] [codex|gemini|cursor]",
          "operation": "import",
          "description": "Import configuration from Codex, Gemini CLI or Cursor.",
          "evidence": ["claude-cli-2.1.296-help", "claude-cli-reference-docs"],
          "reference": "https://code.claude.com/docs/en/cli-reference#cli-commands",
          "notes": [
            "Starts a session that runs /import. Unavailable on Bedrock, Foundry and some other platforms."
          ]
        },
        {
          "id": "claude-import-command",
          "family": "migration",
          "surface": "interactive",
          "command": "/import [codex|gemini|cursor] [--dry-run] [--yes]",
          "operation": "import",
          "description": "Bring instructions, MCP servers, commands, subagents and skills from another agent.",
          "evidence": ["claude-commands-docs"],
          "reference": "https://code.claude.com/docs/en/commands#all-commands"
        },
        {
          "id": "claude-session-name-flag",
          "family": "thread-naming",
          "surface": "cli",
          "command": "claude -n <name>",
          "operation": "rename",
          "description": "Name the session at startup, as shown in the prompt box, /resume picker and terminal title.",
          "evidence": ["claude-cli-2.1.296-help", "claude-sessions-docs"],
          "aliases": ["claude --name <name>"],
          "reference": "https://code.claude.com/docs/en/sessions#name-your-sessions",
          "notes": ["Resume later with claude --resume <name>."]
        },
        {
          "id": "claude-rename-command",
          "family": "thread-naming",
          "surface": "interactive",
          "command": "/rename [name]",
          "operation": "rename",
          "description": "Rename the current session, or generate a name when none is given.",
          "evidence": ["claude-sessions-docs"],
          "reference": "https://code.claude.com/docs/en/sessions#name-your-sessions",
          "notes": ["Names are capped at 200 characters."]
        },
        {
          "id": "claude-usage-command",
          "family": "usage",
          "surface": "interactive",
          "command": "/usage",
          "operation": "inspect",
          "description": "Show session cost, plan usage limits and activity stats.",
          "evidence": ["claude-costs-docs"],
          "aliases": ["/cost", "/stats"],
          "reference": "https://code.claude.com/docs/en/costs#using-the-usage-command",
          "notes": ["/stats opens on the Stats tab."]
        },
        {
          "id": "claude-usage-credits-command",
          "family": "usage",
          "surface": "interactive",
          "command": "/usage-credits",
          "operation": "configure",
          "description": "Set up usage credits, or request them from an admin, when a limit is hit.",
          "evidence": ["claude-costs-docs"],
          "reference": "https://code.claude.com/docs/en/costs#add-usage-credits-to-your-subscription",
          "notes": ["Previously /extra-usage."]
        }
      ]
    },
    {
      "harness": "cursor-agent",
      "observedVersion": "2026.10.12-d47ca18",
      "notes": [
        "Nested --help at this version prints the top-level help, so subcommand syntax for plugin marketplaces and in-session commands comes from the docs and changelog.",
        "agent env, agent cloud and agent automations exist behind feature flags and are not recorded."
      ],
      "commands": [
        {
          "id": "cursor-mcp-list",
          "family": "mcp",
          "surface": "cli",
          "command": "agent mcp list",
          "operation": "list",
          "description": "List configured MCP servers and their status.",
          "evidence": ["cursor-agent-2026.10.12-help", "cursor-cli-mcp-docs"],
          "aliases": ["cursor-agent mcp list"],
          "reference": "https://cursor.com/docs/cli/mcp#list-configured-servers"
        },
        {
          "id": "cursor-mcp-list-tools",
          "family": "mcp",
          "surface": "cli",
          "command": "agent mcp list-tools <identifier>",
          "operation": "inspect",
          "description": "List the tools an MCP server exposes and their argument names.",
          "evidence": ["cursor-agent-2026.10.12-help", "cursor-cli-mcp-docs"],
          "reference": "https://cursor.com/docs/cli/mcp#list-available-tools"
        },
        {
          "id": "cursor-mcp-login",
          "family": "mcp",
          "surface": "cli",
          "command": "agent mcp login <identifier>",
          "operation": "authenticate",
          "description": "Sign in to an MCP server configured in .cursor/mcp.json or ~/.cursor/mcp.json.",
          "evidence": ["cursor-agent-2026.10.12-help", "cursor-cli-mcp-docs"],
          "reference": "https://cursor.com/docs/cli/mcp#login-to-mcp-server"
        },
        {
          "id": "cursor-mcp-enable",
          "family": "mcp",
          "surface": "cli",
          "command": "agent mcp enable <identifier>",
          "operation": "enable",
          "description": "Add an MCP server to the local approved list.",
          "evidence": ["cursor-agent-2026.10.12-help", "cursor-cli-mcp-docs"],
          "reference": "https://cursor.com/docs/cli/mcp#enable-mcp-server",
          "notes": ["--approve-mcps approves every server for one run."]
        },
        {
          "id": "cursor-mcp-disable",
          "family": "mcp",
          "surface": "cli",
          "command": "agent mcp disable <identifier>",
          "operation": "disable",
          "description": "Disable an MCP server so it is neither loaded nor offered for approval.",
          "evidence": ["cursor-agent-2026.10.12-help", "cursor-cli-mcp-docs"],
          "reference": "https://cursor.com/docs/cli/mcp#disable-mcp-server"
        },
        {
          "id": "cursor-slash-mcp",
          "family": "mcp",
          "surface": "interactive",
          "command": "/mcp",
          "operation": "manage",
          "description": "Open the MCP pager to browse tools, sign in or out, enable or disable servers.",
          "evidence": ["cursor-cli-changelog"],
          "reference": "https://cursor.com/docs/cli/changelog#may-14-2026"
        },
        {
          "id": "cursor-plugin-marketplace-add",
          "family": "plugin-marketplace",
          "surface": "cli",
          "command": "agent plugin marketplace add <gitUrl> [--git-ref <ref>]",
          "operation": "add",
          "description": "Register a plugin marketplace from a Git repository.",
          "evidence": ["cursor-cli-changelog"],
          "reference": "https://cursor.com/docs/cli/changelog#jul-13-2026-plugins-and-mcp",
          "notes": [
            "Live --help at this version prints the top-level help for nested commands, so this syntax comes from the docs and changelog."
          ]
        },
        {
          "id": "cursor-plugin-marketplace-list",
          "family": "plugin-marketplace",
          "surface": "cli",
          "command": "agent plugin marketplace list [--format json]",
          "operation": "list",
          "description": "List each marketplace's name, scope and Git URL.",
          "evidence": ["cursor-cli-changelog"],
          "reference": "https://cursor.com/docs/cli/changelog#jul-13-2026-plugins-and-mcp",
          "notes": [
            "Live --help at this version prints the top-level help for nested commands, so this syntax comes from the docs and changelog."
          ]
        },
        {
          "id": "cursor-plugin-marketplace-update",
          "family": "plugin-marketplace",
          "surface": "cli",
          "command": "agent plugin marketplace update <nameOrUrl>",
          "operation": "update",
          "description": "Re-index a plugin marketplace from its Git repository.",
          "evidence": ["cursor-cli-changelog"],
          "reference": "https://cursor.com/docs/cli/changelog#jul-13-2026-plugins-and-mcp",
          "notes": [
            "Live --help at this version prints the top-level help for nested commands, so this syntax comes from the docs and changelog."
          ]
        },
        {
          "id": "cursor-plugin-marketplace-remove",
          "family": "plugin-marketplace",
          "surface": "cli",
          "command": "agent plugin marketplace remove <nameOrUrl>",
          "operation": "remove",
          "description": "Remove a user-scoped plugin marketplace.",
          "evidence": ["cursor-cli-changelog"],
          "reference": "https://cursor.com/docs/cli/changelog#jul-13-2026-plugins-and-mcp",
          "notes": [
            "Live --help at this version prints the top-level help for nested commands, so this syntax comes from the docs and changelog."
          ]
        },
        {
          "id": "cursor-slash-plugin",
          "family": "plugin",
          "surface": "interactive",
          "command": "/plugin",
          "operation": "manage",
          "description": "View installed plugins, browse marketplaces, and install or uninstall plugins.",
          "evidence": ["cursor-cli-changelog"],
          "aliases": ["/plugins"],
          "reference": "https://cursor.com/docs/cli/changelog#may-20-2026",
          "notes": [
            "Install and uninstall happen in the panel; there is no shell plugin install command."
          ]
        },
        {
          "id": "cursor-ls",
          "family": "supervised-session",
          "surface": "cli",
          "command": "agent ls",
          "operation": "resume",
          "description": "Open a picker of previous chats and resume one.",
          "evidence": ["cursor-agent-2026.10.12-help", "cursor-cli-overview-docs"],
          "reference": "https://cursor.com/docs/cli/overview#sessions",
          "notes": ["Shows chats from all workspaces."]
        },
        {
          "id": "cursor-resume-latest",
          "family": "supervised-session",
          "surface": "cli",
          "command": "agent resume",
          "operation": "resume",
          "description": "Resume the most recent chat.",
          "evidence": ["cursor-agent-2026.10.12-help", "cursor-cli-overview-docs"],
          "aliases": ["agent --continue"],
          "reference": "https://cursor.com/docs/cli/overview#sessions"
        },
        {
          "id": "cursor-resume-flag",
          "family": "supervised-session",
          "surface": "cli",
          "command": "agent --resume [chatId]",
          "operation": "resume",
          "description": "Resume a chat by id, or open the picker.",
          "evidence": ["cursor-agent-2026.10.12-help", "cursor-cli-parameters-docs"],
          "reference": "https://cursor.com/docs/cli/reference/parameters#global-options"
        },
        {
          "id": "cursor-create-chat",
          "family": "supervised-session",
          "surface": "cli",
          "command": "agent create-chat",
          "operation": "create",
          "description": "Create a new empty chat and print its id.",
          "evidence": ["cursor-agent-2026.10.12-help", "cursor-cli-parameters-docs"],
          "reference": "https://cursor.com/docs/cli/reference/parameters#commands"
        },
        {
          "id": "cursor-persist-start",
          "family": "supervised-session",
          "surface": "cli",
          "command": "agent persist [options] [prompt...]",
          "operation": "dispatch",
          "description": "Start a session that keeps running after a terminal or SSH disconnect.",
          "evidence": ["cursor-agent-2026.10.12-help", "cursor-cli-changelog"],
          "reference": "https://cursor.com/docs/cli/changelog#aug-26-2026-persistent-sessions"
        },
        {
          "id": "cursor-persist-list",
          "family": "supervised-session",
          "surface": "cli",
          "command": "agent persist list",
          "operation": "list",
          "description": "List persistent sessions.",
          "evidence": ["cursor-agent-2026.10.12-help", "cursor-cli-changelog"],
          "reference": "https://cursor.com/docs/cli/changelog#aug-26-2026-persistent-sessions"
        },
        {
          "id": "cursor-persist-attach",
          "family": "supervised-session",
          "surface": "cli",
          "command": "agent persist attach <session>",
          "operation": "attach",
          "description": "Reattach this terminal to a running persistent session.",
          "evidence": ["cursor-agent-2026.10.12-help", "cursor-cli-changelog"],
          "reference": "https://cursor.com/docs/cli/changelog#aug-26-2026-persistent-sessions"
        },
        {
          "id": "cursor-persist-stop",
          "family": "supervised-session",
          "surface": "cli",
          "command": "agent persist stop <session>",
          "operation": "stop",
          "description": "Stop a persistent session.",
          "evidence": ["cursor-agent-2026.10.12-help", "cursor-cli-changelog"],
          "reference": "https://cursor.com/docs/cli/changelog#aug-26-2026-persistent-sessions"
        },
        {
          "id": "cursor-slash-detach",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/detach",
          "operation": "detach",
          "description": "Leave the persistent session running and return to the shell.",
          "evidence": ["cursor-cli-changelog"],
          "reference": "https://cursor.com/docs/cli/changelog#aug-26-2026-persistent-sessions"
        },
        {
          "id": "cursor-slash-resume",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/resume",
          "operation": "resume",
          "description": "Open recent chats and resume one.",
          "evidence": ["cursor-cli-changelog"],
          "reference": "https://cursor.com/docs/cli/changelog#jul-6-2026-sessions-and-subagents"
        },
        {
          "id": "cursor-slash-fork",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/fork",
          "operation": "fork",
          "description": "Fork the current chat into a new session.",
          "evidence": ["cursor-cli-changelog"],
          "aliases": ["/branch", "/duplicate"],
          "reference": "https://cursor.com/docs/cli/changelog#jun-9-2026-commands"
        },
        {
          "id": "cursor-cloud-handoff",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "& <message>",
          "operation": "dispatch",
          "description": "Hand the conversation to a Cloud Agent that keeps running remotely.",
          "evidence": ["cursor-cli-overview-docs"],
          "reference": "https://cursor.com/docs/cli/overview#cloud-agent-handoff",
          "notes": ["A message prefix, not a slash command."]
        },
        {
          "id": "cursor-worker-start",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "agent worker [--pool [name]] start",
          "operation": "serve",
          "description": "Run a self-hosted Cloud Agent worker on this machine.",
          "evidence": ["cursor-agent-2026.10.12-help", "cursor-cli-parameters-docs"],
          "reference": "https://cursor.com/docs/cli/reference/parameters#worker",
          "notes": [
            "Personal worker, or a team pool with --pool. --management-addr serves health and metrics endpoints."
          ]
        },
        {
          "id": "cursor-worker-controller",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "agent worker controller --spawn <hook> (--pool <name>... | --all-pools) [--warm-idle <count>]",
          "operation": "serve",
          "description": "Watch a pool's pending requests and start or wake workers through a hook.",
          "evidence": ["cursor-agent-2026.10.12-help", "cursor-self-hosted-pool-docs"],
          "reference": "https://cursor.com/docs/cloud-agent/self-hosted/pool#worker-controller"
        },
        {
          "id": "cursor-worker-debug",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "agent worker debug",
          "operation": "validate",
          "description": "Run preflight checks for worker sign-in, privacy, routing and visibility.",
          "evidence": ["cursor-agent-2026.10.12-help", "cursor-cli-parameters-docs"],
          "reference": "https://cursor.com/docs/cli/reference/parameters#worker"
        },
        {
          "id": "cursor-slash-rename",
          "family": "thread-naming",
          "surface": "interactive",
          "command": "/rename <name>",
          "operation": "rename",
          "description": "Rename the current chat.",
          "evidence": ["cursor-cli-changelog"],
          "reference": "https://cursor.com/docs/cli/changelog#april-2026"
        },
        {
          "id": "cursor-slash-usage",
          "family": "usage",
          "surface": "interactive",
          "command": "/usage",
          "operation": "inspect",
          "description": "Show plan usage, on-demand spend and the billing-cycle reset date.",
          "evidence": ["cursor-cli-changelog"],
          "reference": "https://cursor.com/docs/cli/changelog#jul-13-2026-usage-and-models"
        }
      ]
    },
    {
      "harness": "opencode",
      "variant": "1.x",
      "default": false,
      "observedVersion": "1.19.0",
      "notes": [
        "opencode-ai 1.x. There is no background service; serve and web run in the foreground and attach connects to one."
      ],
      "commands": [
        {
          "id": "opencode-1-mcp-add",
          "family": "mcp",
          "surface": "cli",
          "command": "opencode mcp add [name] [--url <url>] [--env KEY=VALUE] [--header KEY=VALUE]",
          "operation": "add",
          "description": "Add a local or remote MCP server to the config.",
          "evidence": ["opencode-1.19.0-help", "opencode-1-19-0-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/733b2c627e5aec39cb33cc22373bdce33053ef2c/packages/opencode/src/cli/cmd/mcp.ts#L430",
          "notes": ["Without a name it runs a wizard that asks for project or global scope."]
        },
        {
          "id": "opencode-1-mcp-list",
          "family": "mcp",
          "surface": "cli",
          "command": "opencode mcp list",
          "operation": "list",
          "description": "List configured MCP servers and their connection status.",
          "evidence": ["opencode-1.19.0-help", "opencode-1-19-0-source"],
          "aliases": ["opencode mcp ls"],
          "reference": "https://github.com/anomalyco/opencode/blob/733b2c627e5aec39cb33cc22373bdce33053ef2c/packages/opencode/src/cli/cmd/mcp.ts#L110"
        },
        {
          "id": "opencode-1-mcp-auth",
          "family": "mcp",
          "surface": "cli",
          "command": "opencode mcp auth [name]",
          "operation": "authenticate",
          "description": "Run the OAuth browser sign-in for a remote MCP server.",
          "evidence": ["opencode-1.19.0-help", "opencode-mcp-docs"],
          "reference": "https://opencode.ai/docs/mcp-servers/#authenticating"
        },
        {
          "id": "opencode-1-mcp-auth-list",
          "family": "mcp",
          "surface": "cli",
          "command": "opencode mcp auth list",
          "operation": "list",
          "description": "List OAuth-capable MCP servers and their sign-in status.",
          "evidence": ["opencode-1.19.0-help", "opencode-1-19-0-source"],
          "aliases": ["opencode mcp auth ls"],
          "reference": "https://github.com/anomalyco/opencode/blob/733b2c627e5aec39cb33cc22373bdce33053ef2c/packages/opencode/src/cli/cmd/mcp.ts#L307"
        },
        {
          "id": "opencode-1-mcp-logout",
          "family": "mcp",
          "surface": "cli",
          "command": "opencode mcp logout [name]",
          "operation": "deauthenticate",
          "description": "Remove stored OAuth credentials for an MCP server.",
          "evidence": ["opencode-1.19.0-help", "opencode-1-19-0-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/733b2c627e5aec39cb33cc22373bdce33053ef2c/packages/opencode/src/cli/cmd/mcp.ts#L337"
        },
        {
          "id": "opencode-1-mcp-debug",
          "family": "mcp",
          "surface": "cli",
          "command": "opencode mcp debug <name>",
          "operation": "inspect",
          "description": "Diagnose an MCP server's OAuth connection.",
          "evidence": ["opencode-1.19.0-help", "opencode-mcp-docs"],
          "reference": "https://opencode.ai/docs/mcp-servers/#debugging"
        },
        {
          "id": "opencode-1-mcps",
          "family": "mcp",
          "surface": "interactive",
          "command": "/mcps",
          "operation": "manage",
          "description": "Enable or disable configured MCP servers for the session.",
          "evidence": ["opencode-1-19-0-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/733b2c627e5aec39cb33cc22373bdce33053ef2c/packages/tui/src/app.tsx#L678"
        },
        {
          "id": "opencode-1-status",
          "family": "mcp",
          "surface": "interactive",
          "command": "/status",
          "operation": "inspect",
          "description": "Show the status of MCP servers, language servers, formatters and plugins.",
          "evidence": ["opencode-1-19-0-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/733b2c627e5aec39cb33cc22373bdce33053ef2c/packages/tui/src/app.tsx#L754"
        },
        {
          "id": "opencode-1-plugin-install",
          "family": "plugin",
          "surface": "cli",
          "command": "opencode plugin <module> [-g|--global] [-f|--force]",
          "operation": "install",
          "description": "Install an npm plugin and add it to the project or global config.",
          "evidence": ["opencode-1.19.0-help", "opencode-1-19-0-source"],
          "aliases": ["opencode plug <module>"],
          "reference": "https://github.com/anomalyco/opencode/blob/733b2c627e5aec39cb33cc22373bdce33053ef2c/packages/opencode/src/cli/cmd/plug.ts#L179",
          "notes": [
            "--force replaces an existing version. 1.x has no plugin list, remove or update command."
          ]
        },
        {
          "id": "opencode-1-plugins-palette",
          "family": "plugin",
          "surface": "interactive",
          "command": "Ctrl+P, then Plugins",
          "operation": "manage",
          "description": "List plugins, switch them on or off, and install one.",
          "evidence": ["opencode-1-19-0-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/733b2c627e5aec39cb33cc22373bdce33053ef2c/packages/tui/src/feature-plugins/system/plugins.tsx#L242",
          "notes": ["Command palette only; there is no slash command."]
        },
        {
          "id": "opencode-1-session-list",
          "family": "supervised-session",
          "surface": "cli",
          "command": "opencode session list [-n N] [--format table|json]",
          "operation": "list",
          "description": "List stored sessions.",
          "evidence": ["opencode-1.19.0-help", "opencode-1-19-0-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/733b2c627e5aec39cb33cc22373bdce33053ef2c/packages/opencode/src/cli/cmd/session.ts#L71"
        },
        {
          "id": "opencode-1-session-delete",
          "family": "supervised-session",
          "surface": "cli",
          "command": "opencode session delete <sessionID>",
          "operation": "delete",
          "description": "Delete a session.",
          "evidence": ["opencode-1.19.0-help", "opencode-1-19-0-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/733b2c627e5aec39cb33cc22373bdce33053ef2c/packages/opencode/src/cli/cmd/session.ts#L52"
        },
        {
          "id": "opencode-1-export",
          "family": "supervised-session",
          "surface": "cli",
          "command": "opencode export [sessionID] [--sanitize]",
          "operation": "export",
          "description": "Export session data as JSON.",
          "evidence": ["opencode-1.19.0-help", "opencode-cli-stable-docs"],
          "reference": "https://opencode.ai/docs/cli/#export",
          "notes": ["--sanitize redacts transcript and file contents."]
        },
        {
          "id": "opencode-1-import",
          "family": "supervised-session",
          "surface": "cli",
          "command": "opencode import <file>",
          "operation": "import",
          "description": "Import session data from a JSON file or a share URL.",
          "evidence": ["opencode-1.19.0-help", "opencode-cli-stable-docs"],
          "reference": "https://opencode.ai/docs/cli/#import"
        },
        {
          "id": "opencode-1-resume",
          "family": "supervised-session",
          "surface": "cli",
          "command": "opencode [project] (--continue | --session <id>)",
          "operation": "resume",
          "description": "Start the interface on the last session or a given one.",
          "evidence": ["opencode-1.19.0-help", "opencode-1-19-0-source"],
          "aliases": ["opencode -c", "opencode -s <id>"],
          "reference": "https://github.com/anomalyco/opencode/blob/733b2c627e5aec39cb33cc22373bdce33053ef2c/packages/opencode/src/cli/cmd/tui.ts#L124",
          "notes": ["Add --fork to fork instead of continuing in place."]
        },
        {
          "id": "opencode-1-fork",
          "family": "supervised-session",
          "surface": "cli",
          "command": "opencode [project] (--continue | --session <id>) --fork",
          "operation": "fork",
          "description": "Fork the chosen session rather than appending to it.",
          "evidence": ["opencode-1.19.0-help", "opencode-1-19-0-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/733b2c627e5aec39cb33cc22373bdce33053ef2c/packages/opencode/src/cli/cmd/tui.ts#L135"
        },
        {
          "id": "opencode-1-attach",
          "family": "supervised-session",
          "surface": "cli",
          "command": "opencode attach <url> [--session <id>] [--fork]",
          "operation": "attach",
          "description": "Attach the interface to a running opencode server.",
          "evidence": ["opencode-1.19.0-help", "opencode-1-19-0-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/733b2c627e5aec39cb33cc22373bdce33053ef2c/packages/opencode/src/cli/cmd/attach.ts#L8",
          "notes": ["Basic auth comes from OPENCODE_SERVER_PASSWORD and OPENCODE_SERVER_USERNAME."]
        },
        {
          "id": "opencode-1-sessions",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/sessions",
          "operation": "resume",
          "description": "List sessions and switch to one.",
          "evidence": ["opencode-1-19-0-source"],
          "aliases": ["/resume", "/continue"],
          "reference": "https://github.com/anomalyco/opencode/blob/733b2c627e5aec39cb33cc22373bdce33053ef2c/packages/tui/src/app.tsx#L563",
          "notes": ["The dialog can also delete, rename and pin sessions."]
        },
        {
          "id": "opencode-1-fork-interactive",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/fork",
          "operation": "fork",
          "description": "Fork the current session from a chosen message.",
          "evidence": ["opencode-1-19-0-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/733b2c627e5aec39cb33cc22373bdce33053ef2c/packages/tui/src/routes/session/index.tsx#L544"
        },
        {
          "id": "opencode-1-export-interactive",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/export",
          "operation": "export",
          "description": "Export the conversation to Markdown and open it in $EDITOR.",
          "evidence": ["opencode-1-19-0-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/733b2c627e5aec39cb33cc22373bdce33053ef2c/packages/tui/src/routes/session/index.tsx#L951"
        },
        {
          "id": "opencode-1-share",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/share",
          "operation": "share",
          "description": "Create a public link to the current session.",
          "evidence": ["opencode-tui-docs"],
          "reference": "https://opencode.ai/docs/tui/#share",
          "notes": ["/unshare removes the link."]
        },
        {
          "id": "opencode-1-rename",
          "family": "thread-naming",
          "surface": "interactive",
          "command": "/rename",
          "operation": "rename",
          "description": "Rename the current session.",
          "evidence": ["opencode-1-19-0-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/733b2c627e5aec39cb33cc22373bdce33053ef2c/packages/tui/src/routes/session/index.tsx#L511"
        },
        {
          "id": "opencode-1-stats",
          "family": "usage",
          "surface": "cli",
          "command": "opencode stats [--days N] [--tools N] [--models [N]] [--project <p>]",
          "operation": "inspect",
          "description": "Show token usage and cost statistics.",
          "evidence": ["opencode-1.19.0-help", "opencode-1-19-0-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/733b2c627e5aec39cb33cc22373bdce33053ef2c/packages/opencode/src/cli/cmd/stats.ts#L50"
        },
        {
          "id": "opencode-1-serve",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "opencode serve [--port] [--hostname]",
          "operation": "serve",
          "description": "Start a headless opencode server.",
          "evidence": ["opencode-1.19.0-help", "opencode-cli-stable-docs"],
          "reference": "https://opencode.ai/docs/cli/#serve",
          "notes": ["OPENCODE_SERVER_PASSWORD enables basic auth."]
        },
        {
          "id": "opencode-1-web",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "opencode web [--port] [--hostname]",
          "operation": "serve",
          "description": "Start the server and open the web interface.",
          "evidence": ["opencode-1.19.0-help", "opencode-cli-stable-docs"],
          "reference": "https://opencode.ai/docs/cli/#web"
        },
        {
          "id": "opencode-1-acp",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "opencode acp [--cwd <dir>]",
          "operation": "serve",
          "description": "Start an Agent Client Protocol server over stdio.",
          "evidence": ["opencode-1.19.0-help", "opencode-cli-stable-docs"],
          "reference": "https://opencode.ai/docs/cli/#acp"
        },
        {
          "id": "opencode-1-upgrade-major",
          "family": "migration",
          "surface": "cli",
          "command": "opencode upgrade --major",
          "operation": "update",
          "description": "Install OpenCode 2 and remove OpenCode 1.",
          "evidence": ["opencode-1.19.0-help", "opencode-1-19-0-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/733b2c627e5aec39cb33cc22373bdce33053ef2c/packages/opencode/src/cli/cmd/upgrade.ts#L22",
          "notes": ["New in 1.19.0."]
        }
      ]
    },
    {
      "harness": "opencode",
      "variant": "2.x",
      "default": true,
      "observedVersion": "2.0.28",
      "notes": [
        "@opencode/cli 2.x runs one shared background service per user, managed with opencode service. Session sharing is not supported yet."
      ],
      "commands": [
        {
          "id": "opencode-2-mcp-add",
          "family": "mcp",
          "surface": "cli",
          "command": "opencode mcp add <name> [--url <url>] [--header name=value] [--env name=value] [--global] [-- <command...>]",
          "operation": "add",
          "description": "Add an MCP server to the project config, or the global config with --global.",
          "evidence": ["opencode-2.0.28-help", "opencode-v2-cli-docs"],
          "reference": "https://opencode.ai/v2/docs/cli/commands/#mcp",
          "notes": ["The name is now required."]
        },
        {
          "id": "opencode-2-mcp-list",
          "family": "mcp",
          "surface": "cli",
          "command": "opencode mcp list",
          "operation": "list",
          "description": "List configured MCP servers and their status.",
          "evidence": ["opencode-2.0.28-help", "opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/cli/src/commands/commands.ts#L225"
        },
        {
          "id": "opencode-2-mcp-auth",
          "family": "mcp",
          "surface": "cli",
          "command": "opencode mcp auth [<name>]",
          "operation": "authenticate",
          "description": "Sign in to an OAuth-capable remote MCP server.",
          "evidence": ["opencode-2.0.28-help", "opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/cli/src/commands/commands.ts#L249"
        },
        {
          "id": "opencode-2-mcp-logout",
          "family": "mcp",
          "surface": "cli",
          "command": "opencode mcp logout <name>",
          "operation": "deauthenticate",
          "description": "Remove stored OAuth credentials for an MCP server.",
          "evidence": ["opencode-2.0.28-help", "opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/cli/src/commands/commands.ts#L255"
        },
        {
          "id": "opencode-2-mcps",
          "family": "mcp",
          "surface": "interactive",
          "command": "/mcps",
          "operation": "manage",
          "description": "View, connect, disconnect or sign in to MCP servers.",
          "evidence": ["opencode-v2-cli-docs"],
          "reference": "https://opencode.ai/v2/docs/mcp-servers/#management",
          "notes": ["Removing a server means editing the config."]
        },
        {
          "id": "opencode-2-status",
          "family": "mcp",
          "surface": "interactive",
          "command": "/status",
          "operation": "inspect",
          "description": "Show MCP server connection status.",
          "evidence": ["opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/tui/src/app.tsx#L1013"
        },
        {
          "id": "opencode-2-plugin-list",
          "family": "plugin",
          "surface": "cli",
          "command": "opencode plugin list [--builtin]",
          "operation": "list",
          "description": "List plugins, optionally including built-in ones.",
          "evidence": ["opencode-2.0.28-help", "opencode-v2-cli-docs"],
          "reference": "https://opencode.ai/v2/docs/plugins/#manage"
        },
        {
          "id": "opencode-2-plugin-add",
          "family": "plugin",
          "surface": "cli",
          "command": "opencode plugin add <package>",
          "operation": "install",
          "description": "Install a plugin package and add it to the global configuration.",
          "evidence": ["opencode-2.0.28-help", "opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/cli/src/commands/commands.ts#L273",
          "notes": ["Accepts npm names with versions or ranges, and Git specs."]
        },
        {
          "id": "opencode-2-plugin-check",
          "family": "plugin",
          "surface": "cli",
          "command": "opencode plugin check [<target>]",
          "operation": "inspect",
          "description": "Check package plugins for available updates.",
          "evidence": ["opencode-2.0.28-help", "opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/cli/src/commands/commands.ts#L279",
          "notes": ["Read-only."]
        },
        {
          "id": "opencode-2-plugin-update",
          "family": "plugin",
          "surface": "cli",
          "command": "opencode plugin update [<target>]",
          "operation": "update",
          "description": "Update one or all outdated package plugins.",
          "evidence": ["opencode-2.0.28-help", "opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/cli/src/commands/commands.ts#L288"
        },
        {
          "id": "opencode-2-plugin-remove",
          "family": "plugin",
          "surface": "cli",
          "command": "opencode plugin remove <package>",
          "operation": "remove",
          "description": "Remove a plugin from the global configuration.",
          "evidence": ["opencode-2.0.28-help", "opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/cli/src/commands/commands.ts#L297"
        },
        {
          "id": "opencode-2-plugins",
          "family": "plugin",
          "surface": "interactive",
          "command": "/plugins",
          "operation": "manage",
          "description": "Switch plugins on or off, check for and apply updates, and view errors.",
          "evidence": ["opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/tui/src/feature-plugins/system/plugins.tsx#L342"
        },
        {
          "id": "opencode-2-session-list",
          "family": "supervised-session",
          "surface": "cli",
          "command": "opencode session list [-n N] [--format table|json]",
          "operation": "list",
          "description": "List top-level sessions in the current project, newest first.",
          "evidence": ["opencode-2.0.28-help", "opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/cli/src/commands/commands.ts#L421",
          "notes": ["Default limit 100."]
        },
        {
          "id": "opencode-2-session-delete",
          "family": "supervised-session",
          "surface": "cli",
          "command": "opencode session delete <sessionID>",
          "operation": "delete",
          "description": "Delete a session and its child sessions.",
          "evidence": ["opencode-2.0.28-help", "opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/cli/src/commands/commands.ts#L437"
        },
        {
          "id": "opencode-2-session-export",
          "family": "supervised-session",
          "surface": "cli",
          "command": "opencode session export [<session>] [--sanitize]",
          "operation": "export",
          "description": "Export session data as JSON.",
          "evidence": ["opencode-2.0.28-help", "opencode-v2-cli-docs"],
          "reference": "https://opencode.ai/v2/docs/cli/commands/#session",
          "notes": ["Moved from the top-level export command."]
        },
        {
          "id": "opencode-2-session-import",
          "family": "supervised-session",
          "surface": "cli",
          "command": "opencode session import <file> [--directory <dir>]",
          "operation": "import",
          "description": "Import session data from a JSON file or URL.",
          "evidence": ["opencode-2.0.28-help", "opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/cli/src/commands/commands.ts#L458",
          "notes": ["Moved from the top-level import command."]
        },
        {
          "id": "opencode-2-resume",
          "family": "supervised-session",
          "surface": "cli",
          "command": "opencode [directory] (--continue | --session <id>)",
          "operation": "resume",
          "description": "Continue the last session or a given one.",
          "evidence": ["opencode-2.0.28-help", "opencode-2-0-29-source"],
          "aliases": ["opencode -c", "opencode -s <id>"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/cli/src/commands/commands.ts#L47",
          "notes": ["The root command has no --fork in 2.x."]
        },
        {
          "id": "opencode-2-fork",
          "family": "supervised-session",
          "surface": "cli",
          "command": "opencode run (--continue | --session <id>) --fork",
          "operation": "fork",
          "description": "Fork the session before continuing.",
          "evidence": ["opencode-2.0.28-help", "opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/cli/src/commands/commands.ts#L394",
          "notes": ["Only on run and mini."]
        },
        {
          "id": "opencode-2-attach",
          "family": "supervised-session",
          "surface": "cli",
          "command": "opencode --server <url>",
          "operation": "attach",
          "description": "Connect the client to a specific server instead of the background service.",
          "evidence": ["opencode-2.0.28-help", "opencode-v2-cli-docs"],
          "reference": "https://opencode.ai/v2/docs/cli/web/#standalone",
          "notes": ["Replaces 1.x opencode attach."]
        },
        {
          "id": "opencode-2-sessions",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/sessions",
          "operation": "resume",
          "description": "List sessions and switch to one.",
          "evidence": ["opencode-2-0-29-source"],
          "aliases": ["/resume", "/continue"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/tui/src/app.tsx#L734",
          "notes": ["The dialog can also delete, rename and pin sessions."]
        },
        {
          "id": "opencode-2-fork-interactive",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/fork",
          "operation": "fork",
          "description": "Fork the current session from a chosen message.",
          "evidence": ["opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/tui/src/routes/session/index.tsx#L951"
        },
        {
          "id": "opencode-2-export-interactive",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/export",
          "operation": "export",
          "description": "Export the current session transcript.",
          "evidence": ["opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/tui/src/routes/session/index.tsx#L1224"
        },
        {
          "id": "opencode-2-rename",
          "family": "thread-naming",
          "surface": "interactive",
          "command": "/rename [title]",
          "operation": "rename",
          "description": "Rename the session, or regenerate its title with an empty argument.",
          "evidence": ["opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/tui/src/routes/session/index.tsx#L921"
        },
        {
          "id": "opencode-2-stats",
          "family": "usage",
          "surface": "cli",
          "command": "opencode stats [--days N] [--all] [--cost] [--json]",
          "operation": "inspect",
          "description": "Show usage statistics.",
          "evidence": ["opencode-2.0.28-help", "opencode-v2-cli-docs"],
          "reference": "https://opencode.ai/v2/docs/cli/commands/#stats"
        },
        {
          "id": "opencode-2-stats-interactive",
          "family": "usage",
          "surface": "interactive",
          "command": "/stats",
          "operation": "inspect",
          "description": "Open the usage statistics view.",
          "evidence": ["opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/tui/src/feature-plugins/system/stats.tsx#L200"
        },
        {
          "id": "opencode-2-serve",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "opencode serve [--hostname] [--port] [--cors <origin>]",
          "operation": "serve",
          "description": "Run the API and web server in the foreground.",
          "evidence": ["opencode-2.0.28-help", "opencode-v2-cli-docs"],
          "reference": "https://opencode.ai/v2/docs/cli/commands/#serve"
        },
        {
          "id": "opencode-2-service-start",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "opencode service start",
          "operation": "serve",
          "description": "Start the shared background server.",
          "evidence": ["opencode-2.0.28-help", "opencode-v2-cli-docs"],
          "reference": "https://opencode.ai/v2/docs/cli/commands/#service"
        },
        {
          "id": "opencode-2-service-status",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "opencode service status",
          "operation": "status",
          "description": "Show the background server's status.",
          "evidence": ["opencode-2.0.28-help", "opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/cli/src/commands/commands.ts#L476"
        },
        {
          "id": "opencode-2-service-stop",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "opencode service stop",
          "operation": "shutdown",
          "description": "Stop the background server.",
          "evidence": ["opencode-2.0.28-help", "opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/cli/src/commands/commands.ts#L477"
        },
        {
          "id": "opencode-2-service-restart",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "opencode service restart",
          "operation": "restart",
          "description": "Restart the background server.",
          "evidence": ["opencode-2.0.28-help", "opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/cli/src/commands/commands.ts#L475"
        },
        {
          "id": "opencode-2-service-get",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "opencode service get [<key>] [<name>]",
          "operation": "inspect",
          "description": "Read service settings such as host, port or password.",
          "evidence": ["opencode-2.0.28-help", "opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/cli/src/commands/commands.ts#L478"
        },
        {
          "id": "opencode-2-service-set",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "opencode service set <key> <value> [<env-value>]",
          "operation": "configure",
          "description": "Change a service setting.",
          "evidence": ["opencode-2.0.28-help", "opencode-v2-cli-docs"],
          "reference": "https://opencode.ai/v2/docs/cli/web/#configure",
          "notes": ["Changing a setting stops the server."]
        },
        {
          "id": "opencode-2-service-unset",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "opencode service unset <key> [<name>]",
          "operation": "configure",
          "description": "Reset a service setting to its default.",
          "evidence": ["opencode-2.0.28-help", "opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/cli/src/commands/commands.ts#L501"
        },
        {
          "id": "opencode-2-restart",
          "family": "session-supervisor",
          "surface": "interactive",
          "command": "/restart",
          "operation": "restart",
          "description": "Restart the background service from the interface.",
          "evidence": ["opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/tui/src/app.tsx#L1044",
          "notes": ["Only offered when connected to the managed service."]
        },
        {
          "id": "opencode-2-reload",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "opencode reload",
          "operation": "reload",
          "description": "Reload configuration without restarting the server.",
          "evidence": ["opencode-2.0.28-help", "opencode-v2-cli-docs"],
          "reference": "https://opencode.ai/v2/docs/cli/commands/#reload",
          "notes": ["Running sessions pick it up at the next step."]
        },
        {
          "id": "opencode-2-reload-interactive",
          "family": "session-supervisor",
          "surface": "interactive",
          "command": "/reload",
          "operation": "reload",
          "description": "Reload configuration from the interface.",
          "evidence": ["opencode-2-0-29-source"],
          "reference": "https://github.com/anomalyco/opencode/blob/042d0832f5f3a73eaa039a58a7d565776f6d4290/packages/tui/src/app.tsx#L1063"
        },
        {
          "id": "opencode-2-acp",
          "family": "session-supervisor",
          "surface": "cli",
          "command": "opencode acp [--login]",
          "operation": "serve",
          "description": "Start an Agent Client Protocol server over stdio.",
          "evidence": ["opencode-2.0.28-help", "opencode-v2-cli-docs"],
          "reference": "https://opencode.ai/v2/docs/cli/commands/#acp"
        }
      ]
    },
    {
      "harness": "pi",
      "observedVersion": "1.2.0",
      "notes": [
        "Shell MCP commands always use the built-in MCP and do not load extensions. In-session behaviour is documented, not live-probed."
      ],
      "commands": [
        {
          "id": "pi-mcp-add",
          "family": "mcp",
          "surface": "cli",
          "command": "pi mcp add <server> [options] (-- <command> [args...] | --url <url>)",
          "operation": "add",
          "description": "Add or replace a stdio or Streamable HTTP server in mcp.json.",
          "evidence": ["pi-1.2.0-help", "pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/cli.md#mcp-commands",
          "notes": [
            "Writes ~/.pi/agent/mcp.json, or .pi/mcp.json with -l. Does not connect; run pi mcp list. SSE is rejected."
          ]
        },
        {
          "id": "pi-mcp-remove",
          "family": "mcp",
          "surface": "cli",
          "command": "pi mcp remove <server> [-l]",
          "operation": "remove",
          "description": "Remove a server from mcp.json.",
          "evidence": ["pi-1.2.0-help", "pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/cli.md#mcp-commands",
          "notes": ["Stored OAuth credentials are kept; use pi mcp logout."]
        },
        {
          "id": "pi-mcp-list",
          "family": "mcp",
          "surface": "cli",
          "command": "pi mcp list [--json]",
          "operation": "list",
          "description": "Connect to every enabled server and print its state, tools and errors.",
          "evidence": ["pi-1.2.0-help", "pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/cli.md#mcp-commands",
          "notes": ["Exits 1 on an invalid entry or a server that fails to connect."]
        },
        {
          "id": "pi-mcp-login",
          "family": "mcp",
          "surface": "cli",
          "command": "pi mcp login <server> [--timeout <seconds>]",
          "operation": "authenticate",
          "description": "Sign in to an OAuth MCP server through the browser.",
          "evidence": ["pi-1.2.0-help", "pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/cli.md#mcp-commands",
          "notes": ["Default timeout 300 seconds; a pasted redirect URL is accepted."]
        },
        {
          "id": "pi-mcp-logout",
          "family": "mcp",
          "surface": "cli",
          "command": "pi mcp logout <server>",
          "operation": "deauthenticate",
          "description": "Delete a server's stored OAuth credentials.",
          "evidence": ["pi-1.2.0-help", "pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/cli.md#mcp-commands"
        },
        {
          "id": "pi-mcp-manager",
          "family": "mcp",
          "surface": "interactive",
          "command": "/mcp",
          "operation": "manage",
          "description": "List servers and inspect, reconnect, sign in or out, enable or disable one.",
          "evidence": ["pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/mcp.md#inspect-or-change-a-server",
          "notes": [
            "Provided by the built-in MCP extension; absent with --no-mcp or when another extension registers /mcp."
          ]
        },
        {
          "id": "pi-mcp-login-slash",
          "family": "mcp",
          "surface": "interactive",
          "command": "/mcp login <server>",
          "operation": "authenticate",
          "description": "Sign in to an OAuth MCP server from a session.",
          "evidence": ["pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/mcp.md#inspect-or-change-a-server",
          "notes": ["The session uses the new credentials on its next turn."]
        },
        {
          "id": "pi-mcp-logout-slash",
          "family": "mcp",
          "surface": "interactive",
          "command": "/mcp logout <server>",
          "operation": "deauthenticate",
          "description": "Delete stored OAuth credentials from a session.",
          "evidence": ["pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/mcp.md#inspect-or-change-a-server"
        },
        {
          "id": "pi-mcp-reconnect",
          "family": "mcp",
          "surface": "interactive",
          "command": "/mcp reconnect <server>",
          "operation": "reconnect",
          "description": "Reconnect an enabled MCP server.",
          "evidence": ["pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/mcp.md#inspect-or-change-a-server",
          "notes": ["No shell equivalent."]
        },
        {
          "id": "pi-package-install",
          "family": "plugin",
          "surface": "cli",
          "command": "pi install <source> [-l]",
          "operation": "install",
          "description": "Install a package and add it to settings.",
          "evidence": ["pi-1.2.0-help", "pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/packages.md#install-and-manage-packages",
          "notes": [
            "Sources: npm:, git:, HTTPS or SSH URLs, or a local path. Packages run extension code; project packages load only after trust."
          ]
        },
        {
          "id": "pi-package-remove",
          "family": "plugin",
          "surface": "cli",
          "command": "pi remove <source> [-l]",
          "operation": "remove",
          "description": "Remove a package and its entry from settings.",
          "evidence": ["pi-1.2.0-help", "pi-docs-1-2-0"],
          "aliases": ["pi uninstall <source>"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/cli.md#package-commands"
        },
        {
          "id": "pi-package-list",
          "family": "plugin",
          "surface": "cli",
          "command": "pi list",
          "operation": "list",
          "description": "List installed packages from user and project settings.",
          "evidence": ["pi-1.2.0-help", "pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/cli.md#package-commands"
        },
        {
          "id": "pi-package-update",
          "family": "plugin",
          "surface": "cli",
          "command": "pi update (<source> | --extensions | --all)",
          "operation": "update",
          "description": "Update one or all installed packages, optionally with pi itself.",
          "evidence": ["pi-1.2.0-help", "pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/cli.md#update-pi-or-packages",
          "notes": ["A bare pi update updates pi only. Pinned versions and Git refs are not moved."]
        },
        {
          "id": "pi-package-config",
          "family": "plugin",
          "surface": "cli",
          "command": "pi config [-l]",
          "operation": "manage",
          "description": "Open a panel to enable or disable package resources and built-in extensions.",
          "evidence": ["pi-1.2.0-help", "pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/packages.md#select-package-resources",
          "notes": ["Tab switches between global and project scope."]
        },
        {
          "id": "pi-reload",
          "family": "plugin",
          "surface": "interactive",
          "command": "/reload",
          "operation": "reload",
          "description": "Reload keybindings, extensions, skills, prompt templates, themes and context files.",
          "evidence": ["pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/slash-commands.md#runtime-and-project"
        },
        {
          "id": "pi-session-continue",
          "family": "supervised-session",
          "surface": "cli",
          "command": "pi --continue",
          "operation": "resume",
          "description": "Continue the most recent session for this project.",
          "evidence": ["pi-1.2.0-help", "pi-docs-1-2-0"],
          "aliases": ["pi -c"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/cli.md#session-options"
        },
        {
          "id": "pi-session-resume-cli",
          "family": "supervised-session",
          "surface": "cli",
          "command": "pi --resume",
          "operation": "resume",
          "description": "Open the session picker to choose a saved session.",
          "evidence": ["pi-1.2.0-help", "pi-docs-1-2-0"],
          "aliases": ["pi -r"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/cli.md#session-options",
          "notes": ["The picker can search, rename, delete and sort sessions."]
        },
        {
          "id": "pi-session-open",
          "family": "supervised-session",
          "surface": "cli",
          "command": "pi --session <path|id>",
          "operation": "resume",
          "description": "Open a session by file path, exact id or partial id.",
          "evidence": ["pi-1.2.0-help", "pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/cli.md#session-options",
          "notes": ["Offers to fork a match from another project."]
        },
        {
          "id": "pi-session-fork-cli",
          "family": "supervised-session",
          "surface": "cli",
          "command": "pi --fork <path|id>",
          "operation": "fork",
          "description": "Fork a saved session into a new session for this project.",
          "evidence": ["pi-1.2.0-help", "pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/cli.md#session-options"
        },
        {
          "id": "pi-session-export-cli",
          "family": "supervised-session",
          "surface": "cli",
          "command": "pi --export <file> [output]",
          "operation": "export",
          "description": "Export a session file to HTML.",
          "evidence": ["pi-1.2.0-help", "pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/cli.md#session-options"
        },
        {
          "id": "pi-session-resume",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/resume",
          "operation": "resume",
          "description": "Switch to another saved session through the picker.",
          "evidence": ["pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/slash-commands.md#sessions-and-context"
        },
        {
          "id": "pi-session-fork",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/fork",
          "operation": "fork",
          "description": "Create a new session from an earlier user message.",
          "evidence": ["pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/sessions.md#choose-how-to-branch"
        },
        {
          "id": "pi-session-clone",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/clone",
          "operation": "fork",
          "description": "Duplicate the current session at its current position.",
          "evidence": ["pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/sessions.md#choose-how-to-branch"
        },
        {
          "id": "pi-session-import",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/import <path>",
          "operation": "import",
          "description": "Import a JSONL session file and resume it.",
          "evidence": ["pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/slash-commands.md#sessions-and-context"
        },
        {
          "id": "pi-session-export",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/export [path]",
          "operation": "export",
          "description": "Export the current session as HTML or JSONL.",
          "evidence": ["pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/slash-commands.md#sessions-and-context"
        },
        {
          "id": "pi-session-share",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/share",
          "operation": "share",
          "description": "Upload the session as a shareable link.",
          "evidence": ["pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/sessions.md#continue-or-switch-sessions",
          "notes": ["Uses a Radius artifact when configured, otherwise a private GitHub gist."]
        },
        {
          "id": "pi-session-delete",
          "family": "supervised-session",
          "surface": "interactive",
          "command": "/resume, then Ctrl+D",
          "operation": "delete",
          "description": "Delete a saved session from the picker.",
          "evidence": ["pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/keybindings.md#sessions",
          "notes": ["Moves it to the trash when a trash command exists. No shell command."]
        },
        {
          "id": "pi-session-name",
          "family": "thread-naming",
          "surface": "interactive",
          "command": "/name [name]",
          "operation": "rename",
          "description": "Set the session's display name, or show it.",
          "evidence": ["pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/slash-commands.md#sessions-and-context"
        },
        {
          "id": "pi-session-name-cli",
          "family": "thread-naming",
          "surface": "cli",
          "command": "pi --name <name>",
          "operation": "rename",
          "description": "Set the session display name at startup.",
          "evidence": ["pi-1.2.0-help", "pi-docs-1-2-0"],
          "aliases": ["pi -n <name>"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/cli.md#session-options"
        },
        {
          "id": "pi-session-info",
          "family": "usage",
          "surface": "interactive",
          "command": "/session",
          "operation": "inspect",
          "description": "Show the session's file, id, message count, token usage and cost.",
          "evidence": ["pi-docs-1-2-0"],
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/sessions.md#continue-or-switch-sessions",
          "notes": ["The only usage view; there is no shell usage command."]
        }
      ]
    }
  ]
}
