{"schemaVersion":"1.0","dataVersion":"ee5de863c30bdbe4fe7dd3e07c7e22ea9bf4ab2248dbc7c35cdbf60bc28be1db","generatedAt":"2026-09-07T17:59:57.673Z","evidence":[{"id":"claude-code-tools","kind":"official-docs","url":"https://code.claude.com/docs/en/tools-reference","title":"Claude Code tool reference","checked":"2026-09-06","locator":"WebFetch and WebSearch tool behavior"},{"id":"codex-agent-browser-observation","kind":"observation","url":"https://github.com/agent-tooling/clients-dev/blob/main/observations/codex-agent-browser.json","title":"Codex optional agent-browser: two local runs","checked":"2026-09-06","locator":"records: /html, /negotiate, /redirect, /json; checks: #js text in both runs","revision":"agent-browser 0.9.1; HeadlessChrome/145.0.7632.6","traceSha256":"7fdb5b09f5f7eb830ffec046ac18dca2bab0ccda82a7b14c2895e38fc33eeb89","trace":"observations/codex-agent-browser.json","reproduction":"bun run scripts/observe-browser.ts; requires agent-browser 0.9.1 and its installed browser. Local headless execution through Codex shell; no configured header overrides."},{"id":"codex-search","kind":"official-docs","url":"https://learn.chatgpt.com/docs/web-search","title":"OpenAI local web search","checked":"2026-09-06","locator":"Configure local web search"},{"id":"cursor-tools","kind":"official-docs","url":"https://cursor.com/docs/agent/overview","title":"Cursor agent tools","checked":"2026-09-06","locator":"Tools: Web and Browser"}],"tools":[{"id":"agent-browser","name":"agent-browser CLI","docs":"https://github.com/vercel-labs/agent-browser"},{"id":"claude-web-fetch","name":"WebFetch","docs":"https://code.claude.com/docs/en/tools-reference"},{"id":"claude-web-search","name":"WebSearch","docs":"https://code.claude.com/docs/en/tools-reference"},{"id":"codex-web-search","name":"Web search","docs":"https://learn.chatgpt.com/docs/web-search"},{"id":"cursor-browser","name":"Browser","docs":"https://cursor.com/docs/agent/tools/browser"},{"id":"cursor-web","name":"Web","docs":"https://cursor.com/docs/agent/overview"}],"clients":[{"name":"AdaL","id":"adal","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".adal/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.adal/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"AiderDesk","type":"desktop-app","id":"aider-desk","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".aider-desk/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.aider-desk/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Amp","type":"cli","vendor":"Sourcegraph","description":"The frontier coding agent for your terminal and editor, with multi-model modes, threads, subagents, and the Oracle.","homepage":"https://ampcode.com/","docs":"https://ampcode.com/manual","id":"amp","surfaces":{"mcp":{"status":"supported","verified":"2026-07-12","summary":"MCP servers configured under amp.mcpServers in settings, added via `amp mcp add`, or bundled inside skills via mcp.json (the recommended approach to keep the tool list clean).","files":[{"path":"~/.config/amp/settings.json","scope":"global","format":"json","key":"amp.mcpServers"},{"path":".amp/settings.json","scope":"project","format":"json","key":"amp.mcpServers","note":"Workspace servers require explicit user approval before running."},{"path":".agents/skills/<name>/mcp.json","scope":"project","format":"json","note":"Skill-bundled servers; tools are hidden until the skill is loaded."}],"fields":[{"name":"command","type":"string","required":false,"description":"Command to run a local (stdio) server."},{"name":"args","type":"string[]","required":false,"description":"Arguments passed to the command."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables for local servers. Supports ${VAR_NAME} interpolation in settings files."},{"name":"url","type":"string","required":false,"description":"Endpoint of a remote server."},{"name":"headers","type":"record<string, string>","required":false,"description":"HTTP headers sent with requests to remote servers (e.g. Authorization)."},{"name":"includeTools","type":"string[]","required":false,"description":"Tool names or glob patterns to filter which tools are exposed (recommended, skill-bundled mcp.json)."}],"transports":["stdio","sse","http"],"auth":["oauth","headers","env"],"invocation":[],"events":[],"capabilities":[{"name":"Tools","status":"supported"}],"examples":[{"title":"amp.mcpServers in settings.json","language":"json","code":"\"amp.mcpServers\": {\n  \"playwright\": {\n    \"command\": \"npx\",\n    \"args\": [\"-y\", \"@playwright/mcp@latest\", \"--headless\"]\n  },\n  \"linear\": {\n    \"url\": \"https://mcp.linear.app/sse\"\n  },\n  \"sourcegraph\": {\n    \"url\": \"${SRC_ENDPOINT}/.api/mcp/v1\",\n    \"headers\": { \"Authorization\": \"token ${SRC_ACCESS_TOKEN}\" }\n  }\n}\n"},{"title":"Skill-bundled mcp.json","language":"json","code":"{\n  \"chrome-devtools\": {\n    \"command\": \"npx\",\n    \"args\": [\"-y\", \"chrome-devtools-mcp@latest\"],\n    \"includeTools\": [\"navigate_*\", \"take_screenshot\", \"click\", \"fill*\"]\n  }\n}\n"}],"notes":["Amp recommends bundling MCP servers in skills via an mcp.json file in the skill directory; servers start with Amp but tools stay hidden until the skill loads.","Precedence when a server name appears in multiple places: --mcp-config CLI flag > amp.mcpServers in user/workspace settings > skill-bundled servers.","MCP servers in workspace settings (.amp/settings.json) require explicit approval (`amp mcp approve <name>`) before they can run; global settings and --mcp-config do not.","OAuth tokens are stored in ~/.amp/oauth/ and refreshed automatically; manage with `amp mcp oauth login|logout`.","amp.mcpPermissions rules can allow or reject servers matching command/args or url patterns."],"docs":"https://ampcode.com/manual#mcp"},"skills":{"status":"supported","verified":"2026-07-12","summary":"SKILL.md skills (Agent Skills format) that the agent invokes automatically. Skills can bundle resources and MCP servers (mcp.json) in the skill directory.","files":[{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Project skills, can be committed to git so the team shares them."},{"path":"~/.config/agents/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"User-wide skills; ~/.agents/skills/ and ~/.config/amp/skills/ are also scanned."},{"path":".claude/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Claude Code compatibility path (also ~/.claude/skills/); disable with amp.skills.disableClaudeCodeSkills."}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier. Must be unique; project skills override user-wide, both override built-ins."},{"name":"description","type":"string","required":true,"description":"What the skill does. Always visible to the model and determines when it invokes the skill."}],"transports":[],"auth":[],"invocation":["automatic"],"events":[],"capabilities":[],"examples":[{"title":"SKILL.md","language":"markdown","code":"---\nname: my-skill\ndescription: A description of what this skill does\n---\n\n# My Skill Instructions\n\nDetailed instructions for the agent...\n"}],"notes":["User-invokable skills were removed; the model invokes skills based on name and description (see ampcode.com/news/neo).","Skill precedence (first wins): ~/.config/agents/skills/, ~/.agents/skills/, ~/.config/amp/skills/, .agents/skills/, .claude/skills/, ~/.claude/skills/, then plugins, legacy toolbox directories, and built-in skills.","name and description are always visible to the model; the SKILL.md body loads on demand when the skill is invoked.","Skills can bundle MCP servers via an mcp.json file in the skill directory — Amp's recommended way to use MCP.","amp.skills.path adds extra skill directories; amp.skills.disableClaudeCodeSkills disables loading from Claude Code directories.","Amp ships a built-in building-skills skill that creates skills tailored to your codebase."],"docs":"https://ampcode.com/manual#agent-skills"},"rules":{"status":"supported","verified":"2026-07-12","summary":"AGENTS.md guidance files at project, user, and system scope, with @-file mentions and glob-scoped granular guidance in mentioned files.","files":[{"path":"AGENTS.md","scope":"project","format":"markdown","note":"In cwd, parent dirs, and subtrees. Architecture, build/test commands, conventions."},{"path":"~/.config/amp/AGENTS.md","scope":"global","format":"markdown","note":"Personal preferences and device-specific guidance; ~/.config/AGENTS.md also works."},{"path":"/etc/ampcode/AGENTS.md","scope":"enterprise","format":"markdown","note":"System-wide/organization-managed guidance (macOS: /Library/Application Support/ampcode/AGENTS.md, Windows: %ProgramData%\\ampcode\\AGENTS.md)."}],"fields":[{"name":"globs","type":"string[]","required":false,"description":"YAML frontmatter in an @-mentioned file; the file is only included once Amp has read a file matching any glob. Globs are implicitly prefixed with **/ unless they start with ./ or ../."}],"transports":[],"auth":[],"invocation":["@file-mention"],"events":[],"capabilities":[],"examples":[{"title":"Glob-scoped guidance file (docs/typescript-conventions.md)","language":"markdown","code":"---\nglobs:\n  - '**/*.ts'\n  - '**/*.tsx'\n---\n\nFollow these TypeScript conventions:\n\n- Never use the `any` type\n"},{"title":"@-mentions in AGENTS.md","language":"markdown","code":"See @doc/style.md and @specs/**/*.md.\n\nWhen making commits, see @doc/git-commit-instructions.md.\n"}],"notes":["AGENTS.md in the cwd (or editor workspace roots) and parent directories up to $HOME are always included; subtree AGENTS.md files are included when the agent reads a file in that subtree.","If no AGENTS.md exists in a directory, AGENT.md or CLAUDE.md is used instead.","@-mention other files inside agent files to include them as context; relative, absolute, ~/ paths and glob patterns are supported.","Mentioned files can declare `globs` in YAML frontmatter so they are only included after Amp reads a matching file (granular, language- or area-specific guidance).","Run agents-md list from the command palette to see the agent files in use; Amp offers to generate an AGENTS.md if none exists."],"docs":"https://ampcode.com/manual#agents-md"},"hooks":{"status":"supported","verified":"2026-07-12","summary":"Lifecycle event handling via TypeScript plugins: amp.on(...) handlers can observe, approve, reject, or modify tool calls and agent turns.","files":[{"path":".amp/plugins/*.ts","scope":"project","format":"typescript"},{"path":"~/.config/amp/plugins/*.ts","scope":"global","format":"typescript","note":"System plugins applied across your own projects."}],"fields":[],"transports":[],"auth":[],"invocation":[],"events":["session.start","agent.start","tool.call","tool.result","agent.end"],"capabilities":[],"examples":[{"title":"Gate tool calls with a plugin","language":"typescript","code":"import type { PluginAPI } from '@ampcode/plugin'\n\nexport default function (amp: PluginAPI) {\n  amp.on('tool.call', async (event, ctx) => {\n    const confirmed = await ctx.ui.confirm({\n      title: `Allow ${event.tool}?`,\n      message: `Amp wants to call ${event.tool}.`,\n      confirmButtonText: 'Allow',\n    })\n    if (confirmed) return { action: 'allow' }\n    return { action: 'reject-and-continue', message: `The user rejected ${event.tool}.` }\n  })\n}\n"}],"notes":["Amp has no shell-command hook config file; hooks are written as plugins — TypeScript files exporting a default function that receives the PluginAPI.","tool.call handlers return allow, reject-and-continue, modify, or synthesize; agent.end handlers can return continue with a follow-up user message. There is no session.end event.","The legacy permissions system (amp.permissions, amp.guardedFiles.allowlist, amp.dangerouslyAllowAll set to false) is now a built-in plugin activated when those settings are present.","Plugins can also register tools (amp.registerTool), command-palette commands (amp.registerCommand), show UI, and classify with amp.ai.ask.","Reload with `plugins: reload` from the command palette; inspect with `plugins: list`."],"docs":"https://ampcode.com/manual#plugins"},"commands":{"status":"deprecated","verified":"2026-07-12","summary":"Custom slash commands (.agents/commands/) were removed in favor of skills; command-palette commands can still be added programmatically via the plugin API.","files":[{"path":".agents/commands/<name>.md","scope":"project","format":"markdown","note":"Legacy location, removed. Migrate to .agents/skills/<name>/SKILL.md."},{"path":"~/.config/amp/commands/<name>.md","scope":"global","format":"markdown","note":"Legacy location, removed. Migrate to ~/.config/agents/skills/<name>/SKILL.md."}],"fields":[],"transports":[],"auth":[],"invocation":["command palette (Ctrl+O)"],"events":[],"capabilities":[],"examples":[{"title":"Register a command via a plugin","language":"typescript","code":"import type { PluginAPI } from '@ampcode/plugin'\n\nexport default function (amp: PluginAPI) {\n  amp.registerCommand(\n    'open-plugin-docs',\n    {\n      title: 'Open plugin docs',\n      category: 'docs',\n      description: 'Open the Amp Plugin API manual page.',\n    },\n    async (ctx) => {\n      await ctx.system.open('https://ampcode.com/manual/plugin-api')\n    },\n  )\n}\n"}],"notes":["Custom commands in .agents/commands/ and ~/.config/amp/commands/ were two ways of doing the same thing as skills and have been removed; Amp's migration guide moves each command to a skill directory (.agents/skills/<name>/SKILL.md).","Plugins can register command-palette actions with amp.registerCommand(...), including availability states (enabled/disabled/hidden)."],"docs":"https://ampcode.com/news/slashing-custom-commands"},"settings":{"status":"supported","verified":"2026-07-12","summary":"JSON/JSONC settings with an amp. prefix at user, workspace, and enterprise-managed scope. Workspace settings override user settings (except keymaps).","files":[{"path":"~/.config/amp/settings.json","scope":"global","format":"json","note":"User settings (same path on macOS and Linux; %USERPROFILE%\\.config\\amp\\settings.json on Windows)."},{"path":".amp/settings.json","scope":"project","format":"json","note":"Workspace settings; nearest file searched upward from cwd to the repo root."},{"path":"/etc/ampcode/managed-settings.json","scope":"enterprise","format":"json","note":"Managed policy settings (macOS: /Library/Application Support/ampcode/managed-settings.json, Windows: %ProgramData%\\ampcode\\managed-settings.json)."}],"fields":[{"name":"amp.mcpServers","type":"object","required":false,"description":"MCP servers that expose tools (see MCP surface)."},{"name":"amp.mcpPermissions","type":"array","required":false,"description":"Allow or reject MCP servers matching command/args or url patterns; first matching rule applies."},{"name":"amp.tools.disable","type":"string[]","required":false,"description":"Disable tools by name; supports glob patterns and builtin:toolname to disable only the builtin variant."},{"name":"amp.keymap","type":"object","required":false,"description":"Customize the CLI keymap; chords are space-separated keys. User entries override workspace entries."},{"name":"amp.skills.path","type":"string","required":false,"description":"Additional skill directories, colon-separated (semicolon on Windows), ~ supported."},{"name":"amp.skills.disableClaudeCodeSkills","type":"boolean","required":false,"description":"Disable loading skills from Claude Code directories. Default false."},{"name":"amp.notifications.enabled","type":"boolean","required":false,"description":"Play notification sounds when the agent completes or is blocked. Default true."},{"name":"amp.showCosts","type":"boolean","required":false,"description":"Show thread cost information in the CLI. Default true."},{"name":"amp.git.commit.ampThread.enabled","type":"boolean","required":false,"description":"Add the Amp-Thread trailer to agent commits. Default true."},{"name":"amp.git.commit.coauthor.enabled","type":"boolean","required":false,"description":"Add Amp as co-author in agent commits. Default true."},{"name":"amp.defaultVisibility","type":"object","required":false,"description":"Default thread visibility per repository origin.","values":["private","workspace","group"]},{"name":"amp.remoteThreadCreation.enabled","type":"boolean","required":false,"description":"Let ampcode.com create new threads in this interactive TUI. Default false."},{"name":"amp.updates.mode","type":"string","required":false,"description":"Update checking behavior. Default auto.","values":["auto","warn","disabled"]},{"name":"amp.fuzzy.alwaysIncludePaths","type":"string[]","required":false,"description":"Glob patterns always included in fuzzy file search even if gitignored."},{"name":"amp.terminal.copyOnSelect","type":"boolean","required":false,"description":"Copy TUI selections to the clipboard automatically. Default true."},{"name":"amp.thread.autoArchiveOnQuit","type":"boolean","required":false,"description":"Archive open CLI threads when quitting. Default false."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"User settings","language":"json","code":"{\n  \"amp.mcpServers\": {\n    \"playwright\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@playwright/mcp@latest\", \"--headless\"]\n    }\n  },\n  \"amp.tools.disable\": [\"browser_*\"],\n  \"amp.notifications.enabled\": false\n}\n"}],"notes":["Edit user settings with `amp config edit`, workspace settings with `amp config edit --workspace`; a custom file can be passed via --settings-file.",".jsonc variants (settings.jsonc) are also read at both user and workspace scope.","Workspace settings are found by searching upward from the cwd to the repository root.","Enterprise managed settings override user and workspace settings and add amp.admin.compatibilityDate.","Keymaps are the exception to precedence: amp.keymap entries in user settings override workspace entries."],"docs":"https://ampcode.com/manual#configuration"}},"behaviors":[]},{"name":"Antigravity","type":"editor","vendor":"Google","homepage":"https://antigravity.google/","id":"antigravity","surfaces":{"mcp":{"status":"supported","verified":"2026-09-07","summary":"Configure MCP servers in JSON under the mcpServers key.","files":[{"path":"~/.gemini/config/mcp_config.json","scope":"global","format":"json","key":"mcpServers"},{"path":".agents/mcp_config.json","scope":"project","format":"json","key":"mcpServers"}],"fields":[{"name":"command","type":"string","required":false,"description":"Command to start a local (stdio) server."},{"name":"args","type":"string[]","required":false,"description":"Arguments passed to the command."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables for the server."},{"name":"serverUrl","type":"string","required":false,"description":"Endpoint URL for a remote server."},{"name":"headers","type":"record<string, string>","required":false,"description":"HTTP headers for a remote server."}],"transports":["stdio","http","sse"],"auth":["headers"],"invocation":[],"events":[],"capabilities":[],"examples":[],"notes":["Global config is shared with Antigravity CLI. Native clients also support workspace config; add-mcp 2.3.1 installs globally.","Remote entries use serverUrl (no type field)."],"docs":"https://antigravity.google/docs/mcp"},"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.gemini/antigravity/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[{"name":"allowed-tools","status":"supported"},{"name":"context: fork","status":"unsupported"},{"name":"Hooks","status":"unsupported"}],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Antigravity CLI","type":"cli","vendor":"Google","id":"antigravity-cli","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.gemini/antigravity-cli/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"AstrBot","id":"astrbot","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":"data/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.astrbot/data/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Augment","type":"ide-extension","vendor":"Augment Code","homepage":"https://www.augmentcode.com/","id":"augment","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".augment/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.augment/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Autohand Code CLI","id":"autohand-code","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".autohand/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.autohand/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Claude Code","type":"cli","vendor":"Anthropic","description":"Anthropic's agentic command-line coding tool, deeply integrated with the terminal and your codebase.","homepage":"https://claude.com/claude-code","repo":"","docs":"https://docs.claude.com/en/docs/claude-code","id":"claude-code","surfaces":{"mcp":{"status":"supported","verified":"2026-06-21","summary":"Add MCP servers via claude mcp add or .mcp.json. Three scopes (local/project/user), stdio/HTTP/SSE/WebSocket transports, OAuth, and tool search.","files":[{"path":".mcp.json","scope":"project","format":"json","key":"mcpServers"},{"path":"~/.claude.json","scope":"global","format":"json","key":"mcpServers","note":"Local scope nests under projects.<path>.mcpServers; user scope is top-level."}],"fields":[{"name":"type","type":"\"stdio\" | \"http\" | \"sse\" | \"ws\"","required":false,"description":"Transport type. 'streamable-http' is accepted as an alias for 'http'."},{"name":"command","type":"string","required":false,"description":"Executable for a stdio server."},{"name":"args","type":"string[]","required":false,"description":"Arguments for the stdio command."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables. Supports ${VAR} and ${VAR:-default} expansion."},{"name":"url","type":"string","required":false,"description":"Endpoint for HTTP/SSE/WebSocket servers."},{"name":"headers","type":"record<string, string>","required":false,"description":"Static HTTP headers (e.g. Authorization). Supports env expansion."},{"name":"headersHelper","type":"string","required":false,"description":"Command that prints a JSON object of headers at connect time (dynamic auth)."},{"name":"oauth","type":"{ clientId?, callbackPort?, scopes?, authServerMetadataUrl? }","required":false,"description":"OAuth configuration for remote servers."},{"name":"timeout","type":"number","required":false,"description":"Per-server tool execution timeout in milliseconds."},{"name":"alwaysLoad","type":"boolean","required":false,"description":"Exempt this server's tools from deferral so they load at session start."}],"transports":["stdio","http","sse","ws"],"auth":["oauth","headers","headersHelper"],"invocation":[],"events":[],"capabilities":[{"name":"Tools","status":"supported"},{"name":"Resources","status":"supported","note":"Reference with @server:protocol://resource/path."},{"name":"Prompts","status":"supported","note":"Exposed as /mcp__server__prompt commands."},{"name":"Roots","status":"supported","note":"Claude Code answers roots/list with the project directory."},{"name":"Elicitation","status":"supported","note":"Form and URL elicitation dialogs appear automatically."}],"examples":[{"title":"Project HTTP server (.mcp.json)","language":"json","code":"{\n  \"mcpServers\": {\n    \"api-server\": {\n      \"type\": \"http\",\n      \"url\": \"${API_BASE_URL:-https://api.example.com}/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer ${API_KEY}\" }\n    }\n  }\n}\n"}],"notes":["MCP approval uses permissions.allow in Claude settings, with mcp__<server> or mcp__<server>__<tool> rules; see https://code.claude.com/docs/en/permissions. add-mcp writes project approvals to .claude/settings.local.json and global approvals to ~/.claude/settings.json, separately from server definitions.","Project scope uses .mcp.json (checked into version control, requires approval).","Local and user scopes are stored in ~/.claude.json; type 'streamable-http' is an alias for 'http'.","SSE transport is deprecated in favor of HTTP."],"docs":"https://docs.claude.com/en/docs/claude-code/mcp"},"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills with rich frontmatter, invoked with /name or loaded automatically by Claude. Custom commands are merged into skills.","files":[{"path":".claude/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.claude/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"Personal skills, available across all projects."}],"fields":[{"name":"name","type":"string","required":false,"description":"Display name. Defaults to the directory name."},{"name":"description","type":"string","required":false,"description":"What the skill does and when to use it. Recommended."},{"name":"when_to_use","type":"string","required":false,"description":"Extra trigger context appended to description in the skill listing."},{"name":"argument-hint","type":"string","required":false,"description":"Autocomplete hint for expected arguments."},{"name":"arguments","type":"string | string[]","required":false,"description":"Named positional arguments for $name substitution."},{"name":"disable-model-invocation","type":"boolean","required":false,"description":"When true, only the user can invoke (not Claude). Default false."},{"name":"user-invocable","type":"boolean","required":false,"description":"When false, hide from the / menu (Claude-only). Default true."},{"name":"allowed-tools","type":"string | string[]","required":false,"description":"Tools usable without approval while the skill is active."},{"name":"disallowed-tools","type":"string | string[]","required":false,"description":"Tools removed from the pool while the skill is active."},{"name":"model","type":"string","required":false,"description":"Model to use while the skill is active, or 'inherit'."},{"name":"effort","type":"\"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\"","required":false,"description":"Effort level override while the skill is active."},{"name":"context","type":"\"fork\"","required":false,"description":"Run the skill in a forked subagent context."},{"name":"agent","type":"string","required":false,"description":"Subagent type to use when context: fork is set."},{"name":"hooks","type":"object","required":false,"description":"Hooks scoped to the skill's lifecycle."},{"name":"paths","type":"string | string[]","required":false,"description":"Glob patterns that limit when the skill auto-activates."},{"name":"shell","type":"\"bash\" | \"powershell\"","required":false,"description":"Shell for inline !`command` blocks. Default bash."}],"transports":[],"auth":[],"invocation":["/skill-name","automatic"],"events":[],"capabilities":[],"examples":[{"title":"Task skill (manual invocation)","language":"markdown","code":"---\nname: deploy\ndescription: Deploy the application to production\ndisable-model-invocation: true\nallowed-tools: Bash(git add *) Bash(git commit *)\n---\n\nDeploy $ARGUMENTS to production:\n1. Run the test suite\n2. Build and push\n"}],"notes":["Live change detection reloads SKILL.md edits within a session.","Project skills load from .claude/skills/ up the directory tree and from nested dirs on demand."],"docs":"https://docs.claude.com/en/docs/claude-code/skills"},"rules":{"status":"supported","verified":"2026-06-21","summary":"CLAUDE.md memory files (project/user/managed) plus modular .claude/rules/*.md with optional path scoping. Auto memory accumulates learnings.","files":[{"path":"CLAUDE.md","scope":"project","format":"markdown","note":"Also reads ./.claude/CLAUDE.md. CLAUDE.local.md for gitignored personal notes."},{"path":".claude/rules/*.md","scope":"project","format":"markdown","note":"Modular topic rules; recursive. Path-scope with the paths frontmatter field."},{"path":"~/.claude/CLAUDE.md","scope":"global","format":"markdown","note":"Personal instructions for all projects. ~/.claude/rules/*.md also supported."},{"path":"/Library/Application Support/ClaudeCode/CLAUDE.md","scope":"enterprise","format":"markdown","note":"Managed policy (macOS). Linux/WSL: /etc/claude-code/CLAUDE.md; Windows: C:\\Program Files\\ClaudeCode\\CLAUDE.md."}],"fields":[{"name":"paths","type":"string | string[]","required":false,"description":"Glob patterns; a rule file applies only when matching files are in context."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Path-scoped rule","language":"markdown","code":"---\npaths:\n  - \"src/api/**/*.ts\"\n---\n\n# API Development Rules\n- All API endpoints must include input validation\n- Use the standard error response format\n"}],"notes":["Claude Code reads CLAUDE.md, not AGENTS.md. Import an existing AGENTS.md with @AGENTS.md inside CLAUDE.md.","Auto memory is stored per repo in ~/.claude/projects/<project>/memory/MEMORY.md.","Use @path/to/file imports (max depth 4) to compose instructions."],"docs":"https://docs.claude.com/en/docs/claude-code/memory"},"hooks":{"status":"supported","verified":"2026-06-21","summary":"Shell commands that fire on lifecycle events, configured in settings.json under the hooks key (or scoped to a skill/subagent).","files":[{"path":".claude/settings.json","scope":"project","format":"json","key":"hooks"},{"path":"~/.claude/settings.json","scope":"global","format":"json","key":"hooks"}],"fields":[{"name":"matcher","type":"string","required":false,"description":"Pattern matched against tool name (for PreToolUse/PostToolUse) to scope the hook."},{"name":"hooks[].type","type":"\"command\"","required":false,"description":"Hook handler type."},{"name":"hooks[].command","type":"string","required":false,"description":"Shell command to run. Receives event JSON on stdin."},{"name":"hooks[].timeout","type":"number","required":false,"description":"Optional timeout in seconds for the hook command."}],"transports":[],"auth":[],"invocation":[],"events":["PreToolUse","PostToolUse","UserPromptSubmit","Notification","Stop","SubagentStop","SessionStart","SessionEnd","PreCompact","Elicitation","InstructionsLoaded"],"capabilities":[],"examples":[{"title":"Format TypeScript after edits","language":"json","code":"{\n  \"hooks\": {\n    \"PostToolUse\": [\n      {\n        \"matcher\": \"Edit|Write\",\n        \"hooks\": [{ \"type\": \"command\", \"command\": \"prettier --write \\\"$CLAUDE_FILE_PATHS\\\"\" }]\n      }\n    ]\n  }\n}\n"}],"notes":[],"docs":"https://docs.claude.com/en/docs/claude-code/hooks"},"commands":{"status":"supported","verified":"2026-06-21","summary":"Custom slash commands as markdown files. Merged into Skills — a command and a skill of the same name behave identically; skills add supporting files and auto-invocation.","files":[{"path":".claude/commands/<name>.md","scope":"project","format":"markdown"},{"path":"~/.claude/commands/<name>.md","scope":"global","format":"markdown"}],"fields":[{"name":"description","type":"string","required":false,"description":"What the command does."},{"name":"argument-hint","type":"string","required":false,"description":"Autocomplete hint for expected arguments."},{"name":"allowed-tools","type":"string | string[]","required":false,"description":"Tools the command may use without approval."},{"name":"model","type":"string","required":false,"description":"Model override while the command runs."}],"transports":[],"auth":[],"invocation":["/command-name"],"events":[],"capabilities":[],"examples":[],"notes":[".claude/commands/<name>.md creates /<name> and supports the same frontmatter as skills.","Skills are recommended for new workflows since they support supporting files and model invocation."],"docs":"https://docs.claude.com/en/docs/claude-code/slash-commands"},"settings":{"status":"supported","verified":"2026-06-21","summary":"Hierarchical settings.json controls permissions, environment, hooks, model, and skill behavior across user, project, local, and managed scopes.","files":[{"path":".claude/settings.json","scope":"project","format":"json","note":"Shared project settings (checked in)."},{"path":".claude/settings.local.json","scope":"project","format":"json","note":"Personal project settings (gitignored)."},{"path":"~/.claude/settings.json","scope":"global","format":"json","note":"User settings for all projects."},{"path":"managed-settings.json","scope":"enterprise","format":"json","note":"Managed policy settings deployed by IT/DevOps."}],"fields":[{"name":"permissions","type":"{ allow?: string[], deny?: string[], ask?: string[], additionalDirectories?: string[] }","required":false,"description":"Allow/deny/ask rules governing tool and command use."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables applied to every session."},{"name":"hooks","type":"object","required":false,"description":"Lifecycle hook configuration (see Hooks)."},{"name":"model","type":"string","required":false,"description":"Default model for sessions."},{"name":"disableBundledSkills","type":"boolean","required":false,"description":"Disable the built-in bundled skills (/code-review, /debug, etc.)."},{"name":"skillOverrides","type":"record<string, \"on\" | \"name-only\" | \"user-invocable-only\" | \"off\">","required":false,"description":"Override skill visibility without editing SKILL.md frontmatter."},{"name":"autoMemoryEnabled","type":"boolean","required":false,"description":"Toggle auto memory. Default true."},{"name":"claudeMd","type":"string","required":false,"description":"Managed CLAUDE.md content (managed/policy scope only)."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[],"notes":[],"docs":"https://docs.claude.com/en/docs/claude-code/settings"}},"behaviors":[{"id":"web-fetch","variant":"Claude Code / built-in WebFetch","operation":"fetch","tool":"claude-web-fetch","availability":"built-in","conditions":["Documentation snapshot checked September 6, 2026; exact version range not specified.","Applies to WebFetch, not shell commands or installed MCP tools."],"claims":[{"key":"markdownPreference","status":"documented","value":true,"note":"The request Accept header prefers Markdown over HTML.","evidence":["claude-code-tools"],"verified":"2026-09-06"},{"key":"userAgent","status":"documented","value":"Claude-User prefix","note":"The documentation specifies the prefix, not a complete versioned UA string.","evidence":["claude-code-tools"],"verified":"2026-09-06"},{"key":"redirects","status":"documented","value":"Separate fetch for cross-host redirects","note":"WebFetch returns the original and target URLs for a subsequent fetch.","evidence":["claude-code-tools"],"verified":"2026-09-06"},{"key":"accept","status":"unknown","note":"Not established by the reviewed official documentation.","evidence":[]},{"key":"customHeaders","status":"unknown","note":"Not established by the reviewed official documentation.","evidence":[]},{"key":"browserEngine","status":"unknown","note":"Not established by the reviewed official documentation.","evidence":[]},{"key":"javascript","status":"unknown","note":"Not established by the reviewed official documentation.","evidence":[]}],"identification":[{"id":"claude-user","location":"header","key":"user-agent","match":"product-token","pattern":"Claude-User","actor":"Claude user retrieval","attribution":"tool","ambiguity":"Claude-User is shared with other Claude retrieval contexts; this does not uniquely identify Claude Code. User-Agent is spoofable.","evidence":["claude-code-tools"]}]},{"id":"web-search","variant":"Claude Code / built-in WebSearch","operation":"search","tool":"claude-web-search","availability":"built-in","conditions":["Documentation snapshot checked September 6, 2026; platform availability varies."],"claims":[{"key":"provider","status":"documented","value":"Anthropic search backend","note":"The built-in backend is not configurable; alternatives can be installed through MCP.","evidence":["claude-code-tools"],"verified":"2026-09-06"},{"key":"output","status":"documented","value":"Result titles and URLs","note":"Search does not fetch the result pages; WebFetch is a separate operation.","evidence":["claude-code-tools"],"verified":"2026-09-06"},{"key":"accept","status":"unknown","note":"Not established by the reviewed official documentation.","evidence":[]},{"key":"markdownPreference","status":"unknown","note":"Not established by the reviewed official documentation.","evidence":[]},{"key":"userAgent","status":"unknown","note":"Not established by the reviewed official documentation.","evidence":[]}],"identification":[]}]},{"name":"Claude Desktop","type":"desktop-app","vendor":"Anthropic","homepage":"https://claude.ai/download","id":"claude-desktop","surfaces":{"mcp":{"status":"supported","verified":"2026-06-21","summary":"Local (stdio) MCP servers in JSON under the mcpServers key.","files":[{"path":"~/Library/Application Support/Claude/claude_desktop_config.json","scope":"global","format":"json","key":"mcpServers","note":"macOS path; see Claude Desktop docs for other operating systems."}],"fields":[{"name":"command","type":"string","required":false,"description":"Command to start a local (stdio) server."},{"name":"args","type":"string[]","required":false,"description":"Arguments passed to the command."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables for the server."}],"transports":["stdio"],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[],"notes":["Only local (stdio) servers are configured via the file. Add remote servers through Settings → Connectors in the app."]}},"behaviors":[]},{"name":"Cline","type":"ide-extension","vendor":"Cline Bot Inc.","description":"Open-source AI coding agent for VS Code (plus CLI and SDK) with Plan/Act modes, MCP support, and human-in-the-loop approval of every file change and command.","homepage":"https://cline.bot","repo":"https://github.com/cline/cline","docs":"https://docs.cline.bot","id":"cline","surfaces":{"mcp":{"status":"supported","verified":"2026-07-12","summary":"Configure MCP servers in cline_mcp_settings.json under the mcpServers key (editable via the MCP Servers panel). Supports local stdio servers and remote servers over Streamable HTTP or legacy SSE.","files":[{"path":"~/.cline/data/settings/cline_mcp_settings.json","scope":"global","format":"json","key":"mcpServers","note":"Shared by the VS Code extension, CLI, and SDK. Open via MCP Servers > Configure > Configure MCP Servers in the extension."},{"path":"~/.cline/mcp.json","scope":"global","format":"json","key":"mcpServers","note":"CLI MCP config (cline mcp wizard)."},{"path":".cline/mcp.json","scope":"project","format":"json","key":"mcpServers","note":"Project-level MCP server config (documented in the CLI reference)."}],"fields":[{"name":"command","type":"string","required":false,"description":"Command to start a local (stdio) server."},{"name":"args","type":"string[]","required":false,"description":"Arguments passed to the command."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables for the server."},{"name":"url","type":"string","required":false,"description":"Endpoint URL for a remote server."},{"name":"type","type":"\"streamableHttp\" | \"sse\"","required":false,"description":"Remote transport type. Defaults to legacy sse when omitted.","values":["streamableHttp","sse"]},{"name":"headers","type":"record<string, string>","required":false,"description":"HTTP headers for a remote server (e.g. Authorization)."},{"name":"disabled","type":"boolean","required":false,"description":"Toggle a server off without deleting it."},{"name":"autoApprove","type":"string[]","required":false,"description":"Tool names that run without per-call approval."}],"transports":["stdio","http","sse"],"auth":["headers","oauth"],"invocation":[],"events":[],"capabilities":[{"name":"Tools","status":"supported"},{"name":"Resources","status":"supported","note":"Auto Approve's 'Use MCP servers' setting covers MCP tools and resources."}],"examples":[{"title":"Local stdio server","language":"json","code":"{\n  \"mcpServers\": {\n    \"local-server\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/server.js\"],\n      \"env\": { \"API_KEY\": \"your_api_key\" },\n      \"disabled\": false,\n      \"autoApprove\": []\n    }\n  }\n}\n"},{"title":"Remote server (Streamable HTTP)","language":"json","code":"{\n  \"mcpServers\": {\n    \"remote-server\": {\n      \"type\": \"streamableHttp\",\n      \"url\": \"https://example.com/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer your-token\" },\n      \"disabled\": false,\n      \"autoApprove\": []\n    }\n  }\n}\n"}],"notes":["Omitting type on a remote server defaults to the legacy sse transport; set type to streamableHttp explicitly for the recommended transport.","The Cline CLI reads ~/.cline/mcp.json and .cline/mcp.json (project) with the same server definitions; the extension shares config under ~/.cline/data/.","Legacy installs stored the file in VS Code globalStorage (saoudrizwan.claude-dev/settings/cline_mcp_settings.json); the extension migrates it to ~/.cline/data/settings/.","OAuth credentials for remote servers are stored under each server's oauth key (managed by the extension, verified from source).","Per-tool auto-approval via the autoApprove array; the Auto Approve setting 'Use MCP servers' gates MCP tools and resources globally."],"docs":"https://docs.cline.bot/mcp/mcp-overview"},"skills":{"status":"supported","verified":"2026-07-12","summary":"SKILL.md skill folders with progressive loading: only name and description (~100 tokens) load at startup; the full instructions load when Cline triggers the skill via the use_skill tool or you invoke it as a slash command.","files":[{"path":".cline/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Recommended project location; commit to share with your team. .clinerules/skills/ and .claude/skills/ are also discovered."},{"path":"~/.cline/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"Global skills available across all projects."}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier; must exactly match the directory name. Use kebab-case."},{"name":"description","type":"string","required":true,"description":"Tells Cline when to use the skill (max 1024 characters). Determines automatic triggering."}],"transports":[],"auth":[],"invocation":["automatic","/skill-name"],"events":[],"capabilities":[],"examples":[{"title":"Data analysis skill","language":"markdown","code":"---\nname: data-analysis\ndescription: Analyze data files and generate insights. Use when working with CSV, Excel, or JSON data files that need exploration, cleaning, or visualization.\n---\n\n# Data Analysis\n\nWhen analyzing data files, follow this process:\n\n## 1. Understand the Data\n- Read a sample of the file to understand its structure\n- Identify column types and data quality issues\n"}],"notes":["Skills can bundle supporting files (docs/, templates/, scripts/) that load only as needed; script output enters context, not the script itself.","Every skill has an enable/disable toggle in the Skills menu; skills are enabled by default when discovered.","When a global and project skill share a name, the global skill takes precedence.","Keep SKILL.md under ~5k tokens; split detail into docs/ files referenced from the instructions."],"docs":"https://docs.cline.bot/customization/skills"},"rules":{"status":"supported","verified":"2026-07-12","summary":"Markdown rule files in .clinerules/ (workspace) and a global Cline Rules directory, with per-file enable/disable toggles and optional paths frontmatter for conditional activation. Cursor rules, Windsurf rules, and AGENTS.md are auto-detected.","files":[{"path":".clinerules/","scope":"project","format":"markdown","note":"Primary format: directory of .md/.txt rule files at the project root (a single .clinerules file also works)."},{"path":"AGENTS.md","scope":"project","format":"markdown","note":"Standard cross-tool format, auto-detected at the project root."},{"path":"~/Documents/Cline/Rules/","scope":"global","format":"markdown","note":"Global rules directory (Windows: Documents\\Cline\\Rules). ~/.cline/rules/ is also read."},{"path":"~/.agents/AGENTS.md","scope":"global","format":"markdown","note":"Cross-tool global AGENTS instructions."}],"fields":[{"name":"paths","type":"string[]","required":false,"description":"Frontmatter glob patterns that scope the rule; it activates when any pattern matches a file in the current context. Empty array disables the rule."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Conditional rule scoped to React code","language":"markdown","code":"---\npaths:\n  - \"src/components/**\"\n  - \"src/hooks/**\"\n---\n\n# React Component Guidelines\n\nWhen creating or modifying React components:\n- Use functional components with React hooks\n- Extract reusable logic into custom React hooks\n"}],"notes":["Cline processes all .md and .txt files inside .clinerules/, combining them into a unified rule set; workspace rules win over global rules on conflict.","Conditional rules use YAML frontmatter with a paths array of globs, matched against open tabs, visible files, files mentioned in your prompt, and files Cline edits. Rules without frontmatter are always active.","Cross-tool formats are auto-detected: .cursorrules, .windsurfrules, AGENTS.md, and global ~/.agents/AGENTS.md.","The /newrule slash command creates a rule interactively; the CLI/SDK also read global rules from ~/.cline/rules/.","On Linux/WSL the global directory may be ~/Cline/Rules if ~/Documents/Cline/Rules does not exist."],"docs":"https://docs.cline.bot/customization/cline-rules"},"hooks":{"status":"supported","verified":"2026-07-12","summary":"Executable hook scripts named after lifecycle events, placed in .clinerules/hooks/ (workspace) or the global hooks directory. Hooks receive event JSON on stdin and return JSON on stdout that can block execution or inject context.","files":[{"path":".clinerules/hooks/<EventName>","scope":"project","format":"executable","note":"Executable script in any language with a shebang. File name must equal the event name, e.g. .clinerules/hooks/PreToolUse."},{"path":"~/Documents/Cline/Hooks/<EventName>","scope":"global","format":"markdown","note":"Executable script, applies to all workspaces (see format caveat above). The CLI also reads ~/.cline/hooks/."}],"fields":[{"name":"cancel","type":"boolean","required":true,"description":"Hook output: false to continue, true to block execution and surface errorMessage."},{"name":"contextModification","type":"string","required":false,"description":"Hook output: context added to the conversation for future AI decisions (max 50KB)."},{"name":"errorMessage","type":"string","required":false,"description":"Hook output: error details shown when blocking."}],"transports":[],"auth":[],"invocation":[],"events":["TaskStart","TaskResume","TaskCancel","TaskComplete","UserPromptSubmit","PreToolUse","PostToolUse","PreCompact"],"capabilities":[],"examples":[{"title":"PreToolUse hook blocking .js files in a TypeScript project","language":"bash","code":"#!/usr/bin/env bash\ninput=$(cat)\ntool_name=$(echo \"$input\" | jq -r '.preToolUse.toolName')\npath=$(echo \"$input\" | jq -r '.preToolUse.parameters.path // \"\"')\n\nif [[ \"$tool_name\" == \"write_to_file\" && \"$path\" == *.js ]]; then\n  echo '{\"cancel\": true, \"errorMessage\": \"Use .ts files only\"}'\n  exit 0\nfi\n\necho '{\"cancel\": false}'\n"}],"notes":["Hooks must be enabled via the 'Enable Hooks' checkbox in Cline settings (Feature Settings).","Hook files carry no extension, need a shebang, and must be executable; Windows is not currently supported. Verified from the official repo's .clinerules/hooks/README.md.","Output JSON: { cancel, contextModification, errorMessage }. cancel: true blocks execution; contextModification (max 50KB) affects future AI decisions, not the current tool call.","TaskComplete and PreCompact are documented as 'coming soon'. All matching hooks (global + workspace) run concurrently; if any returns cancel: true, the action is blocked.","Default timeout is 30 seconds. The CLI also reads ~/.cline/hooks/ and a directory set via --hooks-dir / CLINE_HOOKS_DIR; the docs site's hooks page additionally covers SDK plugin lifecycle hooks (beforeTool, afterRun, etc.)."],"docs":"https://docs.cline.bot/customization/hooks"},"commands":{"status":"supported","verified":"2026-07-12","summary":"Built-in slash commands (/newtask, /smol, /newrule, /deep-planning, /reportbug), plus user-defined workflows: markdown files invoked by filename (e.g. /release.md) and enabled skills triggered as slash commands.","files":[{"path":".clinerules/workflows/*.md","scope":"project","format":"markdown","note":"Workspace workflows, version-controlled with the repo."},{"path":"~/Documents/Cline/Workflows/*.md","scope":"global","format":"markdown","note":"Global workflows for all projects (Windows: Documents\\Cline\\Workflows)."}],"fields":[],"transports":[],"auth":[],"invocation":["/command","/workflow-name.md","/skill-name"],"events":[],"capabilities":[],"examples":[{"title":"PR review workflow (.clinerules/workflows/pr-review.md)","language":"markdown","code":"1. Check out the PR branch: `gh pr checkout [id]`\n2. Run the test suite and note any failures\n3. Review the diff against our coding standards\n4. Summarize findings and suggest changes\n"}],"notes":["Workflows are manual-only markdown step lists; type / in chat to see autocomplete for built-ins, workflows, and enabled skills.","Workflow files can reference Cline's built-in tools (e.g. ask_followup_question), CLI tools, and MCP tools, and chain steps in sequence.","Workspace workflows take precedence over global workflows with the same name; each workflow has an enable/disable toggle in the Workflows tab.","Workspace workflow location .clinerules/workflows/ verified from the official repo; the CLI/SDK also resolve global workflows from ~/.cline/data/workflows/.","/smol has alias /compact."],"docs":"https://docs.cline.bot/core-workflows/using-commands"},"settings":{"status":"partial","verified":"2026-07-12","summary":"Extension behavior (Auto Approve permissions, YOLO Mode, feature toggles) is configured through the Cline settings UI; persistent configuration lives under ~/.cline/ in documented settings files shared by the IDE extension, CLI, and SDK.","files":[{"path":"~/.cline/data/settings/global-settings.json","scope":"global","format":"json","note":"Global settings shared across Cline applications (IDE, CLI, SDK)."},{"path":"~/.cline/data/settings/providers.json","scope":"global","format":"json","note":"API keys and model provider configuration."},{"path":".cline/","scope":"project","format":"json","note":"Project config root (rules/, skills/, hooks/, plugins/, mcp.json); directories hold markdown/scripts rather than a single JSON settings file."}],"fields":[{"name":"CLINE_COMMAND_PERMISSIONS","type":"string (JSON)","required":false,"description":"Environment variable restricting shell commands: { allow: string[], deny: string[], allowRedirects: boolean }."},{"name":"CLINE_DATA_DIR","type":"string","required":false,"description":"Environment variable overriding the data directory (default ~/.cline/data)."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Command permission policy","language":"json","code":"{\n  \"allow\": [\"npm *\", \"git *\"],\n  \"deny\": [\"rm -rf *\"],\n  \"allowRedirects\": false\n}\n"}],"notes":["Auto Approve is evaluated per tool call with per-category permissions (read/edit project or all files, safe/all commands, browser, MCP); YOLO Mode auto-approves everything.","Field-level schemas for global-settings.json and providers.json are not documented; the directory layout is.","CLINE_COMMAND_PERMISSIONS env var applies a JSON allow/deny policy for shell commands, e.g. {\"allow\": [\"npm *\"], \"deny\": [\"rm -rf *\"]}; deny overrides allow.","CLINE_DATA_DIR overrides the data directory; enterprise deployments add remote-managed provider config and controls (YOLO Mode lockdown, MCP allowlists)."],"docs":"https://docs.cline.bot/getting-started/config"}},"behaviors":[]},{"name":"Cline CLI","type":"cli","vendor":"Cline","homepage":"https://cline.bot","id":"cline-cli","surfaces":{"mcp":{"status":"supported","verified":"2026-06-21","summary":"Configure MCP servers in JSON under the mcpServers key.","files":[{"path":"~/.cline/data/settings/cline_mcp_settings.json","scope":"global","format":"json","key":"mcpServers","note":"$CLINE_DIR defaults to ~/.cline."}],"fields":[{"name":"command","type":"string","required":false,"description":"Command to start a local (stdio) server."},{"name":"args","type":"string[]","required":false,"description":"Arguments passed to the command."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables for the server."},{"name":"url","type":"string","required":false,"description":"Endpoint URL for a remote server."},{"name":"type","type":"\"sse\" | \"streamableHttp\"","required":false,"description":"Remote transport type."},{"name":"disabled","type":"boolean","required":false,"description":"Whether the server is disabled."},{"name":"headers","type":"record<string, string>","required":false,"description":"HTTP headers for a remote server."}],"transports":["stdio","http","sse"],"auth":["headers"],"invocation":[],"events":[],"capabilities":[],"examples":[],"notes":[]}},"behaviors":[]},{"name":"Code Studio","id":"codestudio","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".codestudio/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.codestudio/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"CodeArts Agent","vendor":"Huawei","id":"codearts-agent","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".codeartsdoer/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.codeartsdoer/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"CodeBuddy","vendor":"Tencent","id":"codebuddy","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".codebuddy/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.codebuddy/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[{"name":"allowed-tools","status":"supported"},{"name":"context: fork","status":"unsupported"},{"name":"Hooks","status":"unsupported"}],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Codemaker","id":"codemaker","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".codemaker/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.codemaker/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Codex","type":"cli","vendor":"OpenAI","description":"OpenAI's coding agent for the terminal and IDE, configured through a single config.toml.","homepage":"https://developers.openai.com/codex","repo":"https://github.com/openai/codex","docs":"https://developers.openai.com/codex","id":"codex","surfaces":{"mcp":{"status":"supported","verified":"2026-09-07","summary":"MCP servers are defined as [mcp_servers.<name>] tables in config.toml. Supports stdio and Streamable HTTP, with bearer-token and OAuth auth.","files":[{"path":"~/.codex/config.toml","scope":"global","format":"toml","key":"mcp_servers"},{"path":".codex/config.toml","scope":"project","format":"toml","key":"mcp_servers","note":"Trusted projects only."}],"fields":[{"name":"command","type":"string","required":false,"description":"Launcher command for a stdio server."},{"name":"args","type":"string[]","required":false,"description":"Arguments passed to the stdio command."},{"name":"env","type":"map<string, string>","required":false,"description":"Environment variables forwarded to the stdio server."},{"name":"env_vars","type":"(string | { name, source })[]","required":false,"description":"Additional env vars to allow/forward. source = local | remote."},{"name":"cwd","type":"string","required":false,"description":"Working directory for the stdio server process."},{"name":"url","type":"string","required":false,"description":"Endpoint for a Streamable HTTP server."},{"name":"bearer_token_env_var","type":"string","required":false,"description":"Env var name holding a bearer token sent in Authorization."},{"name":"http_headers","type":"map<string, string>","required":false,"description":"Static HTTP headers for each request."},{"name":"env_http_headers","type":"map<string, string>","required":false,"description":"HTTP headers populated from environment variables."},{"name":"enabled","type":"boolean","required":false,"description":"Disable a server without removing its config."},{"name":"startup_timeout_sec","type":"number","required":false,"description":"Server startup timeout (default 10s)."},{"name":"tool_timeout_sec","type":"number","required":false,"description":"Per-tool execution timeout (default 60s)."},{"name":"enabled_tools","type":"string[]","required":false,"description":"Allow list of tool names exposed by the server."},{"name":"disabled_tools","type":"string[]","required":false,"description":"Deny list applied after enabled_tools."},{"name":"scopes","type":"string[]","required":false,"description":"OAuth scopes to request when authenticating."},{"name":"default_tools_approval_mode","type":"\"auto\" | \"prompt\" | \"writes\" | \"approve\"","required":false,"description":"Server-wide approval default. add-mcp --auto-approve writes approve.","values":["auto","prompt","writes","approve"]},{"name":"tools.<tool>.approval_mode","type":"\"auto\" | \"prompt\" | \"writes\" | \"approve\"","required":false,"description":"Per-tool override of the server approval default. add-mcp --approve-tools writes approve for the selected tools.","values":["auto","prompt","writes","approve"]}],"transports":["stdio","http"],"auth":["oauth","bearer-token","headers"],"invocation":[],"events":[],"capabilities":[{"name":"Tools","status":"supported"},{"name":"Server instructions","status":"supported","note":"Codex reads the MCP `instructions` field as server-wide guidance."}],"examples":[{"title":"stdio + Streamable HTTP servers","language":"toml","code":"[mcp_servers.context7]\ncommand = \"npx\"\nargs = [\"-y\", \"@upstash/context7-mcp\"]\n\n[mcp_servers.figma]\nurl = \"https://mcp.figma.com/mcp\"\nbearer_token_env_var = \"FIGMA_OAUTH_TOKEN\"\nhttp_headers = { \"X-Figma-Region\" = \"us-east-1\" }\n"}],"notes":["The CLI and IDE extension share this configuration. Manage servers with `codex mcp`.","Project-scoped .codex/config.toml is loaded only for trusted projects."],"docs":"https://developers.openai.com/codex/mcp"},"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard, discovered from .agents/skills up to the repo root. Invoke with $ or /skills.","files":[{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Scanned from CWD up to repo root."},{"path":"~/.agents/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"User skills applied across all repositories."},{"path":"/etc/codex/skills/<name>/SKILL.md","scope":"enterprise","format":"markdown","note":"Admin/system skills shared on the machine."}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier."},{"name":"description","type":"string","required":true,"description":"When the skill should and should not trigger."}],"transports":[],"auth":[],"invocation":["$skill-name","/skills","implicit"],"events":[],"capabilities":[],"examples":[{"title":"Minimal SKILL.md","language":"markdown","code":"---\nname: skill-name\ndescription: Explain exactly when this skill should and should not trigger.\n---\n\nSkill instructions for Codex to follow.\n"}],"notes":["Codex scans .agents/skills in every directory from CWD up to the repository root.","Optional agents/openai.yaml adds UI metadata and policy.allow_implicit_invocation.","Disable a skill via [[skills.config]] (path + enabled) in config.toml."],"docs":"https://developers.openai.com/codex/skills"},"rules":{"status":"supported","verified":"2026-06-21","summary":"AGENTS.md instruction files, layered from the Codex home directory down to the working directory, with override files and configurable fallbacks.","files":[{"path":"AGENTS.md","scope":"project","format":"markdown","note":"Project root down to CWD, including nested directories. AGENTS.override.md takes precedence."},{"path":"~/.codex/AGENTS.md","scope":"global","format":"markdown","note":"Global defaults inherited by every repository. ~/.codex/AGENTS.override.md for temporary overrides."}],"fields":[],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Global guidance (~/.codex/AGENTS.md)","language":"markdown","code":"## Working agreements\n\n- Always run `npm test` after modifying JavaScript files.\n- Prefer `pnpm` when installing dependencies.\n"}],"notes":["Codex reads AGENTS.override.md before AGENTS.md at each level; only one file per directory is used.","Files merge root-first; closer files override earlier guidance.","project_doc_max_bytes (default 32 KiB) caps combined size; project_doc_fallback_filenames adds alternate names."],"docs":"https://developers.openai.com/codex/guides/agents-md"},"hooks":{"status":"supported","verified":"2026-06-21","summary":"Lifecycle hooks loaded from hooks.json or an inline [hooks] table in config.toml. Gated behind the features.hooks flag; command hooks are executed.","files":[{"path":"~/.codex/config.toml","scope":"global","format":"toml","key":"hooks","note":"Inline [hooks] table, or a separate hooks.json."},{"path":".codex/config.toml","scope":"project","format":"toml","key":"hooks","note":"Trusted projects only."}],"fields":[{"name":"hooks.<event>","type":"array","required":false,"description":"Matcher groups for a hook event."},{"name":"hooks.<event>[].hooks","type":"array","required":false,"description":"Hook handlers for a matcher group (command hooks supported)."},{"name":"hooks.<event>[].hooks[].command","type":"string","required":false,"description":"Command to run for a command hook."},{"name":"hooks.<event>[].hooks[].commandWindows","type":"string","required":false,"description":"Windows-only command override (alias command_windows)."}],"transports":[],"auth":[],"invocation":[],"events":["PreToolUse","PermissionRequest","PostToolUse","PreCompact","PostCompact","SessionStart","SubagentStart","SubagentStop","UserPromptSubmit","Stop"],"capabilities":[],"examples":[],"notes":["Enable with features.hooks = true (deprecated alias: features.codex_hooks).","Command hooks are supported; prompt and agent hook handlers are parsed but skipped.","Admins can enforce managed hooks via requirements.toml and allow_managed_hooks_only."],"docs":"https://developers.openai.com/codex/config-reference"},"commands":{"status":"deprecated","verified":"2026-06-21","summary":"Custom prompts (~/.codex/prompts/*.md, invoked /prompts:name) were deprecated and removed in codex-cli 0.117.0. Convert custom prompts to Skills.","files":[],"fields":[],"transports":[],"auth":[],"invocation":["/prompts:name"],"events":[],"capabilities":[],"examples":[],"notes":["Codex still ships built-in slash commands (/review, /fork, /plan, /diff, /compact, etc.).","For reusable custom workflows, author Skills instead."],"docs":"https://developers.openai.com/codex/cli/features"},"settings":{"status":"supported","verified":"2026-06-21","summary":"config.toml is the single settings file for models, reasoning, sandboxing, approvals, and tools. requirements.toml enforces admin policy.","files":[{"path":"~/.codex/config.toml","scope":"global","format":"toml"},{"path":".codex/config.toml","scope":"project","format":"toml","note":"Trusted projects only; provider/auth/telemetry keys are ignored here."},{"path":"requirements.toml","scope":"enterprise","format":"toml","note":"Admin-enforced constraints on security-sensitive settings."}],"fields":[{"name":"model","type":"string","required":false,"description":"Model slug Codex uses for turns."},{"name":"model_reasoning_effort","type":"\"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\"","required":false,"description":"Reasoning effort for supported models."},{"name":"approval_policy","type":"\"untrusted\" | \"on-request\" | \"never\" | \"granular\"","required":false,"description":"When Codex asks for command approval."},{"name":"sandbox_mode","type":"\"read-only\" | \"workspace-write\" | \"danger-full-access\"","required":false,"description":"Filesystem/network sandbox for tool calls."},{"name":"default_permissions","type":"string","required":false,"description":"Named permissions profile (:read-only, :workspace, :danger-full-access, or custom)."},{"name":"web_search","type":"\"disabled\" | \"cached\" | \"live\"","required":false,"description":"Web search mode (default cached)."},{"name":"file_opener","type":"\"vscode\" | \"vscode-insiders\" | \"windsurf\" | \"cursor\" | \"none\"","required":false,"description":"URI scheme used to open citations from Codex output."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Common config.toml","language":"toml","code":"model = \"gpt-5.1-codex-max\"\nmodel_reasoning_effort = \"high\"\napproval_policy = \"on-request\"\nsandbox_mode = \"workspace-write\"\n"}],"notes":["Project-scoped .codex/config.toml can't override provider, auth, notification, or telemetry keys.","Install the Even Better TOML extension and add #:schema https://developers.openai.com/codex/config-schema.json for autocompletion."],"docs":"https://developers.openai.com/codex/config-reference"}},"behaviors":[{"id":"optional-agent-browser","variant":"Codex desktop / optional agent-browser command","operation":"browse","tool":"agent-browser","availability":"optional","conditions":["Observed September 6, 2026 on macOS arm64 with agent-browser 0.9.1 and HeadlessChrome/145.0.7632.6.","Installed tool invoked through shell by this Codex task; not a built-in Codex browser or hosted search signature.","Local headless navigation; two runs against controlled fixtures; no header overrides configured."],"claims":[{"key":"accept","status":"observed","value":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","note":"Exact observed navigation Accept header; wildcard acceptance is not an explicit Markdown preference.","evidence":["codex-agent-browser-observation"],"verified":"2026-09-06"},{"key":"userAgent","status":"observed","value":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/145.0.7632.6 Safari/537.36","note":"Generic headless browser identity; no reliable Codex attribution rule follows from this.","evidence":["codex-agent-browser-observation"],"verified":"2026-09-06"},{"key":"markdownPreference","status":"observed","value":false,"note":"No explicit text/markdown preference in these navigation requests. The negotiation fixture returned HTML.","evidence":["codex-agent-browser-observation"],"verified":"2026-09-06"},{"key":"javascript","status":"observed","value":true,"note":"The rendered #js element changed from pending to executed in both runs.","evidence":["codex-agent-browser-observation"],"verified":"2026-09-06"},{"key":"redirects","status":"observed","value":"Followed same-origin 302","note":"Navigation to /redirect reached the /html fixture in both runs.","evidence":["codex-agent-browser-observation"],"verified":"2026-09-06"},{"key":"execution","status":"observed","value":"Local headless browser","note":"Browser was launched through the installed optional command-line tool.","evidence":["codex-agent-browser-observation"],"verified":"2026-09-06"}],"identification":[]},{"id":"web-search","variant":"Codex / local chats","operation":"search","tool":"codex-web-search","availability":"built-in","conditions":["Applies to hosted web search, separate from local command networking.","Default mode depends on permissions: cached normally, live with full access.","Documentation checked September 6, 2026; managed settings can restrict modes."],"claims":[{"key":"searchMode","status":"documented","value":["cached","live","disabled","indexed"],"note":"Cached is the local default; full access defaults to live.","evidence":["codex-search"],"verified":"2026-09-06"},{"key":"provider","status":"documented","value":"OpenAI-maintained index (cached mode)","note":"Cached mode uses the index rather than arbitrary live page fetches.","evidence":["codex-search"],"verified":"2026-09-06"},{"key":"execution","status":"documented","value":"Hosted tool","note":"Local sandbox networking and search controls are separate.","evidence":["codex-search"],"verified":"2026-09-06"},{"key":"accept","status":"unknown","note":"Not established by the reviewed official documentation.","evidence":[]},{"key":"markdownPreference","status":"unknown","note":"Not established by the reviewed official documentation.","evidence":[]},{"key":"userAgent","status":"unknown","note":"Not established by the reviewed official documentation.","evidence":[]},{"key":"customHeaders","status":"unknown","note":"Not established by the reviewed official documentation.","evidence":[]}],"identification":[]}]},{"name":"Command Code","id":"command-code","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".commandcode/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.commandcode/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[{"name":"allowed-tools","status":"supported"},{"name":"context: fork","status":"unsupported"},{"name":"Hooks","status":"unsupported"}],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Continue","type":"ide-extension","vendor":"Continue","homepage":"https://continue.dev/","id":"continue","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".continue/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.continue/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Cortex Code","type":"cli","vendor":"Snowflake","id":"cortex","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".cortex/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.snowflake/cortex/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Crush","type":"cli","vendor":"Charm","description":"Charm's open-source terminal coding agent with multi-model support, LSP-enhanced context, MCP extensibility, and first-class support on every major platform.","homepage":"https://github.com/charmbracelet/crush","repo":"https://github.com/charmbracelet/crush","docs":"https://github.com/charmbracelet/crush#readme","id":"crush","surfaces":{"mcp":{"status":"supported","verified":"2026-07-12","summary":"Configure MCP servers under the mcp key in crush.json. Supports stdio, HTTP, and SSE transports with shell-style value expansion for secrets.","files":[{"path":"crush.json","scope":"project","format":"json","key":"mcp","note":".crush.json takes precedence over crush.json."},{"path":"~/.config/crush/crush.json","scope":"global","format":"json","key":"mcp"}],"fields":[{"name":"type","type":"\"stdio\" | \"http\" | \"sse\"","required":true,"description":"Transport type: stdio for command-line servers, http for HTTP endpoints, sse for Server-Sent Events.","values":["stdio","http","sse"]},{"name":"command","type":"string","required":true,"description":"For stdio servers: the command to run."},{"name":"args","type":"string[]","required":false,"description":"Arguments passed to the stdio command."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables for stdio servers. Supports shell-style expansion."},{"name":"url","type":"string","required":true,"description":"For http/sse servers: the endpoint URL."},{"name":"headers","type":"record<string, string>","required":false,"description":"HTTP headers for http/sse servers, e.g. Authorization: Bearer $GH_PAT."},{"name":"timeout","type":"number","required":false,"description":"Timeout in seconds for the server."},{"name":"disabled","type":"boolean","required":false,"description":"Disable the server without removing it from config."},{"name":"disabled_tools","type":"string[]","required":false,"description":"Tool names from this server to hide from the agent."}],"transports":["stdio","http","sse"],"auth":["headers"],"invocation":[],"events":[],"capabilities":[{"name":"Tools","status":"supported"},{"name":"Prompts","status":"supported","note":"MCP prompts appear as invocable commands in the command palette (verified in source)."}],"examples":[{"title":"stdio, http, and sse servers","language":"json","code":"{\n  \"$schema\": \"https://charm.land/crush.json\",\n  \"mcp\": {\n    \"filesystem\": {\n      \"type\": \"stdio\",\n      \"command\": \"node\",\n      \"args\": [\"/path/to/mcp-server.js\"],\n      \"env\": { \"NODE_ENV\": \"production\" }\n    },\n    \"github\": {\n      \"type\": \"http\",\n      \"url\": \"https://api.githubcopilot.com/mcp/\",\n      \"disabled_tools\": [\"create_issue\"],\n      \"headers\": { \"Authorization\": \"Bearer $GH_PAT\" }\n    },\n    \"streaming-service\": {\n      \"type\": \"sse\",\n      \"url\": \"https://example.com/mcp/sse\"\n    }\n  }\n}\n"}],"notes":["Shell-style expansion ($VAR, ${VAR:-default}, ${VAR:?message}, $(command)) works in command, args, env, headers, and url, via Crush's embedded shell on all platforms including Windows.","Headers whose value resolves to the empty string are dropped from the outgoing request.","crush.json is trusted code: any $(...) in it runs at load time with your shell's privileges.","Individual server tools can be hidden with disabled_tools; MCP tools are named mcp_<server>_<tool> and can be allowlisted in permissions.allowed_tools."],"docs":"https://github.com/charmbracelet/crush#mcps"},"skills":{"status":"supported","verified":"2026-07-12","summary":"SKILL.md skills following the Agent Skills open standard, discovered from many global and project paths and activated on demand; user-invocable skills appear in the command palette.","files":[{"path":".crush/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.config/crush/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."},{"name":"user-invocable","type":"boolean","required":false,"description":"Make the skill invocable as a command from the command palette (Ctrl+P)."},{"name":"disable-model-invocation","type":"boolean","required":false,"description":"Prevent the model from auto-triggering the skill while still allowing user invocation."},{"name":"license","type":"string","required":false,"description":"Optional license identifier."},{"name":"compatibility","type":"string","required":false,"description":"Optional compatibility hint."},{"name":"metadata","type":"record<string, string>","required":false,"description":"Optional string-to-string metadata map."}],"transports":[],"auth":[],"invocation":["automatic (model-invoked)","command palette (Ctrl+P) for user-invocable skills"],"events":[],"capabilities":[],"examples":[{"title":"User-invocable skill","language":"markdown","code":"---\nname: my-skill\ndescription: A skill that can be invoked as a command.\nuser-invocable: true\n---\n\nInstructions the agent loads when the skill is activated.\n"},{"title":"Extra skill paths in crush.json","language":"json","code":"{\n  \"$schema\": \"https://charm.land/crush.json\",\n  \"options\": {\n    \"skills_paths\": [\"~/.config/crush/skills\", \"./project-skills\"]\n  }\n}\n"}],"notes":["Additional global search paths: $CRUSH_SKILLS_DIR, ~/.config/agents/skills/, ~/.claude/skills/, ~/.agents/skills/, Windows %LOCALAPPDATA% equivalents, and any paths in options.skills_paths.","Additional project search paths: .agents/skills/, .claude/skills/, and .cursor/skills/.","User-invocable skills show in the palette as user:skill-name (global) or project:skill-name (project).","disable-model-invocation hides a skill from the model's available skills list while keeping it user-invocable.","Hide specific skills (including builtins like crush-config) with options.disabled_skills.","Crush ships builtin skills including crush-config and crush-hooks for configuring itself."],"docs":"https://github.com/charmbracelet/crush#agent-skills"},"rules":{"status":"supported","verified":"2026-07-12","summary":"Project context files (AGENTS.md, CRUSH.md, and compatible variants) plus global context files in ~/.config, with configurable paths.","files":[{"path":"AGENTS.md","scope":"project","format":"markdown","note":"Default file created by project initialization; CRUSH.md and other case variants are also read."},{"path":"CRUSH.md","scope":"project","format":"markdown","note":"Crush-specific project rules; .local and lowercase variants are also read."},{"path":"~/.config/crush/CRUSH.md","scope":"global","format":"markdown","note":"Global Crush-specific rules."},{"path":"~/.config/AGENTS.md","scope":"global","format":"markdown","note":"Global generic instructions shared with other agentic coding tools."}],"fields":[{"name":"options.context_paths","type":"string[]","required":false,"description":"Additional project context file paths, appended to the built-in defaults."},{"name":"options.global_context_paths","type":"string[]","required":false,"description":"Global context file or folder paths. Folders load all .md files recursively. Defaults to ~/.config/crush/CRUSH.md and ~/.config/AGENTS.md."},{"name":"options.initialize_as","type":"string","required":false,"description":"Name of the context file created/updated during project initialization. Default AGENTS.md."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Custom global context paths","language":"json","code":"{\n  \"$schema\": \"https://charm.land/crush.json\",\n  \"options\": {\n    \"global_context_paths\": [\n      \"~/path/to/custom/context/file.md\",\n      \"/full/path/to/folder/of/files/\"\n    ]\n  }\n}\n"}],"notes":["Default project context paths also include compatible files from other tools: .github/copilot-instructions.md, .cursorrules, .cursor/rules/, CLAUDE.md, CLAUDE.local.md, GEMINI.md, and case variants of CRUSH.md/AGENTS.md (verified in source).","Project initialization analyzes the codebase and writes a context file, AGENTS.md by default; customize the name/location with options.initialize_as.","Add extra project context files with options.context_paths and replace the global defaults with options.global_context_paths (directories load all .md files recursively).","Use ~/.config/crush/CRUSH.md for Crush-specific rules and ~/.config/AGENTS.md for generic instructions shared with other agentic tools."],"docs":"https://github.com/charmbracelet/crush#global-context-files"},"hooks":{"status":"partial","verified":"2026-07-12","summary":"Shell-command hooks configured under the hooks key in crush.json. Preliminary support: currently only PreToolUse fires, with plans to add more events.","files":[{"path":"crush.json","scope":"project","format":"json","key":"hooks","note":"Relative command paths resolve against the working directory."},{"path":"~/.config/crush/crush.json","scope":"global","format":"json","key":"hooks","note":"Use absolute paths or inline commands; relative paths resolve against the working directory, not the config file."}],"fields":[{"name":"name","type":"string","required":false,"description":"Friendly display name shown in the TUI. Falls back to command."},{"name":"matcher","type":"string","required":false,"description":"Regex tested against the tool name (e.g. ^bash$, ^mcp_). Omit to match all tools."},{"name":"command","type":"string","required":true,"description":"Shell command or script path to run. Executed through Crush's embedded POSIX shell on all platforms."},{"name":"timeout","type":"number","required":false,"description":"Seconds before the hook is killed. Defaults to 30."}],"transports":[],"auth":[],"invocation":[],"events":["PreToolUse"],"capabilities":[],"examples":[{"title":"Block destructive commands","language":"json","code":"{\n  \"hooks\": {\n    \"PreToolUse\": [\n      {\n        \"name\": \"no-rm-rf\",\n        \"matcher\": \"^bash$\",\n        \"command\": \"./hooks/no-rm-rf.sh\",\n        \"timeout\": 10\n      }\n    ]\n  }\n}\n"},{"title":"Auto-approve read-only tools (inline)","language":"json","code":"{\n  \"hooks\": {\n    \"PreToolUse\": [\n      {\n        \"matcher\": \"^(view|ls|grep|glob)$\",\n        \"command\": \"echo '{\\\"decision\\\":\\\"allow\\\"}'\"\n      }\n    ]\n  }\n}\n"}],"notes":["Hooks are broadly Claude Code-compatible: the config shape, stdin payload, output envelope, and exit codes line up.","Hooks run in parallel through Crush's embedded POSIX shell but results compose in config order: deny wins over allow, updated_input patches shallow-merge in order.","Exit codes: 0 = success (stdout parsed as JSON envelope), 2 = block the tool call (stderr is the deny reason), 49 = halt the whole turn, anything else = non-blocking error.","The JSON output envelope supports decision (allow/deny), halt, reason, context, and updated_input; decision allow pre-approves the call and skips the permission prompt.","Hooks receive event data via stdin JSON and env vars like CRUSH_EVENT, CRUSH_TOOL_NAME, CRUSH_TOOL_INPUT_COMMAND, and CRUSH_TOOL_INPUT_FILE_PATH.","PreToolUse only fires on the top-level agent's tool calls; sub-agent tool calls are not intercepted.","Crush ships a builtin crush-hooks skill for writing and configuring hooks."],"docs":"https://github.com/charmbracelet/crush/tree/main/docs/hooks"},"commands":{"status":"supported","verified":"2026-07-12","summary":"Custom commands (saved prompts) as plain markdown files, invoked from the command palette with user:/project: prefixes and $NAME argument placeholders.","files":[{"path":".crush/commands/<name>.md","scope":"project","format":"markdown","note":"Location follows options.data_directory (default .crush)."},{"path":"~/.config/crush/commands/<name>.md","scope":"global","format":"markdown","note":"$XDG_CONFIG_HOME/crush/commands/; Windows: %USERPROFILE%\\AppData\\Local\\crush\\commands\\."},{"path":"~/.crush/commands/<name>.md","scope":"global","format":"markdown"}],"fields":[],"transports":[],"auth":[],"invocation":["command palette (Ctrl+P)"],"events":[],"capabilities":[],"examples":[{"title":"Command with named arguments","language":"markdown","code":"# Fetch Context for Issue $ISSUE_NUMBER\n\nRUN gh issue view $ISSUE_NUMBER --json title,body,comments\nRUN grep -R \"$SEARCH_PATTERN\" $DIRECTORY\n"}],"notes":["The docs URL is the official repo's draft COMMANDS.md, confirmed by maintainers in issue #2219; paths and behavior verified against the main-branch source (internal/commands).","The whole markdown file is the prompt; the file name (without extension) becomes the command name, prefixed with user: or project:.","Sub-directories namespace commands with colons, e.g. commands/git/commit.md becomes user:git:commit.","$NAME placeholders (uppercase letters, numbers, underscores) become required arguments that Crush prompts for when the command runs.","Prompts from connected MCP servers also appear as commands in the palette, and user-invocable skills surface alongside them."],"docs":"https://github.com/charmbracelet/crush/blob/99edcbf1c17dbb1d74dc1a3f03a5e30bcfc58b39/COMMANDS.md"},"settings":{"status":"supported","verified":"2026-07-12","summary":"crush.json configures providers, models, LSPs, MCP servers, hooks, permissions, and options, at project and global scope with a published JSON schema.","files":[{"path":".crush.json","scope":"project","format":"json","note":"Highest priority."},{"path":"crush.json","scope":"project","format":"json"},{"path":"~/.config/crush/crush.json","scope":"global","format":"json","note":"Windows: %LOCALAPPDATA%\\crush\\crush.json equivalent via env overrides."}],"fields":[{"name":"providers","type":"object","required":false,"description":"Custom provider configs (openai, openai-compat, anthropic, ollama, llamacpp, lmstudio, litellm, omlx) with base_url, api_key, and model definitions."},{"name":"lsp","type":"object","required":false,"description":"Language servers Crush uses for extra context, e.g. { \"go\": { \"command\": \"gopls\" } }."},{"name":"mcp","type":"object","required":false,"description":"MCP server definitions (see MCP surface)."},{"name":"hooks","type":"object","required":false,"description":"Lifecycle hook configuration (see Hooks surface)."},{"name":"permissions","type":"{ allowed_tools?: string[] }","required":false,"description":"Tools allowed to run without a permission prompt, e.g. view, ls, grep, or mcp_<server>_<tool>."},{"name":"options.context_paths","type":"string[]","required":false,"description":"Additional context file paths (see Rules surface)."},{"name":"options.global_context_paths","type":"string[]","required":false,"description":"Global context file/folder paths (see Rules surface)."},{"name":"options.initialize_as","type":"string","required":false,"description":"Context file name created during project initialization. Default AGENTS.md."},{"name":"options.disabled_tools","type":"string[]","required":false,"description":"Built-in tools to disable and hide from the agent entirely."},{"name":"options.disabled_skills","type":"string[]","required":false,"description":"Skills (builtin or discovered) to hide from the agent."},{"name":"options.skills_paths","type":"string[]","required":false,"description":"Additional skill discovery paths."},{"name":"options.data_directory","type":"string","required":false,"description":"Directory for per-project state such as the SQLite database. Default .crush."},{"name":"options.attribution","type":"{ trailer_style?: string, generated_with?: boolean }","required":false,"description":"Git commit/PR attribution. trailer_style: assisted-by (default), co-authored-by, or none."},{"name":"options.disable_notifications","type":"boolean","required":false,"description":"Disable desktop notifications for permission requests and finished turns."},{"name":"options.disable_provider_auto_update","type":"boolean","required":false,"description":"Disable automatic provider/model list updates from Catwalk."},{"name":"options.disable_metrics","type":"boolean","required":false,"description":"Opt out of pseudonymous usage metrics."},{"name":"options.debug","type":"boolean","required":false,"description":"Enable debug logging (also available via --debug)."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Providers, LSP, and permissions","language":"json","code":"{\n  \"$schema\": \"https://charm.land/crush.json\",\n  \"lsp\": {\n    \"go\": { \"command\": \"gopls\" },\n    \"typescript\": { \"command\": \"typescript-language-server\", \"args\": [\"--stdio\"] }\n  },\n  \"permissions\": {\n    \"allowed_tools\": [\"view\", \"ls\", \"grep\", \"edit\"]\n  },\n  \"options\": {\n    \"disabled_tools\": [\"sourcegraph\"]\n  }\n}\n"}],"notes":["Config priority: .crush.json, then crush.json, then $HOME/.config/crush/crush.json. Schema: https://charm.land/crush.json.","Override the global config and data locations with CRUSH_GLOBAL_CONFIG and CRUSH_GLOBAL_DATA; ephemeral app state lives in ~/.local/share/crush/crush.json.","The --yolo flag skips all permission prompts entirely.","A .crushignore file (gitignore syntax) excludes additional files from context.","Opt out of pseudonymous metrics with options.disable_metrics, CRUSH_DISABLE_METRICS=1, or DO_NOT_TRACK=1.","Crush ships a builtin crush-config skill, so you can ask Crush to configure itself."],"docs":"https://github.com/charmbracelet/crush#configuration"}},"behaviors":[]},{"name":"Cursor","type":"editor","vendor":"Anysphere","description":"The AI code editor. Agent, Tab, and Inline Edit backed by frontier models.","homepage":"https://cursor.com","repo":"","docs":"https://cursor.com/docs","id":"cursor","surfaces":{"mcp":{"status":"supported","verified":"2026-06-21","summary":"Configure MCP servers via mcp.json. Supports stdio, SSE, and Streamable HTTP, with OAuth and config interpolation.","files":[{"path":".cursor/mcp.json","scope":"project","format":"json","key":"mcpServers"},{"path":"~/.cursor/mcp.json","scope":"global","format":"json","key":"mcpServers"}],"fields":[{"name":"type","type":"\"stdio\"","required":false,"description":"Server connection type for local command servers."},{"name":"command","type":"string","required":false,"description":"Command to start a stdio server executable (e.g. npx, node, python, docker)."},{"name":"args","type":"string[]","required":false,"description":"Arguments passed to the command."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables for the server. Supports ${env:NAME} interpolation."},{"name":"envFile","type":"string","required":false,"description":"Path to an environment file to load (stdio servers only)."},{"name":"url","type":"string","required":false,"description":"Endpoint URL for a remote HTTP or SSE server."},{"name":"headers","type":"record<string, string>","required":false,"description":"HTTP headers for remote servers (e.g. Authorization)."},{"name":"auth","type":"{ CLIENT_ID: string, CLIENT_SECRET?: string, scopes?: string[] }","required":false,"description":"Static OAuth client credentials for remote servers."}],"transports":["stdio","sse","http"],"auth":["oauth","headers","static-oauth"],"invocation":[],"events":[],"capabilities":[{"name":"Tools","status":"supported"},{"name":"Prompts","status":"supported"},{"name":"Resources","status":"supported"},{"name":"Roots","status":"supported"},{"name":"Elicitation","status":"supported"},{"name":"Apps","status":"supported","note":"Interactive UI views returned by MCP tools (MCP Apps extension)."}],"examples":[{"title":"Local stdio server","language":"json","code":"{\n  \"mcpServers\": {\n    \"server-name\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"mcp-server\"],\n      \"env\": { \"API_KEY\": \"value\" }\n    }\n  }\n}\n"},{"title":"Remote server","language":"json","code":"{\n  \"mcpServers\": {\n    \"server-name\": {\n      \"url\": \"http://localhost:3000/mcp\",\n      \"headers\": { \"API_KEY\": \"value\" }\n    }\n  }\n}\n"}],"notes":[],"docs":"https://cursor.com/docs/context/mcp"},"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills loaded from .cursor/skills and .agents/skills, invoked with / or @. Also reads Claude and Codex skill dirs.","files":[{"path":".cursor/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Shared agent-skills directory (cross-tool standard)."},{"path":"~/.cursor/skills/<name>/SKILL.md","scope":"global","format":"markdown"},{"path":"~/.agents/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":false,"description":"Skill name. Defaults to the containing folder name."},{"name":"description","type":"string","required":false,"description":"What the skill does; helps Agent decide when to load it."},{"name":"paths","type":"string | string[]","required":false,"description":"Glob patterns that scope the skill to matching files."}],"transports":[],"auth":[],"invocation":["/skill-name","@skill-name"],"events":[],"capabilities":[],"examples":[{"title":"Scoped skill","language":"markdown","code":"---\nname: react-component-patterns\ndescription: Conventions for writing React components.\npaths:\n  - \"**/*.tsx\"\n---\n\n# React component patterns\n...\n"}],"notes":["For compatibility, Cursor also loads skills from .claude/skills, .codex/skills, ~/.claude/skills, and ~/.codex/skills.","Skills in nested project dirs (e.g. apps/web/.cursor/skills/) are scoped to files in that dir."],"docs":"https://cursor.com/docs/context/skills"},"rules":{"status":"supported","verified":"2026-06-21","summary":"Project rules as .mdc files with frontmatter, plus plain-markdown AGENTS.md (root and nested).","files":[{"path":".cursor/rules/*.mdc","scope":"project","format":"mdc","note":"Version-controlled, scoped via path patterns. Organize in subfolders."},{"path":"AGENTS.md","scope":"project","format":"markdown","note":"Plain-markdown instructions in project root and any subdirectory (nested)."}],"fields":[{"name":"description","type":"string","required":false,"description":"When set with alwaysApply false, Agent pulls the rule in when relevant."},{"name":"globs","type":"string","required":false,"description":"Comma-separated glob patterns; auto-attaches the rule for matching files."},{"name":"alwaysApply","type":"boolean","required":false,"description":"When true, the rule is included in every chat session."}],"transports":[],"auth":[],"invocation":["@rule-name"],"events":[],"capabilities":[],"examples":[{"title":"Always-applied rule (.mdc)","language":"markdown","code":"---\nalwaysApply: true\n---\n\n- All source files must include the company copyright header\n- Never modify generated files in dist/ or build/\n"}],"notes":[],"docs":"https://cursor.com/docs/context/rules"},"hooks":{"status":"supported","verified":"2026-06-21","summary":"hooks.json defines scripts that observe, block, or modify the agent loop. Command and prompt hook types. Claude Code hook compatible.","files":[{"path":".cursor/hooks.json","scope":"project","format":"json","key":"hooks"},{"path":"~/.cursor/hooks.json","scope":"global","format":"json","key":"hooks"},{"path":"/Library/Application Support/Cursor/hooks.json","scope":"enterprise","format":"json","key":"hooks","note":"macOS MDM path. Linux/WSL: /etc/cursor/hooks.json; Windows: C:\\ProgramData\\Cursor\\hooks.json."}],"fields":[{"name":"version","type":"number","required":true,"description":"Config schema version (currently 1)."},{"name":"command","type":"string","required":true,"description":"Script path or shell command (for command hooks)."},{"name":"type","type":"\"command\" | \"prompt\"","required":false,"description":"Hook execution type. Defaults to command."},{"name":"timeout","type":"number","required":false,"description":"Execution timeout in seconds."},{"name":"loop_limit","type":"number | null","required":false,"description":"Per-script loop limit for stop/subagentStop hooks. Default 5 for Cursor."},{"name":"failClosed","type":"boolean","required":false,"description":"When true, hook failures block the action instead of failing open."},{"name":"matcher","type":"string","required":false,"description":"Filter criteria (tool name, subagent type, or command pattern) for when the hook runs."}],"transports":[],"auth":[],"invocation":[],"events":["sessionStart","sessionEnd","beforeSubmitPrompt","preToolUse","postToolUse","postToolUseFailure","beforeShellExecution","afterShellExecution","beforeMCPExecution","afterMCPExecution","beforeReadFile","afterFileEdit","subagentStart","subagentStop","preCompact","stop","afterAgentResponse","afterAgentThought","beforeTabFileRead","afterTabFileEdit","workspaceOpen"],"capabilities":[],"examples":[{"title":"Format after edits","language":"json","code":"{\n  \"version\": 1,\n  \"hooks\": {\n    \"afterFileEdit\": [{ \"command\": \".cursor/hooks/format.sh\" }]\n  }\n}\n"}],"notes":[],"docs":"https://cursor.com/docs/agent/hooks"},"commands":{"status":"deprecated","verified":"2026-06-21","summary":"Cursor merged slash commands into Skills. Existing user- and workspace-level commands can be converted with /migrate-to-skills; author new workflows as Skills.","files":[],"fields":[],"transports":[],"auth":[],"invocation":["/command-name"],"events":[],"capabilities":[],"examples":[],"notes":["Both user-level and workspace-level commands are convertible to skills (Cursor 2.4+).","Use the Skills surface for new reusable workflows."],"docs":"https://cursor.com/docs/context/skills"},"settings":{"status":"partial","verified":"2026-07-22","summary":"Most settings live in the Cursor Settings UI. permissions.json controls Run Mode allowlists (MCP tools, terminal commands) and steers the Auto-review classifier.","files":[{"path":".cursor/permissions.json","scope":"project","format":"json","note":"Applies to one project directory. Commit it to share guidance with the team."},{"path":"~/.cursor/permissions.json","scope":"global","format":"json","note":"Applies to all project directories on the machine."}],"fields":[{"name":"mcpAllowlist","type":"string[]","required":false,"description":"MCP tools that run without approval, as server:tool patterns (wildcards supported, e.g. *:search). Overrides the in-app MCP allowlist when set."},{"name":"terminalAllowlist","type":"string[]","required":false,"description":"Terminal commands that run without approval. Overrides the in-app terminal allowlist when set."},{"name":"autoRun","type":"{ allow_instructions?: string[], block_instructions?: string[] }","required":false,"description":"Natural-language guidance for the Auto-review classifier: actions to lean toward allowing or blocking."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[],"notes":["permissions.json only takes effect when a Run Mode is enabled in Cursor Settings (Auto-review, Allowlist, or Run Everything).","When a key is defined in permissions.json it overrides the corresponding in-app allowlist, which becomes read-only.","Arrays from the global and project files are concatenated before being applied.","autoRun instructions steer the Auto-review classifier; they have no effect in Allowlist or Run Everything modes."],"docs":"https://cursor.com/docs/reference/permissions"}},"behaviors":[{"id":"browser","variant":"Cursor / Agent","operation":"browse","tool":"cursor-browser","availability":"built-in","conditions":["Agent overview checked September 6, 2026; exact version range not specified."],"claims":[{"key":"screenshots","status":"documented","value":true,"note":"Browser can navigate pages, interact with elements, and capture screenshots.","evidence":["cursor-tools"],"verified":"2026-09-06"},{"key":"browserEngine","status":"unknown","note":"Not established by the reviewed official documentation.","evidence":[]},{"key":"accept","status":"unknown","note":"Not established by the reviewed official documentation.","evidence":[]},{"key":"markdownPreference","status":"unknown","note":"Not established by the reviewed official documentation.","evidence":[]},{"key":"userAgent","status":"unknown","note":"Not established by the reviewed official documentation.","evidence":[]},{"key":"javascript","status":"unknown","note":"Not established by the reviewed official documentation.","evidence":[]},{"key":"cookies","status":"unknown","note":"Not established by the reviewed official documentation.","evidence":[]}],"identification":[]},{"id":"web-search","variant":"Cursor / Agent","operation":"search","tool":"cursor-web","availability":"built-in","conditions":["Agent overview checked September 6, 2026; exact version range not specified."],"claims":[{"key":"output","status":"documented","value":"Web search results","note":"Agent generates search queries and performs web searches.","evidence":["cursor-tools"],"verified":"2026-09-06"},{"key":"provider","status":"unknown","note":"Not established by the reviewed official documentation.","evidence":[]},{"key":"accept","status":"unknown","note":"Not established by the reviewed official documentation.","evidence":[]},{"key":"markdownPreference","status":"unknown","note":"Not established by the reviewed official documentation.","evidence":[]},{"key":"userAgent","status":"unknown","note":"Not established by the reviewed official documentation.","evidence":[]}],"identification":[]}]},{"name":"Deep Agents","id":"deepagents","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.deepagents/agent/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Devin for Terminal","type":"cli","vendor":"Cognition","homepage":"https://devin.ai/","id":"devin","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".devin/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.config/devin/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Dexto","id":"dexto","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.agents/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Droid","type":"cli","vendor":"Factory","description":"Factory's AI coding agent for the terminal — interactive TUI and headless droid exec, with MCP, hooks, skills, and custom subagents.","homepage":"https://factory.ai/","docs":"https://docs.factory.ai/","id":"droid","surfaces":{"mcp":{"status":"supported","verified":"2026-07-12","summary":"MCP servers in mcp.json at user, folder, and project level, managed via the /mcp interactive UI, `droid mcp add`, or a built-in registry of 40+ servers.","files":[{"path":"~/.factory/mcp.json","scope":"global","format":"json","key":"mcpServers","note":"Personal servers, available in all projects. Servers added via droid mcp add or the registry go here."},{"path":".factory/mcp.json","scope":"project","format":"json","key":"mcpServers","note":"Shared team servers committed to the repo; also read from .factory/mcp.json in ancestor directories (folder scope). Never put secrets in project config."}],"fields":[{"name":"type","type":"string","required":false,"description":"Server transport. May be omitted for stdio servers.","values":["stdio","http","sse"]},{"name":"command","type":"string","required":false,"description":"Executable to run (stdio servers)."},{"name":"args","type":"string[]","required":false,"description":"Command-line arguments (stdio servers)."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables (stdio servers). Supports ${VAR} expansion."},{"name":"url","type":"string","required":false,"description":"HTTP/HTTPS endpoint (http and sse servers)."},{"name":"headers","type":"record<string, string>","required":false,"description":"HTTP headers for authentication (http and sse servers)."},{"name":"oauth","type":"object | false","required":false,"description":"OAuth overrides (scopes, clientId/clientSecret + authorizationServerIssuer, clientMetadataUrl, tokenEndpointAuthMethod, callbackPort), or false to disable OAuth."},{"name":"disabled","type":"boolean","required":false,"description":"Temporarily disable the server. Default false."},{"name":"enabledTools","type":"string[]","required":false,"description":"Allowlist of tool names to load; takes precedence over disabledTools."},{"name":"disabledTools","type":"string[]","required":false,"description":"Blocklist of tool names to exclude; filtered tools never consume context tokens."},{"name":"timeoutMs","type":"number","required":false,"description":"Per-server MCP tool call timeout override; falls back to mcp.callTimeoutMs in settings.json."}],"transports":["stdio","sse","http"],"auth":["oauth","headers","env"],"invocation":[],"events":[],"capabilities":[{"name":"Tools","status":"supported","note":"View each server's tools via /mcp; filter with enabledTools/disabledTools."}],"examples":[{"title":"mcp.json","language":"json","code":"{\n  \"mcpServers\": {\n    \"linear\": {\n      \"type\": \"http\",\n      \"url\": \"https://mcp.linear.app/mcp\",\n      \"disabled\": false\n    },\n    \"playwright\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@playwright/mcp@latest\"],\n      \"disabled\": false\n    }\n  }\n}\n"},{"title":"Add servers via CLI","language":"bash","code":"droid mcp add sentry https://mcp.sentry.dev/mcp --type http\ndroid mcp add airtable \"npx -y airtable-mcp-server\" --env AIRTABLE_API_KEY=your_key\n"}],"notes":["Layering: user config takes priority, then folder-level (.factory/mcp.json in any ancestor directory), then project config.","Enabling/disabling a project-defined server saves a copy to user config; project servers can only be removed by editing .factory/mcp.json directly.","${VAR} and ${VAR:-default} expansion is supported in command, args, env, url, and headers — expansion happens in memory, the file is never rewritten.","OAuth works with zero configuration for most remote servers (Dynamic Client Registration / CIMD); tokens are stored in the system keyring globally, not per-project.","sse is the legacy HTTP+SSE transport; prefer http (Streamable HTTP).","Custom droids (subagents) can scope themselves to specific servers via the mcpServers frontmatter field.","Enterprise: mcpPolicy allowlist and mcpAutonomyUrlOverrides are enforced through org-managed settings."],"docs":"https://docs.factory.ai/cli/configuration/mcp"},"skills":{"status":"supported","verified":"2026-07-12","summary":"SKILL.md skills in .factory/skills/ that both the user (/skill-name) and the Droid can invoke, with frontmatter to control invocation and optional supporting files.","files":[{"path":".factory/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Project skills shared with teammates, checked into git. Per-subproject .factory folders work in monorepos."},{"path":"~/.factory/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"Personal skills that follow you across projects."},{"path":".agent/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Compatibility path for .agent folder conventions."}],"fields":[{"name":"name","type":"string","required":false,"description":"Display name; defaults to the directory name. Lowercase letters, numbers, and hyphens only."},{"name":"description","type":"string","required":false,"description":"What the skill does and when to use it. The Droid uses this to decide when to apply the skill. Recommended."},{"name":"user-invocable","type":"boolean","required":false,"description":"Set false to hide from the / slash menu (Droid-only background knowledge). Default true."},{"name":"disable-model-invocation","type":"boolean","required":false,"description":"Set true to prevent the Droid from loading the skill automatically (user-only workflows like /deploy). Default false."}],"transports":[],"auth":[],"invocation":["/skill-name","automatic"],"events":[],"capabilities":[],"examples":[{"title":"SKILL.md","language":"markdown","code":"---\nname: summarize-diff\ndescription: Summarize the staged git diff in 3-5 bullets. Use when the user asks for a summary of pending changes.\n---\n\n# Summarize Diff\n\n## Instructions\n\n1. Run `git diff --staged`.\n2. Summarize the changes in 3-5 bullets, focusing on user-visible behavior.\n3. Call out any migrations, risky areas, or tests that should be run.\n"}],"notes":["Custom slash commands have been merged into skills: .factory/commands/review.md and .factory/skills/review/SKILL.md both create /review.","The skill file can be SKILL.md or skill.mdx; supporting files (scripts, schemas, checklists) live in the same directory.","disable-model-invocation: true makes a skill user-only (e.g. /deploy); user-invocable: false makes it Droid-only background knowledge.","<repo>/.agent/skills/ is also discovered for compatibility with .agent folder conventions.","Restart droid (or rescan) after adding skills so they are discovered."],"docs":"https://docs.factory.ai/cli/configuration/skills"},"rules":{"status":"supported","verified":"2026-07-12","summary":"AGENTS.md files at repo root, subdirectories, and a personal override in ~/.factory/AGENTS.md brief the agent on build/test commands, architecture, and conventions.","files":[{"path":"AGENTS.md","scope":"project","format":"markdown","note":"Repo root and sub-folders; closest file to the edited code wins."},{"path":"~/.factory/AGENTS.md","scope":"global","format":"markdown","note":"Personal override read when no project file matches."}],"fields":[],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"AGENTS.md skeleton","language":"markdown","code":"# Build & Test\n\n- Build: `npm run build`\n- Test: `npm run test -- --runInBand`\n\n# Conventions\n\n- All backend code in `packages/api/src`\n- Use `zod` for request validation\n"}],"notes":["Discovery order (first match wins): ./AGENTS.md in the cwd, nearest parent up to the repo root, AGENTS.md in sub-folders the agent is working inside, then the personal override ~/.factory/AGENTS.md.","Multiple files can coexist; the file closer to the code being edited takes precedence.","Plain Markdown; top-level headings act as semantic sections (Build & Test, Architecture Overview, Security, Git Workflows, Conventions & Patterns).","Factory recommends keeping it under ~150 lines with concrete backtick-wrapped commands.","The legacy .droid.yaml project config is superseded by AGENTS.md plus .factory/ settings, MCP, hooks, and skills."],"docs":"https://docs.factory.ai/cli/configuration/agents-md"},"hooks":{"status":"supported","verified":"2026-07-12","summary":"Shell-command hooks in hooks.json at user, project, plugin, and org-managed scope, with matchers, JSON stdin input, and decision control via exit codes or structured JSON output.","files":[{"path":".factory/hooks.json","scope":"project","format":"json","key":"hooks","note":"Committed to share with the team."},{"path":"~/.factory/hooks.json","scope":"global","format":"json","key":"hooks","note":"Applies to all projects."},{"path":"~/.factory/settings.json","scope":"global","format":"json","key":"hooks","note":"Fallback location when hooks.json is absent (same for project settings.json). Org-managed policy hooks are delivered via managed settings."}],"fields":[{"name":"matcher","type":"string","required":false,"description":"Case-sensitive pattern matched against tool names for PreToolUse/PostToolUse (exact, regex, or *). Omit for events without matchers."},{"name":"hooks[].type","type":"\"command\"","required":true,"description":"Hook handler type. Currently only command is supported."},{"name":"hooks[].command","type":"string","required":true,"description":"Bash command to execute; receives event JSON on stdin. Can use $FACTORY_PROJECT_DIR."},{"name":"hooks[].timeout","type":"number","required":false,"description":"Per-command timeout in seconds (default 60)."}],"transports":[],"auth":[],"invocation":[],"events":["PreToolUse","PostToolUse","UserPromptSubmit","Notification","Stop","SubagentStop","PreCompact","SessionStart","SessionEnd"],"capabilities":[],"examples":[{"title":"Style check after file edits","language":"json","code":"{\n  \"hooks\": {\n    \"PostToolUse\": [\n      {\n        \"matcher\": \"Create|Edit|ApplyPatch\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"\\\"$FACTORY_PROJECT_DIR\\\"/.factory/hooks/check-style.sh\"\n          }\n        ]\n      }\n    ]\n  }\n}\n"}],"notes":["If hooks.json is absent, Droid falls back to hooks declared under the hooks key in the matching settings.json; the older .factory/hooks/hooks.json location keeps working and is migrated on save.","matcher applies to PreToolUse/PostToolUse and matches tool names (exact, regex like Edit|Create, or * for all); PreCompact matches manual/auto, SessionStart matches startup/resume/clear/compact.","Hooks receive JSON on stdin (session_id, transcript_path, cwd, permission_mode, event-specific fields). Exit code 2 blocks (per-event behavior); JSON stdout enables permissionDecision allow/deny/ask, updatedInput, additionalContext, continue/stopReason, and suppressOutput.","PreToolUse hooks can modify tool inputs via hookSpecificOutput.updatedInput before execution.","Use $FACTORY_PROJECT_DIR for project-relative scripts; hooks run in parallel with a 60s default timeout, configurable per command.","Manage via the /hooks menu; disable all hooks globally with the hooksDisabled setting. Direct file edits require review in /hooks before applying (session snapshot).","MCP tools are matchable with the mcp__<server>__<tool> naming pattern.","Org-managed hooks are always loaded; allowManagedHooksOnly ignores user/project hooks entirely."],"docs":"https://docs.factory.ai/reference/hooks-reference"},"commands":{"status":"supported","verified":"2026-07-12","summary":"Custom slash commands as Markdown prompts or shebang executables in .factory/commands/, now merged into skills (which offer the same /command plus more features).","files":[{"path":".factory/commands/<name>.md","scope":"project","format":"markdown","note":"Project commands shared with teammates; executables with a shebang also register."},{"path":"~/.factory/commands/<name>.md","scope":"global","format":"markdown","note":"Personal cross-project shortcuts, always scanned."}],"fields":[{"name":"description","type":"string","required":false,"description":"Overrides the generated summary shown in slash suggestions."},{"name":"argument-hint","type":"string","required":false,"description":"Appends inline usage hints (e.g. /code-review <branch-name>)."},{"name":"allowed-tools","type":"string","required":false,"description":"Reserved for future use. Safe to omit."}],"transports":[],"auth":[],"invocation":["/command-name"],"events":[],"capabilities":[],"examples":[{"title":"Markdown command","language":"markdown","code":"---\ndescription: Send a code review checklist\nargument-hint: <branch-name>\n---\n\nPlease review `$ARGUMENTS` and summarize any merge blockers, test gaps, and risky areas.\n\n- Highlight security or performance concerns\n- Suggest follow-up tasks with owners\n"},{"title":"Executable command (smoke.sh registers as /smoke)","language":"bash","code":"#!/usr/bin/env bash\nset -euo pipefail\n\ntarget=${1:-\"src\"}\nnpm run lint -- \"$target\"\nnpm test -- --runTestsByPath \"$target\"\n"}],"notes":["Slash commands are merged into skills: .factory/commands/review.md and .factory/skills/review/SKILL.md both create /review. Existing commands keep working; Factory recommends skills for new commands.","Only Markdown (*.md) files and files with a leading shebang (#!) are registered; filenames are slugged (Code Review.mdx becomes /code-review). Nested folders are ignored.","Workspace commands override personal commands with the same slug.","$ARGUMENTS expands to everything typed after the command name in Markdown commands; positional $1/$2 placeholders are not supported in Markdown (executables receive them as script arguments).","Executable stdout/stderr (up to 64 KB) plus the script contents are posted back to the chat transcript; scripts run from the cwd and inherit your environment.","Run /commands to browse, reload (R), or import (I) commands from .agents or .claude directories."],"docs":"https://docs.factory.ai/cli/configuration/custom-slash-commands"},"settings":{"status":"supported","verified":"2026-07-12","summary":"settings.json in .factory/ folders controls model, autonomy, command allow/deny/block lists, hooks toggle, and more, with local overrides and enterprise org-managed settings.","files":[{"path":"~/.factory/settings.json","scope":"global","format":"json","note":"User settings (Windows: %USERPROFILE%\\.factory\\settings.json). settings.local.json merges on top."},{"path":".factory/settings.json","scope":"project","format":"json","note":"Project-level settings; .factory/settings.local.json provides gitignored local overrides."}],"fields":[{"name":"model","type":"string","required":false,"description":"Default AI model used by droid (any available model ID)."},{"name":"reasoningEffort","type":"string","required":false,"description":"How much structured thinking the model performs; availability depends on the model.","values":["off","none","low","medium","high"]},{"name":"sessionDefaultSettings.interactionMode","type":"string","required":false,"description":"Whether new sessions start in Auto or Spec Mode. Default auto.","values":["auto","spec"]},{"name":"sessionDefaultSettings.autonomyLevel","type":"string","required":false,"description":"Default Autonomy Level for new sessions. Default off (manual approvals).","values":["off","low","medium","high"]},{"name":"commandAllowlist","type":"string[]","required":false,"description":"Commands treated as safe and run without extra confirmation."},{"name":"commandDenylist","type":"string[]","required":false,"description":"Commands that always require confirmation; can still run if explicitly approved."},{"name":"commandBlocklist","type":"string[]","required":false,"description":"Commands that can never run — no prompt, no approval path, enforced even under full autonomy."},{"name":"hooksDisabled","type":"boolean","required":false,"description":"Globally disable all hooks execution without removing configurations. Default false."},{"name":"includeCoAuthoredByDroid","type":"boolean","required":false,"description":"Append the Droid co-author trailer to commits. Default true."},{"name":"enableDroidShield","type":"boolean","required":false,"description":"Enable secret scanning and git guardrails. Default true."},{"name":"cloudSessionSync","type":"boolean","required":false,"description":"Mirror CLI sessions to Factory web. Default true."},{"name":"diffMode","type":"string","required":false,"description":"How code changes are displayed. Default github.","values":["github","unified"]},{"name":"customModels","type":"array","required":false,"description":"Custom model configurations for BYOK (bring your own key)."},{"name":"mcp.callTimeoutMs","type":"number","required":false,"description":"Global timeout for MCP tool calls; overridden per-server by timeoutMs in mcp.json."},{"name":"subagentAutonomyLevel","type":"string","required":false,"description":"Autonomy Level applied to subagents spawned by the Task tool. Default inherit.","values":["inherit","off","low","medium","high"]},{"name":"statusLine","type":"object","required":false,"description":"Custom status line: { command, padding?, maxRows? }; the command's stdout renders above the input."},{"name":"maxAutonomyLevel","type":"string","required":false,"description":"Enterprise: maximum Autonomy Level any session may use; user selections are clamped.","values":["off","low","medium","high"]}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"settings.json","language":"json","code":"{\n  \"model\": \"claude-opus-4-7\",\n  \"reasoningEffort\": \"low\",\n  \"diffMode\": \"github\",\n  \"cloudSessionSync\": true,\n  \"commandAllowlist\": [\"ls\", \"pwd\", \"dir\"],\n  \"commandBlocklist\": [\"shutdown\", \"mkfs\"]\n}\n"}],"notes":["Configure interactively with /settings; changes are saved to the settings file immediately.","settings.local.json alongside settings.json at any level merges on top of it — add it to .gitignore for machine-specific preferences.","Hierarchy: org-managed settings, then user, project, and local overrides (see Enterprise Hierarchical Settings docs).","commandBlocklist can never be bypassed — not even with full autonomy or --skip-permissions-unsafe — and resolves the actual program invoked; commandDenylist requires confirmation; commandAllowlist runs without confirmation.","Enterprise settings (maxAutonomyLevel, modelPolicy, mcpPolicy, networkPolicy, sandbox, ...) are pushed via managed settings and cannot be overridden by users."],"docs":"https://docs.factory.ai/cli/configuration/settings"}},"behaviors":[]},{"name":"Eve","id":"eve","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":"agent/skills/<name>/SKILL.md","scope":"project","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills).","Project-only; skills are stored as flat <name>.md files."]}},"behaviors":[]},{"name":"Firebender","type":"ide-extension","vendor":"Firebender","homepage":"https://firebender.com/","id":"firebender","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.firebender/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"ForgeCode","type":"cli","vendor":"ForgeCode","homepage":"https://forgecode.dev/","id":"forgecode","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".forge/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.forge/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"fx","type":"cli","vendor":"Vercel Labs","homepage":"https://fx.sh/","id":"fx","surfaces":{"mcp":{"status":"supported","verified":"2026-09-07","summary":"Global MCP profiles and explicitly trusted project servers.","files":[{"path":"~/.fx/mcp.json","scope":"global","format":"json","key":"mcp"},{"path":".mcp.json","scope":"project","format":"json","key":"mcpServers","note":"Claude-compatible project format; approval required before connection."}],"fields":[{"name":"type","type":"\"local\" | \"http\" | \"sse\"","required":false,"description":"Transport selector."},{"name":"command","type":"string | string[]","required":false,"description":"Local executable; arrays include arguments."},{"name":"args","type":"string[]","required":false,"description":"Arguments with string commands."},{"name":"environment","type":"record<string, string>","required":false,"description":"Child environment; env is an alias."},{"name":"url","type":"string","required":false,"description":"Required for remote connections."},{"name":"headers","type":"record<string, string>","required":false,"description":"Static headers; literal Authorization is rejected."},{"name":"header_env","type":"record<string, string>","required":false,"description":"Header names mapped to environment variable names."},{"name":"bearer_token_env","type":"string","required":false,"description":"Environment variable containing a bearer token."},{"name":"oauth","type":"object","required":false,"description":"OAuth configuration."},{"name":"enabled","type":"boolean","required":false,"description":"Enable the server."},{"name":"required","type":"boolean","required":false,"description":"Wait for startup; global only."},{"name":"startup_timeout_ms","type":"number","required":false,"description":"Positive startup timeout; default 30000 ms."},{"name":"operation_timeout_ms","type":"number","required":false,"description":"Positive operation timeout; default 60000 ms."}],"transports":["stdio","http","sse"],"auth":["headers","env-secrets","oauth"],"invocation":[],"events":[],"capabilities":[],"examples":[],"notes":["add-mcp 2.3.1 installs only the global profile; native fx also reads project .mcp.json.","Global mcpServers is a compatibility alias for mcp. Project files require mcpServers.","Project strings expand environment templates after trust approval. Global strings remain literal."],"docs":"https://fx.sh/docs/capabilities/mcp"}},"behaviors":[]},{"name":"Gemini CLI","type":"cli","vendor":"Google","description":"Google's open-source AI agent that brings the power of Gemini directly into your terminal.","homepage":"https://geminicli.com","repo":"https://github.com/google-gemini/gemini-cli","docs":"https://github.com/google-gemini/gemini-cli/tree/main/docs","id":"gemini-cli","surfaces":{"mcp":{"status":"supported","verified":"2026-07-12","summary":"MCP servers configured under the mcpServers key in settings.json. Supports stdio, SSE, and Streamable HTTP transports, OAuth (including Google credentials and service-account impersonation), tool filtering, and the gemini mcp CLI for managing entries.","files":[{"path":".gemini/settings.json","scope":"project","format":"json","key":"mcpServers"},{"path":"~/.gemini/settings.json","scope":"global","format":"json","key":"mcpServers"}],"fields":[{"name":"command","type":"string","required":false,"description":"Path to the executable for stdio transport. One of command, url, or httpUrl is required."},{"name":"args","type":"string[]","required":false,"description":"Command-line arguments for stdio transport."},{"name":"url","type":"string","required":false,"description":"SSE endpoint URL (e.g. http://localhost:8080/sse)."},{"name":"httpUrl","type":"string","required":false,"description":"Streamable HTTP endpoint URL."},{"name":"headers","type":"record<string, string>","required":false,"description":"Custom HTTP headers when using url or httpUrl."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables for the server process. Supports $VAR_NAME / ${VAR_NAME} expansion (and %VAR_NAME% on Windows)."},{"name":"cwd","type":"string","required":false,"description":"Working directory for stdio transport."},{"name":"timeout","type":"number","required":false,"description":"Request timeout in milliseconds (default 600,000 = 10 minutes)."},{"name":"trust","type":"boolean","required":false,"description":"When true, bypasses all tool call confirmations for this server. Default false."},{"name":"includeTools","type":"string[]","required":false,"description":"Allowlist of tool names to expose from this server."},{"name":"excludeTools","type":"string[]","required":false,"description":"Denylist of tool names; takes precedence over includeTools."},{"name":"authProviderType","type":"string","required":false,"description":"Authentication provider for remote servers.","values":["dynamic_discovery","google_credentials","service_account_impersonation"]},{"name":"oauth","type":"{ enabled?, clientId?, clientSecret?, authorizationUrl?, tokenUrl?, scopes?, redirectUri?, tokenParamName?, audiences? }","required":false,"description":"OAuth configuration for remote servers; endpoints are auto-discovered when omitted."},{"name":"targetAudience","type":"string","required":false,"description":"OAuth client ID allowlisted on an IAP-protected app (service account impersonation)."},{"name":"targetServiceAccount","type":"string","required":false,"description":"Google Cloud service account email to impersonate (service account impersonation)."}],"transports":["stdio","sse","http"],"auth":["oauth","headers","google-credentials","service-account-impersonation"],"invocation":[],"events":[],"capabilities":[{"name":"Tools","status":"supported"},{"name":"Prompts","status":"supported","note":"Server prompts become slash commands, e.g. /poem-writer --title=\"...\"."},{"name":"Resources","status":"supported","note":"Discovered at startup and referenced in chat with @server://resource/path."},{"name":"Roots","status":"missing","note":"Not documented in the official MCP docs."},{"name":"Elicitation","status":"missing","note":"Not documented in the official MCP docs."},{"name":"Sampling","status":"missing","note":"Not documented in the official MCP docs."}],"examples":[{"title":"Local stdio server","language":"json","code":"{\n  \"mcpServers\": {\n    \"pythonTools\": {\n      \"command\": \"python\",\n      \"args\": [\"-m\", \"my_mcp_server\", \"--port\", \"8080\"],\n      \"env\": { \"API_KEY\": \"$EXTERNAL_API_KEY\" },\n      \"timeout\": 15000\n    }\n  }\n}\n"},{"title":"Remote HTTP server with headers","language":"json","code":"{\n  \"mcpServers\": {\n    \"httpServerWithAuth\": {\n      \"httpUrl\": \"http://localhost:3000/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer your-api-token\" },\n      \"timeout\": 5000\n    }\n  }\n}\n"}],"notes":["MCP tools get a fully qualified name mcp_{serverName}_{toolName}; avoid underscores in server names so policy rules parse correctly.","The mcp settings object (mcp.allowed / mcp.excluded) globally allow- or deny-lists servers by name.","Manage servers without editing JSON via gemini mcp add/list/remove/enable/disable; per-server enablement is stored in ~/.gemini/mcp-server-enablement.json.","OAuth tokens are stored in ~/.gemini/mcp-oauth-tokens.json and refreshed automatically.","Sensitive host environment variables (patterns like *TOKEN*, *SECRET*, *KEY*) are redacted from server processes unless explicitly listed in env.","MCP server instructions (from the initialize result) are appended to the system prompt."],"docs":"https://github.com/google-gemini/gemini-cli/blob/main/docs/tools/mcp-server.md"},"skills":{"status":"supported","verified":"2026-07-12","summary":"Agent Skills based on the agentskills.io open standard: SKILL.md directories discovered from built-in, extension, user, and workspace tiers, activated by the model via the activate_skill tool with user consent.","files":[{"path":".gemini/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Workspace skills, shared with the team via version control."},{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Interoperable alias; takes precedence over .gemini/skills/ within the workspace tier."},{"path":"~/.gemini/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"User skills, available across all projects."},{"path":"~/.agents/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"Interoperable alias; takes precedence over ~/.gemini/skills/ within the user tier."}],"fields":[{"name":"name","type":"string","required":true,"description":"Unique skill identifier; should match the directory name."},{"name":"description","type":"string","required":true,"description":"How Gemini decides when to use the skill. Be specific about tasks and trigger keywords."}],"transports":[],"auth":[],"invocation":["automatic (activate_skill tool)","/skills list"],"events":[],"capabilities":[],"examples":[{"title":"SKILL.md","language":"markdown","code":"---\nname: code-reviewer\ndescription:\n  Expertise in reviewing code changes for correctness, security, and style. Use\n  when the user asks to \"review\" their code or a PR.\n---\n\n# Code Reviewer Instructions\n\n1. **Analyze**: Review the provided code for logical errors and style violations.\n2. **Review**: Use the bundled `scripts/review.js` utility to perform an automated check.\n3. **Feedback**: Provide constructive feedback.\n"}],"notes":["Discovery precedence (lowest to highest): built-in, extension, user, workspace. Within a tier the .agents/skills/ alias wins over .gemini/skills/.","Only skill name and description are injected into the system prompt; the SKILL.md body loads on activation (progressive disclosure).","Activation grants the model read access to the skill's directory (scripts/, references/, assets/).","Manage with /skills list|link|enable|disable|reload in-session, or gemini skills list|install|uninstall|link from the terminal.","Toggle the feature with the skills.enabled setting (default true)."],"docs":"https://github.com/google-gemini/gemini-cli/blob/main/docs/cli/skills.md"},"rules":{"status":"supported","verified":"2026-07-12","summary":"Hierarchical GEMINI.md context files loaded from the global, workspace, and just-in-time (per-directory) tiers, concatenated and sent with every prompt. Supports @file.md imports and configurable file names (e.g. AGENTS.md).","files":[{"path":"GEMINI.md","scope":"project","format":"markdown","note":"Found in workspace directories and their parents; subdirectory files load just-in-time when tools access them."},{"path":"~/.gemini/GEMINI.md","scope":"global","format":"markdown","note":"Default instructions for all projects."}],"fields":[{"name":"context.fileName","type":"string | string[]","required":false,"description":"settings.json option that overrides the context file name(s), e.g. [\"AGENTS.md\", \"CONTEXT.md\", \"GEMINI.md\"]."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Project GEMINI.md","language":"markdown","code":"# Project: My TypeScript Library\n\n## General Instructions\n\n- When you generate new TypeScript code, follow the existing coding style.\n- Ensure all new functions and classes have JSDoc comments.\n\n## Imports\n\n@./components/instructions.md\n"},{"title":"Use AGENTS.md as the context file","language":"json","code":"{\n  \"context\": {\n    \"fileName\": [\"AGENTS.md\", \"GEMINI.md\"]\n  }\n}\n"}],"notes":["Load order: ~/.gemini/GEMINI.md, then GEMINI.md files found in workspace directories and their parents, then just-in-time files discovered when tools touch a directory.","Compose instructions with @./path/file.md imports (relative or absolute paths); see the memory import processor docs.","Rename or add context file names via the context.fileName setting, e.g. [\"AGENTS.md\", \"GEMINI.md\"].","Inspect and reload with /memory show and /memory reload.","The experimental Auto Memory feature (experimental.autoMemory) mines past sessions and proposes memory patches for review via /memory inbox."],"docs":"https://github.com/google-gemini/gemini-cli/blob/main/docs/cli/gemini-md.md"},"hooks":{"status":"supported","verified":"2026-07-12","summary":"Synchronous shell commands that run at lifecycle events across the agent loop, configured under the hooks key in settings.json. Hooks communicate via JSON on stdin/stdout and can inject context, rewrite tool arguments, block actions, mock model responses, or filter tools.","files":[{"path":".gemini/settings.json","scope":"project","format":"json","key":"hooks"},{"path":"~/.gemini/settings.json","scope":"global","format":"json","key":"hooks"},{"path":"/etc/gemini-cli/settings.json","scope":"enterprise","format":"json","key":"hooks","note":"System settings (Linux). Windows: C:\\ProgramData\\gemini-cli\\settings.json; macOS: /Library/Application Support/GeminiCli/settings.json."}],"fields":[{"name":"matcher","type":"string","required":false,"description":"Regex (tool events) or exact string (lifecycle events) filtering when the hook group fires."},{"name":"sequential","type":"boolean","required":false,"description":"Run hooks in this group one after another instead of in parallel."},{"name":"hooks[].type","type":"\"command\"","required":true,"description":"Execution engine. Currently only \"command\" is supported."},{"name":"hooks[].command","type":"string","required":true,"description":"Shell command to execute. Receives event JSON on stdin."},{"name":"hooks[].name","type":"string","required":false,"description":"Friendly name for logs and the /hooks commands."},{"name":"hooks[].timeout","type":"number","required":false,"description":"Execution timeout in milliseconds (default 60000)."},{"name":"hooks[].description","type":"string","required":false,"description":"Brief explanation of the hook's purpose."}],"transports":[],"auth":[],"invocation":[],"events":["SessionStart","SessionEnd","BeforeAgent","AfterAgent","BeforeModel","AfterModel","BeforeToolSelection","BeforeTool","AfterTool","PreCompress","Notification"],"capabilities":[],"examples":[{"title":"Security check before file writes","language":"json","code":"{\n  \"hooks\": {\n    \"BeforeTool\": [\n      {\n        \"matcher\": \"write_file|replace\",\n        \"hooks\": [\n          {\n            \"name\": \"security-check\",\n            \"type\": \"command\",\n            \"command\": \"$GEMINI_PROJECT_DIR/.gemini/hooks/security.sh\",\n            \"timeout\": 5000\n          }\n        ]\n      }\n    ]\n  }\n}\n"}],"notes":["Exit code 0 parses stdout as JSON (preferred, including intentional denies); exit code 2 blocks the action with stderr as the reason; other codes warn and continue.","Matchers are regexes for tool events (e.g. \"write_.*\") and exact strings for lifecycle events; \"*\" or \"\" matches all.","Settings precedence: project (.gemini/settings.json) over user (~/.gemini/settings.json) over system (/etc/gemini-cli/settings.json) over extensions.","Project hooks are fingerprinted; a changed name or command is treated as a new untrusted hook and re-confirmed.","Hooks receive GEMINI_PROJECT_DIR, GEMINI_SESSION_ID, GEMINI_CWD env vars (plus CLAUDE_PROJECT_DIR as a compatibility alias).","Manage via /hooks panel, /hooks enable/disable; toggle the system with hooksConfig.enabled."],"docs":"https://github.com/google-gemini/gemini-cli/blob/main/docs/hooks/index.md"},"commands":{"status":"supported","verified":"2026-07-12","summary":"Custom slash commands defined as TOML files under .gemini/commands/. Subdirectories create namespaced names (git/commit.toml becomes /git:commit). Prompts support {{args}} injection, !{...} shell execution, and @{...} file embedding.","files":[{"path":".gemini/commands/<name>.toml","scope":"project","format":"toml","note":"Project commands; subdirectories namespace the command name with colons."},{"path":"~/.gemini/commands/<name>.toml","scope":"global","format":"toml","note":"User commands, available in every project."}],"fields":[{"name":"prompt","type":"string","required":true,"description":"The prompt sent to the model when the command runs. Single or multi-line."},{"name":"description","type":"string","required":false,"description":"One-line description shown in the /help menu. Generated from the filename if omitted."}],"transports":[],"auth":[],"invocation":["/command-name","/namespace:command-name"],"events":[],"capabilities":[],"examples":[{"title":"Commit message from staged diff","language":"toml","code":"# In: <project>/.gemini/commands/git/commit.toml\n# Invoked via: /git:commit\n\ndescription = \"Generates a Git commit message based on staged changes.\"\nprompt = \"\"\"\nPlease generate a Conventional Commit message based on the following git diff:\n\n!{git diff --staged}\n\"\"\"\n"}],"notes":["Project commands override user commands of the same name.","{{args}} is injected raw in the prompt body and shell-escaped inside !{...} blocks; without {{args}}, the full invocation is appended to the prompt.","!{...} shell blocks require user confirmation before execution; @{...} embeds file content or directory listings (multimodal for images/PDF).","Run /commands reload to pick up TOML changes without restarting; /commands list shows all command files.","MCP server prompts also surface as slash commands (see the MCP surface)."],"docs":"https://github.com/google-gemini/gemini-cli/blob/main/docs/cli/custom-commands.md"},"settings":{"status":"supported","verified":"2026-07-12","summary":"Layered settings.json files (system defaults, user, project, system overrides) organized into category objects like general, ui, model, context, tools, security, mcp, and hooksConfig. Editable in-session with the /settings dialog.","files":[{"path":".gemini/settings.json","scope":"project","format":"json","note":"Project settings; override user settings and system defaults."},{"path":"~/.gemini/settings.json","scope":"global","format":"json","note":"User settings for all sessions."},{"path":"/etc/gemini-cli/settings.json","scope":"enterprise","format":"json","note":"System overrides beating all other files (Linux). Windows: C:\\ProgramData\\gemini-cli\\settings.json; macOS: /Library/Application Support/GeminiCli/settings.json."},{"path":"/etc/gemini-cli/system-defaults.json","scope":"enterprise","format":"json","note":"System-wide defaults with the lowest precedence (Linux); Windows and macOS analogues exist."}],"fields":[{"name":"general","type":"object","required":false,"description":"General behavior: vimMode, defaultApprovalMode (default | auto_edit | plan), enableAutoUpdate, session retention, plan mode."},{"name":"model","type":"object","required":false,"description":"Model selection and session behavior: name, maxSessionTurns, compressionThreshold."},{"name":"context","type":"object","required":false,"description":"Context loading: fileName (GEMINI.md alternatives), discoveryMaxDirs, fileFiltering (.gitignore/.geminiignore handling)."},{"name":"mcpServers","type":"record<string, object>","required":false,"description":"MCP server definitions (see the MCP surface)."},{"name":"mcp","type":"{ serverCommand?, allowed?, excluded? }","required":false,"description":"Global MCP rules: allow/deny lists of server names."},{"name":"hooks","type":"object","required":false,"description":"Lifecycle hook configuration (see the Hooks surface)."},{"name":"hooksConfig","type":"{ enabled?: boolean, notifications?: boolean }","required":false,"description":"Canonical toggle and UI indicators for the hooks system."},{"name":"skills","type":"{ enabled?: boolean }","required":false,"description":"Toggle for Agent Skills (default true)."},{"name":"tools","type":"object","required":false,"description":"Tool behavior: sandbox paths and network access, shell options, useRipgrep, output truncation."},{"name":"security","type":"object","required":false,"description":"Security controls: folderTrust, disableYoloMode, always-allow behavior, extension allowlists, environment variable redaction."},{"name":"ui","type":"object","required":false,"description":"Terminal UI: theme switching, footer, banner, accessibility, rendering options."},{"name":"experimental","type":"object","required":false,"description":"Experimental flags such as autoMemory, worktrees, voiceMode, and modelSteering."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Project settings","language":"json","code":"{\n  \"general\": { \"defaultApprovalMode\": \"auto_edit\" },\n  \"context\": { \"fileName\": [\"AGENTS.md\", \"GEMINI.md\"] },\n  \"mcpServers\": {\n    \"github\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@github/github-mcp-server\"],\n      \"env\": { \"GITHUB_PERSONAL_ACCESS_TOKEN\": \"$GITHUB_PERSONAL_ACCESS_TOKEN\" }\n    }\n  }\n}\n"}],"notes":["Precedence (low to high): defaults, system defaults file, user, project, system settings file, environment variables, command-line arguments.","String values may reference environment variables with $VAR_NAME, ${VAR_NAME}, or ${VAR_NAME:-default} syntax.","A hosted JSON schema is available at schemas/settings.schema.json in the repository for editor validation.","System paths can be overridden with GEMINI_CLI_SYSTEM_SETTINGS_PATH and GEMINI_CLI_SYSTEM_DEFAULTS_PATH."],"docs":"https://github.com/google-gemini/gemini-cli/blob/main/docs/cli/settings.md"}},"behaviors":[]},{"name":"GitHub Copilot","type":"platform","vendor":"GitHub","description":"The GitHub Copilot cloud agent (formerly coding agent) on github.com — an autonomous agent that works on issues and pull requests in an ephemeral Actions-powered environment, configured via repository files and repository settings.","homepage":"https://github.com/features/copilot","docs":"https://docs.github.com/en/copilot/concepts/agents/cloud-agent","id":"github-copilot","surfaces":{"mcp":{"status":"supported","verified":"2026-07-12","summary":"Repository administrators configure MCP servers as JSON (mcpServers key) in the repository settings on github.com (Settings > Copilot > MCP servers). The config is shared by the cloud agent and Copilot code review; secrets are injected via COPILOT_MCP_-prefixed Agents secrets.","files":[],"fields":[{"name":"type","type":"\"local\" | \"stdio\" | \"http\" | \"sse\"","required":true,"description":"Server transport. local and stdio are equivalent (local process); http and sse are remote."},{"name":"tools","type":"string[]","required":true,"description":"Allowlist of tools to enable from the server; use [\"*\"] for all tools."},{"name":"command","type":"string","required":false,"description":"Command to start a local server (required for local/stdio)."},{"name":"args","type":"string[]","required":false,"description":"Arguments passed to the command (required for local/stdio)."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables for a local server; values may reference COPILOT_MCP_-prefixed secrets/variables."},{"name":"url","type":"string","required":false,"description":"The MCP server's URL (required for http/sse)."},{"name":"headers","type":"record<string, string>","required":false,"description":"Headers attached to requests to a remote server; values may reference COPILOT_MCP_-prefixed secrets/variables."}],"transports":["stdio","http","sse"],"auth":["headers","env-secrets"],"invocation":[],"events":[],"capabilities":[{"name":"Tools","status":"supported"},{"name":"Resources","status":"unsupported"},{"name":"Prompts","status":"unsupported"}],"examples":[{"title":"Local server with a secret","language":"json","code":"{\n  \"mcpServers\": {\n    \"sentry\": {\n      \"type\": \"local\",\n      \"command\": \"npx\",\n      \"args\": [\"@sentry/mcp-server@latest\", \"--host=$SENTRY_HOST\"],\n      \"env\": {\n        \"SENTRY_HOST\": \"https://contoso.sentry.io\",\n        \"SENTRY_ACCESS_TOKEN\": \"$COPILOT_MCP_SENTRY_ACCESS_TOKEN\"\n      },\n      \"tools\": [\"*\"]\n    }\n  }\n}\n"},{"title":"Remote SSE server","language":"json","code":"{\n  \"mcpServers\": {\n    \"cloudflare\": {\n      \"type\": \"sse\",\n      \"url\": \"https://docs.mcp.cloudflare.com/sse\",\n      \"tools\": [\"*\"]\n    }\n  }\n}\n"}],"notes":["The JSON configuration is entered directly in repository settings on github.com, not stored as a repo file.","The GitHub MCP server and Playwright MCP server are enabled by default; the built-in GitHub server uses a read-only token scoped to the current repository.","Only MCP tools are supported; resources and prompts are not. Remote servers using OAuth are not supported.","Configured tools run autonomously without per-call approval — allowlist specific read-only tools where possible.","env and headers values reference Agents secrets/variables prefixed with COPILOT_MCP_ using $VAR, ${VAR}, or ${VAR:-default} substitution.","Servers needing extra dependencies can install them via .github/workflows/copilot-setup-steps.yml.","Org/enterprise admins can also attach MCP servers to custom agents via the mcp-servers frontmatter property."],"docs":"https://docs.github.com/en/copilot/how-tos/use-copilot-agents/coding-agent/extend-coding-agent-with-mcp"},"skills":{"status":"supported","verified":"2026-07-12","summary":"SKILL.md Agent Skills (open standard) stored in the repository; loaded automatically when relevant to the cloud agent's task and also used by Copilot code review.","files":[{"path":".github/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":".claude/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Claude-compatible project location."},{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Cross-agent project location."}],"fields":[{"name":"name","type":"string","required":true,"description":"Unique identifier: lowercase, hyphens for spaces, typically matching the skill directory name."},{"name":"description","type":"string","required":true,"description":"What the skill does and when Copilot should use it."},{"name":"license","type":"string","required":false,"description":"License that applies to this skill."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[{"title":"SKILL.md","language":"markdown","code":"---\nname: github-actions-failure-debugging\ndescription: Guide for debugging failing GitHub Actions workflows. Use this when asked to debug failing GitHub Actions workflows.\n---\n\n1. Use the `list_workflow_runs` tool to look up recent workflow runs and their status\n2. Use the `summarize_job_log_failures` tool to get an AI summary of failed job logs\n3. Try to reproduce the failure and fix the failing build before committing\n"}],"notes":["The cloud agent runs in an ephemeral sandbox, so only project skills committed to the repository apply; personal skills (~/.copilot/skills, ~/.agents/skills) apply to local surfaces like Copilot CLI and VS Code.","Skills in .github/skills are also used automatically by Copilot code review when relevant (public preview).","Skills can bundle scripts and other resources referenced from SKILL.md.","Discover and install shared skills with gh skill in GitHub CLI or from the Awesome GitHub Copilot collection."],"docs":"https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/customize-cloud-agent/add-skills"},"rules":{"status":"supported","verified":"2026-07-12","summary":"Repository custom instructions: repo-wide .github/copilot-instructions.md, path-specific .github/instructions/*.instructions.md with applyTo globs, and AGENTS.md files anywhere in the repo (nearest file wins).","files":[{"path":".github/copilot-instructions.md","scope":"project","format":"markdown","note":"Repository-wide instructions applied to all Copilot requests in the repo."},{"path":".github/instructions/**/*.instructions.md","scope":"project","format":"markdown","note":"Path-specific instructions with applyTo frontmatter; subdirectories allowed."},{"path":"AGENTS.md","scope":"project","format":"markdown","note":"Can be stored anywhere in the repository; the nearest AGENTS.md in the directory tree takes precedence."},{"path":"CLAUDE.md","scope":"project","format":"markdown","note":"Alternative single agent-instructions file in the repo root (GEMINI.md also accepted)."}],"fields":[{"name":"applyTo","type":"string","required":true,"description":"Glob pattern(s), comma-separated, selecting the files the instructions apply to (path-specific files only). Example: \"**/*.ts,**/*.tsx\"."},{"name":"excludeAgent","type":"string","required":false,"description":"Exclude the file from one agent. Omit to apply to both the cloud agent and code review.","values":["cloud-agent","code-review"]}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Path-specific instructions","language":"markdown","code":"---\napplyTo: \"app/models/**/*.rb\"\nexcludeAgent: \"code-review\"\n---\nUse ActiveRecord validations for all model constraints.\nPrefer scopes over class methods for query logic.\n"}],"notes":["Path-specific instructions on GitHub.com are supported for the cloud agent and Copilot code review.","The excludeAgent frontmatter key ('cloud-agent' or 'code-review') limits a path-specific file to one of the two agents.","A single CLAUDE.md or GEMINI.md in the repository root can be used instead of AGENTS.md.","Organization-level custom instructions can be defined on GitHub and apply across repositories (enterprise/org scope, configured in the org UI rather than a repo file).","Priority: personal instructions > repository instructions > organization instructions; all applicable sets are provided to Copilot.","The cloud agent can generate a copilot-instructions.md for you (onboarding prompt at github.com/copilot/agents).","For code review, Copilot uses the instructions in the base branch of the pull request."],"docs":"https://docs.github.com/en/copilot/how-tos/configure-custom-instructions/add-repository-instructions"},"hooks":{"status":"supported","verified":"2026-07-12","summary":"The cloud agent runs .github/hooks/*.json hooks inside its ephemeral Linux sandbox. A subset of events fires; only bash (or the cross-platform command) entries are honored, and HTTP hooks must target firewall-allowed hosts.","files":[{"path":".github/hooks/*.json","scope":"project","format":"json","key":"hooks"}],"fields":[{"name":"type","type":"\"command\" | \"http\"","required":false,"description":"Hook handler type. Defaults to command. Prompt hooks may not fire because cloud agent jobs are non-interactive."},{"name":"bash","type":"string","required":false,"description":"Shell command for the Linux sandbox. powershell entries are ignored under the cloud agent."},{"name":"command","type":"string","required":false,"description":"Cross-platform fallback command, honored when bash is absent."},{"name":"cwd","type":"string","required":false,"description":"Working directory. The sandbox workspace is /workspace when a repository is cloned."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables to set (supports variable expansion)."},{"name":"timeoutSec","type":"number","required":false,"description":"Timeout in seconds. Default 30. timeout is accepted as an alias."},{"name":"matcher","type":"string","required":false,"description":"Optional regex (anchored ^(?:PATTERN)$) filtering by tool name (preToolUse/postToolUse), agent name (subagentStart), or trigger (preCompact)."},{"name":"url","type":"string","required":false,"description":"Target URL for http hooks; must be https and reachable through the cloud agent firewall."}],"transports":[],"auth":[],"invocation":[],"events":["sessionStart","sessionEnd","userPromptSubmitted","preToolUse","postToolUse","postToolUseFailure","agentStop","subagentStart","subagentStop","errorOccurred","preCompact"],"capabilities":[],"examples":[{"title":"Deny destructive commands","language":"json","code":"{\n  \"version\": 1,\n  \"hooks\": {\n    \"preToolUse\": [\n      {\n        \"type\": \"command\",\n        \"matcher\": \"bash\",\n        \"bash\": \"./scripts/block-dangerous.sh\",\n        \"timeoutSec\": 10\n      }\n    ]\n  }\n}\n"}],"notes":["Same JSON format ({ \"version\": 1, \"hooks\": { ... } }) as Copilot CLI; event names in camelCase, or PascalCase for the VS Code-compatible snake_case payloads.","In cloud agent jobs, only .github/hooks/*.json in the cloned repository is loaded — no user-level files, settings.json, or plugins exist in the sandbox.","notification and permissionRequest hooks do not apply (tool calls are pre-approved); a preToolUse decision of 'ask' is treated as 'deny'.","preCompact fires only with trigger 'auto'; sessionStart fires once per job as a new session.","The sandbox filesystem is ephemeral — persist hook output via an http hook to an admin-allowlisted host.","preToolUse command hooks are fail-closed: crashes, timeouts, and non-zero exits (other than 2) deny the tool call.","Set disableAllHooks: true at the top level of a hook file to skip its hooks without deleting it."],"docs":"https://docs.github.com/en/copilot/reference/hooks-reference"},"commands":{"status":"unsupported","verified":"2026-07-12","summary":"Prompt files (.github/prompts/*.prompt.md) are not supported on GitHub.com; GitHub's customization cheat sheet marks prompt files as unsupported for the GitHub.com surface.","files":[],"fields":[],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[],"notes":["For reusable on-demand workflows with the cloud agent, use Agent Skills (.github/skills) or custom agents (.github/agents/*.md) instead."],"docs":"https://docs.github.com/en/copilot/reference/customization-cheat-sheet"},"settings":{"status":"supported","verified":"2026-07-12","summary":"The cloud agent's environment is configured with a .github/workflows/copilot-setup-steps.yml Actions workflow (preinstall dependencies, choose runners) plus .github/copilot/settings.json for plugins. Remaining configuration (MCP, firewall, secrets, code review toggles) lives in repository settings on github.com.","files":[{"path":".github/workflows/copilot-setup-steps.yml","scope":"project","format":"yaml","key":"jobs.copilot-setup-steps","note":"Standard GitHub Actions workflow syntax; runs as a normal workflow when changed so it can be validated."},{"path":".github/copilot/settings.json","scope":"project","format":"json","note":"Shared repository configuration; the cloud agent reads the plugin-related keys (enabledPlugins, extraKnownMarketplaces) and hooks-related keys."}],"fields":[{"name":"steps","type":"step[]","required":false,"description":"Actions steps executed before the agent starts (checkout, toolchain setup, dependency install). A failing step skips the rest and the agent starts anyway."},{"name":"permissions","type":"object","required":false,"description":"Workflow token permissions for the setup job (use least privilege; contents: read to clone). Copilot gets its own token for its work."},{"name":"runs-on","type":"string | string[]","required":false,"description":"Runner selection: standard, larger GitHub-hosted, or self-hosted runner labels/groups. Ubuntu x64 and Windows only."},{"name":"services","type":"object","required":false,"description":"Service containers available during the job."},{"name":"timeout-minutes","type":"number","required":false,"description":"Setup job timeout. Maximum value 59."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"copilot-setup-steps.yml","language":"yaml","code":"name: \"Copilot Setup Steps\"\non:\n  workflow_dispatch:\n  push:\n    paths: [.github/workflows/copilot-setup-steps.yml]\n\njobs:\n  copilot-setup-steps:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v6\n      - name: Set up Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version: \"20\"\n          cache: \"npm\"\n      - name: Install JavaScript dependencies\n        run: npm ci\n"}],"notes":["copilot-setup-steps.yml must contain a single job named copilot-setup-steps and be present on the default branch to take effect; it runs before the agent starts work.","Only steps, permissions, runs-on, services, snapshot, and timeout-minutes (max 59) can be customized on the job; other job settings are ignored.","Supports larger GitHub-hosted runners, self-hosted runners (Ubuntu x64 or Windows only), Windows environments, and Git LFS via actions/checkout with lfs: true.","Agents secrets and variables (e.g. COPILOT_MCP_* for MCP servers) are configured in repository or organization settings on github.com.","The integrated firewall can be customized or disabled in repository settings; it must be disabled for self-hosted runners.","The enabledPlugins and extraKnownMarketplaces keys of .github/copilot/settings.json are read by both the cloud agent and Copilot CLI."],"docs":"https://docs.github.com/en/copilot/how-tos/use-copilot-agents/coding-agent/customize-the-agent-environment"}},"behaviors":[]},{"name":"GitHub Copilot CLI","type":"cli","vendor":"GitHub","description":"GitHub Copilot's terminal coding agent — configured through the ~/.copilot directory (settings.json, mcp-config.json, skills/, hooks/) plus repository-level files like AGENTS.md, .github/copilot/settings.json, and .mcp.json.","homepage":"https://github.com/features/copilot","docs":"https://docs.github.com/en/copilot/how-tos/copilot-cli","id":"github-copilot-cli","surfaces":{"mcp":{"status":"supported","verified":"2026-09-07","summary":"MCP servers are configured under the mcpServers key in ~/.copilot/mcp-config.json (user level) or in workspace .mcp.json / .github/mcp.json files, or managed with /mcp and copilot mcp commands. Supports stdio, Streamable HTTP, and legacy SSE with OAuth (including headless client_credentials).","files":[{"path":"~/.copilot/mcp-config.json","scope":"global","format":"json","key":"mcpServers","note":"Or $COPILOT_HOME/mcp-config.json when COPILOT_HOME is set."},{"path":".mcp.json","scope":"project","format":"json","key":"mcpServers","note":"Workspace servers; takes precedence over user-level definitions on name conflicts."},{"path":".github/mcp.json","scope":"project","format":"json","key":"mcpServers","note":"Repository-level alternative to .mcp.json."}],"fields":[{"name":"type","type":"\"local\" | \"stdio\" | \"http\" | \"sse\"","required":false,"description":"Transport. local and stdio are equivalent; defaults to local for command servers."},{"name":"command","type":"string","required":false,"description":"Command to start a local server."},{"name":"args","type":"string[]","required":false,"description":"Arguments passed to the command."},{"name":"tools","type":"string[]","required":false,"description":"User-level tool selection (optional in project configs): [\"*\"] for all, or a list of tool names."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables for local servers. Supports $VAR, ${VAR}, and ${VAR:-default} expansion."},{"name":"cwd","type":"string","required":false,"description":"Working directory for a local server."},{"name":"url","type":"string","required":false,"description":"Server URL for remote (http/sse) servers."},{"name":"headers","type":"record<string, string>","required":false,"description":"HTTP headers for remote servers; supports variable expansion."},{"name":"timeout","type":"number","required":false,"description":"Tool call timeout in milliseconds."},{"name":"oauthClientId","type":"string","required":false,"description":"Static OAuth client ID (skips dynamic client registration)."},{"name":"oauthGrantType","type":"\"authorization_code\" | \"client_credentials\"","required":false,"description":"OAuth grant type. client_credentials enables fully headless auth (no browser) with oauthPublicClient: false and a keychain-stored client secret."},{"name":"oidc","type":"boolean","required":false,"description":"Inject GitHub OIDC tokens into the server's env (local) or as a Bearer Authorization header (remote)."},{"name":"deferTools","type":"\"auto\" | \"never\"","required":false,"description":"Set to never to keep the server's tools always visible when tool search (deferred tool loading) is active."}],"transports":["stdio","http","sse"],"auth":["oauth","headers","env-secrets","oidc"],"invocation":[],"events":[],"capabilities":[{"name":"Tools","status":"supported"},{"name":"Sampling","status":"supported","note":"Sampling requests require approval; persist per server via the mcp-sampling approval kind in permissions-config.json."},{"name":"Elicitation","status":"supported","note":"Elicitation dialogs surface as CLI notifications (notification_type elicitation_dialog)."}],"examples":[{"title":"Local and remote servers","language":"json","code":"{\n  \"mcpServers\": {\n    \"playwright\": {\n      \"type\": \"local\",\n      \"command\": \"npx\",\n      \"args\": [\"@playwright/mcp@latest\"],\n      \"env\": {},\n      \"tools\": [\"*\"]\n    },\n    \"context7\": {\n      \"type\": \"http\",\n      \"url\": \"https://mcp.context7.com/mcp\",\n      \"headers\": { \"CONTEXT7_API_KEY\": \"YOUR-API-KEY\" },\n      \"tools\": [\"*\"]\n    }\n  }\n}\n"},{"title":"Add servers from the terminal","language":"bash","code":"copilot mcp add context7 -- npx -y @upstash/context7-mcp\ncopilot mcp add --transport http notion https://mcp.notion.com/mcp\n"}],"notes":["Project files accept mcpServers or a bare server-name map. They use strict JSON, not JSONC.","When both project files exist in one directory, .mcp.json wins. add-mcp 2.3.1 creates .mcp.json or reuses an existing .github/mcp.json.","A .mcp.json shared with Claude Code represents the same servers for both clients; editing or removing entries affects both.","Loading priority: --additional-mcp-config flag > plugin-provided servers > workspace .mcp.json / .github/mcp.json (loaded from the working directory up to the Git root; requires folder trust) > ~/.copilot/mcp-config.json.","Built-in servers: github-mcp-server, playwright, fetch, time, and (opt-in) computer-use. Disable with --disable-builtin-mcps or --disable-mcp-server.","To migrate from VS Code's .vscode/mcp.json, remap the servers key to mcpServers in .mcp.json.","All MCP tool invocations require explicit permission; approvals persist in ~/.copilot/permissions-config.json.","GitHub Enterprise organizations can enforce a fail-closed MCP server allowlist.","Use /mcp auth <server> to re-run the OAuth flow for remote servers."],"docs":"https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/add-mcp-servers"},"skills":{"status":"supported","verified":"2026-07-12","summary":"SKILL.md Agent Skills (open standard) loaded from project and personal skill folders, invoked automatically by the agent or manually as /skill-name. Managed with /skills and copilot skill commands.","files":[{"path":".github/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Cross-agent project location."},{"path":".claude/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Claude-compatible project location."},{"path":"~/.copilot/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"Personal skills for all projects; additional directories via the skillDirectories setting or COPILOT_SKILLS_DIRS."},{"path":"~/.agents/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"Cross-agent personal location."}],"fields":[{"name":"name","type":"string","required":true,"description":"Unique identifier. Letters, numbers, and hyphens only; max 64 characters; typically matches the skill directory name."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it. Max 1024 characters."},{"name":"argument-hint","type":"string","required":false,"description":"Freeform hint describing expected arguments, shown in the skill picker."},{"name":"allowed-tools","type":"string | string[]","required":false,"description":"Tools automatically allowed while the skill is active. Use \"*\" for all tools."},{"name":"user-invocable","type":"boolean","required":false,"description":"Whether users can invoke the skill with /SKILL-NAME. Default true."},{"name":"disable-model-invocation","type":"boolean","required":false,"description":"Prevent the agent from automatically invoking this skill. Default false."},{"name":"license","type":"string","required":false,"description":"License that applies to this skill."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[{"title":"Skill that runs a script","language":"markdown","code":"---\nname: image-convert\ndescription: Converts SVG images to PNG format. Use when asked to convert SVG files.\nallowed-tools: shell\n---\n\nWhen asked to convert an SVG to PNG, run the `convert-svg-to-png.sh` script\nfrom this skill's base directory, passing the input SVG file path as the\nfirst argument.\n"}],"notes":["Location priority (first found wins for duplicate names): .github/skills > .agents/skills > .claude/skills > parent .github/skills (monorepo) > ~/.copilot/skills > ~/.agents/skills > plugin skills > COPILOT_SKILLS_DIRS > bundled > remote org/enterprise skills.","Skills can bundle scripts and other files; everything in the skill directory is discovered when the skill is invoked.","Manage with /skills list|info|add|remove|reload in a session or copilot skill from the terminal; disable via disabledSkills in settings.json.","Pre-approving shell/bash in allowed-tools removes the confirmation step for terminal commands — only do this for fully trusted skills.","Individual .md files in .claude/commands/ act as a simplified alternative skill format (see the commands surface)."],"docs":"https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/add-skills"},"rules":{"status":"supported","verified":"2026-07-12","summary":"Custom instructions from the repository (.github/copilot-instructions.md, .github/instructions/**/*.instructions.md, AGENTS.md) plus personal instructions in ~/.copilot (copilot-instructions.md and instructions/*.instructions.md) applied to every session.","files":[{"path":".github/copilot-instructions.md","scope":"project","format":"markdown","note":"Repository-wide instructions."},{"path":".github/instructions/**/*.instructions.md","scope":"project","format":"markdown","note":"Path-specific instructions with applyTo frontmatter globs."},{"path":"AGENTS.md","scope":"project","format":"markdown","note":"Cross-agent instructions file."},{"path":"~/.copilot/copilot-instructions.md","scope":"global","format":"markdown","note":"Personal custom instructions applied to all sessions."},{"path":"~/.copilot/instructions/*.instructions.md","scope":"global","format":"markdown","note":"Additional personal instruction files, organizable by topic."}],"fields":[{"name":"applyTo","type":"string","required":false,"description":"Glob pattern(s), comma-separated, selecting the files the instructions apply to (path-specific .instructions.md files)."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Path-specific instructions","language":"markdown","code":"---\napplyTo: \"**/*.ts,**/*.tsx\"\n---\n# TypeScript standards\n- Use TypeScript for all new code\n- Prefer immutable data (const, readonly)\n"}],"notes":["copilot init (or /init in a session) generates or improves the repository's copilot-instructions.md, documenting build/test/lint commands, architecture, and conventions.","/instructions lets you view and toggle custom instruction files in a session.","Personal instruction files in ~/.copilot apply to all sessions regardless of project (see the CLI configuration directory reference)."],"docs":"https://docs.github.com/en/copilot/reference/custom-instructions-support"},"hooks":{"status":"supported","verified":"2026-07-12","summary":"Versioned JSON hook files run command, HTTP, or prompt handlers at lifecycle events on the local machine. Sources are combined in order: policy, repository .github/hooks, user ~/.copilot/hooks, inline hooks blocks in settings files, and plugins.","files":[{"path":".github/hooks/*.json","scope":"project","format":"json","key":"hooks"},{"path":"~/.copilot/hooks/*.json","scope":"global","format":"json","key":"hooks","note":"Or $COPILOT_HOME/hooks/ when COPILOT_HOME is set."},{"path":".github/copilot/settings.json","scope":"project","format":"json","key":"hooks","note":"Inline hooks block; .github/copilot/settings.local.json for personal, gitignored hooks."},{"path":"~/.copilot/settings.json","scope":"global","format":"json","key":"hooks","note":"Inline user-level hook definitions."},{"path":"/etc/github-copilot/policy.d/*.json","scope":"enterprise","format":"json","key":"hooks","note":"Machine-wide policy hooks installed by administrators (Linux/macOS; Windows uses ProgramData or the registry). Must be root-owned on POSIX."}],"fields":[{"name":"type","type":"\"command\" | \"http\" | \"prompt\"","required":false,"description":"Handler type. Defaults to command. prompt is only valid on sessionStart."},{"name":"bash","type":"string","required":false,"description":"Shell command for Unix (command hooks)."},{"name":"powershell","type":"string","required":false,"description":"Shell command for Windows (command hooks)."},{"name":"command","type":"string","required":false,"description":"Cross-platform fallback command, used when bash/powershell are absent."},{"name":"cwd","type":"string","required":false,"description":"Working directory (relative to the repository root or absolute)."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables to set (supports variable expansion)."},{"name":"timeoutSec","type":"number","required":false,"description":"Timeout in seconds. Default 30. timeout is accepted as an alias."},{"name":"matcher","type":"string","required":false,"description":"Optional regex (anchored ^(?:PATTERN)$) filtering by tool name, notification type, agent name, or compaction trigger, depending on the event."},{"name":"url","type":"string","required":false,"description":"Target URL for http hooks. https required except localhost with COPILOT_HOOK_ALLOW_LOCALHOST=1."},{"name":"headers","type":"record<string, string>","required":false,"description":"Request headers for http hooks; allowedEnvVars whitelists env vars expandable inside header values."},{"name":"prompt","type":"string","required":false,"description":"Text or slash command auto-submitted by a prompt hook (sessionStart only)."}],"transports":[],"auth":[],"invocation":[],"events":["sessionStart","sessionEnd","userPromptSubmitted","preToolUse","postToolUse","postToolUseFailure","permissionRequest","notification","agentStop","subagentStart","subagentStop","errorOccurred","preCompact"],"capabilities":[],"examples":[{"title":"Log tool use and block on stop","language":"json","code":"{\n  \"version\": 1,\n  \"hooks\": {\n    \"preToolUse\": [\n      {\n        \"type\": \"command\",\n        \"matcher\": \"bash|edit\",\n        \"bash\": \"./scripts/log-tool.sh\",\n        \"timeoutSec\": 10\n      }\n    ],\n    \"sessionStart\": [\n      { \"type\": \"prompt\", \"prompt\": \"/instructions\" }\n    ]\n  }\n}\n"}],"notes":["Files use { \"version\": 1, \"hooks\": { ... } }. camelCase event names deliver camelCase payloads; PascalCase names (e.g. PreToolUse) deliver VS Code/Claude-compatible snake_case payloads with Claude matcher semantics.","Cross-tool .claude/settings.json and .claude/settings.local.json hooks in the repository are also read.","preToolUse can return permissionDecision allow/deny/ask and modifiedArgs; permissionRequest can short-circuit the whole permission flow; postToolUse can modify the tool result or inject additionalContext; agentStop/subagentStop can block and force another turn.","Command preToolUse hooks are fail-closed (crash/timeout denies the tool); HTTP preToolUse hooks are fail-open.","Prompt hooks (sessionStart only) auto-submit text or a slash command in new interactive sessions.","Policy hooks in /etc/github-copilot/policy.d/*.json (or the Windows registry/ProgramData equivalents) are machine-wide, load first, and cannot be disabled by disableAllHooks.","Set disableAllHooks in settings to keep hook config on disk but stop it from running."],"docs":"https://docs.github.com/en/copilot/reference/hooks-reference"},"commands":{"status":"partial","verified":"2026-07-12","summary":"No native .prompt.md prompt files (GitHub's cheat sheet marks prompt files unsupported for Copilot CLI), but Claude-compatible command files in .claude/commands/ are read as an alternative skill format, and plugins can contribute command directories.","files":[{"path":".claude/commands/<name>.md","scope":"project","format":"markdown","note":"Claude-compatible simplified skill format."}],"fields":[{"name":"description","type":"string","required":false,"description":"What the command does."},{"name":"argument-hint","type":"string","required":false,"description":"Hint describing expected arguments."},{"name":"allowed-tools","type":"string | string[]","required":false,"description":"Tools automatically allowed while the command runs."},{"name":"disable-model-invocation","type":"boolean","required":false,"description":"Prevent the agent from automatically invoking the command."}],"transports":[],"auth":[],"invocation":["/command-name"],"events":[],"capabilities":[],"examples":[],"notes":["Commands are individual .md files in .claude/commands/; the command name is derived from the filename and no name frontmatter field is required.","Commands have lower priority than skills with the same name — skills are the primary mechanism for user-invocable workflows (invoked as /skill-name).","Plugins can contribute command directories via the commands field in plugin.json (see the CLI plugin reference).","Built-in slash commands (/init, /mcp, /skills, /review, ...) are separate and not user-defined."],"docs":"https://docs.github.com/en/copilot/reference/copilot-cli-reference/cli-command-reference"},"settings":{"status":"supported","verified":"2026-07-12","summary":"Layered settings: ~/.copilot/settings.json (user), .github/copilot/settings.json (repository, limited key set), .github/copilot/settings.local.json (personal overrides), and MDM managed settings. Edit via /settings or directly.","files":[{"path":"~/.copilot/settings.json","scope":"global","format":"jsonc","note":"Global user defaults for all repositories; manage via the /settings command."},{"path":".github/copilot/settings.json","scope":"project","format":"json","note":"Shared repository configuration (committed); limited to a small supported key set."},{"path":".github/copilot/settings.local.json","scope":"project","format":"json","note":"Personal overrides (gitignored); same schema as the repository file, takes precedence over it."},{"path":"/Library/Application Support/GitHubCopilot/managed-settings.json","scope":"enterprise","format":"json","note":"MDM managed settings (macOS file source; Linux uses /etc/github-copilot/managed-settings.json, Windows uses registry or %ProgramFiles%). Supported keys: enabledPlugins, extraKnownMarketplaces, model, permissions, strictKnownMarketplaces."}],"fields":[{"name":"model","type":"string","required":false,"description":"AI model to use; \"auto\" lets Copilot pick. Managed by the /model command."},{"name":"effortLevel","type":"\"low\" | \"medium\" | \"high\" | \"xhigh\"","required":false,"description":"Reasoning effort level for extended thinking. Default medium."},{"name":"hooks","type":"object","required":false,"description":"Inline hook definitions keyed by event name (same schema as .github/hooks/*.json files)."},{"name":"disableAllHooks","type":"boolean","required":false,"description":"Disable all repository- and user-level hooks. Default false."},{"name":"disabledMcpServers","type":"string[]","required":false,"description":"MCP server names to configure but not start."},{"name":"disabledSkills","type":"string[]","required":false,"description":"Skill names to discover but not load."},{"name":"skillDirectories","type":"string[]","required":false,"description":"Additional directories to search for skills (besides ~/.copilot/skills/)."},{"name":"enabledPlugins","type":"record<string, boolean>","required":false,"description":"Declarative plugin auto-install, keyed by plugin spec. Also read by the Copilot cloud agent at the repository level."},{"name":"allowedUrls","type":"string[]","required":false,"description":"URLs or domains allowed without prompting (supports wildcard subdomains like *.github.com)."},{"name":"deniedUrls","type":"string[]","required":false,"description":"URLs or domains always denied; deny rules take precedence over allow rules."},{"name":"askUser","type":"boolean","required":false,"description":"Allow the agent to ask clarifying questions. Set false for fully autonomous operation. Default true."},{"name":"permissions.disableBypassPermissionsMode","type":"string","required":false,"description":"When \"disable\", all allow-all flags (--allow-all-tools, --yolo, ...) are suppressed. An MDM value of \"disable\" always wins.","values":["disable"]},{"name":"subagents.agents","type":"record<string, object>","required":false,"description":"Per-subagent model configuration (model, effortLevel, contextTier), keyed by agent name."},{"name":"includeCoAuthoredBy","type":"boolean","required":false,"description":"Add a Co-authored-by trailer to git commits made by the agent. Default true."},{"name":"mergeStrategy","type":"\"rebase\" | \"merge\"","required":false,"description":"Conflict resolution strategy for /pr fix conflicts. Also supported at the repository level."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"~/.copilot/settings.json","language":"jsonc","code":"{\n  \"model\": \"auto\",\n  \"effortLevel\": \"high\",\n  \"askUser\": true,\n  \"allowedUrls\": [\"*.github.com\"],\n  \"disabledSkills\": [\"computer-use-demo\"],\n  \"hooks\": {\n    \"postToolUse\": [\n      { \"type\": \"command\", \"bash\": \"./scripts/log-tool.sh\" }\n    ]\n  }\n}\n"}],"notes":["Precedence (later overrides earlier): built-in defaults > MDM managed settings > user settings > repository settings > local settings > environment variables > command-line flags.","~/.copilot/settings.json supports JSON with comments (JSONC); user-editable settings migrated here from the legacy config.json, which now holds only internal application state.","Only companyAnnouncements, disableAllHooks, enabledPlugins, extraKnownMarketplaces, hooks, and mergeStrategy are honored at the repository level; other keys are silently ignored.","The CLI also reads .claude/settings.json and .claude/settings.local.json for the shared cross-tool subset of repository settings.","Set COPILOT_HOME to relocate the entire ~/.copilot configuration directory.","Saved tool/directory approvals live separately in ~/.copilot/permissions-config.json, keyed by repository location."],"docs":"https://docs.github.com/en/copilot/reference/copilot-cli-reference/cli-config-dir-reference"}},"behaviors":[]},{"name":"Goose","type":"cli","vendor":"Block","description":"An open source, extensible AI agent from Block that automates engineering tasks via MCP extensions, available as a CLI and desktop app.","homepage":"https://block.github.io/goose/","repo":"https://github.com/block/goose","docs":"https://goose-docs.ai/docs/quickstart","id":"goose","surfaces":{"mcp":{"status":"supported","verified":"2026-07-12","summary":"MCP servers are configured as extensions under the extensions key in config.yaml. Supports local stdio and remote Streamable HTTP servers, plus built-in, platform, and inline Python extension types.","files":[{"path":"~/.config/goose/config.yaml","scope":"global","format":"yaml","key":"extensions","note":"macOS/Linux. On Windows: %APPDATA%/Block/goose/config/config.yaml."}],"fields":[{"name":"type","type":"\"stdio\" | \"streamable_http\" | \"builtin\" | \"platform\" | \"frontend\" | \"inline_python\"","required":false,"description":"Extension type. stdio runs a local command; streamable_http connects to a remote MCP endpoint."},{"name":"name","type":"string","required":false,"description":"Internal extension name."},{"name":"display_name","type":"string","required":false,"description":"Human-readable name shown in the UI (optional)."},{"name":"enabled","type":"boolean","required":false,"description":"Whether the extension is active."},{"name":"cmd","type":"string","required":false,"description":"Command to execute for a stdio extension."},{"name":"args","type":"string[]","required":false,"description":"Arguments passed to the command."},{"name":"uri","type":"string","required":false,"description":"Endpoint URL for a streamable_http extension. Supports environment-variable substitution."},{"name":"headers","type":"record<string, string>","required":false,"description":"HTTP headers for a streamable_http extension (e.g. Authorization)."},{"name":"envs","type":"record<string, string>","required":false,"description":"Environment variable values passed to the extension."},{"name":"env_keys","type":"string[]","required":false,"description":"Names of required environment variables; missing values are prompted for and stored in the keyring."},{"name":"timeout","type":"number","required":false,"description":"Operation timeout in seconds."},{"name":"available_tools","type":"string[]","required":false,"description":"Filter to specific tool names; empty (default) loads all tools."},{"name":"bundled","type":"boolean","required":false,"description":"Whether the extension is included with goose."}],"transports":["stdio","http"],"auth":["headers"],"invocation":[],"events":[],"capabilities":[{"name":"Tools","status":"supported"},{"name":"Prompts","status":"supported","note":"MCP prompts are listed and run via the CLI /prompts and /prompt commands."},{"name":"Resources","status":"missing","note":"Not yet verified from official docs."},{"name":"Roots","status":"supported","note":"goose advertises roots support and shares the session working directory (single root)."},{"name":"Elicitation","status":"supported","note":"Form-mode elicitation requests render as forms in Desktop and prompts in the CLI; 5-minute timeout."},{"name":"Sampling","status":"supported","note":"Sampling-aware extensions automatically get access to the LLM goose is using."}],"examples":[{"title":"Local stdio extension","language":"yaml","code":"extensions:\n  github:\n    name: GitHub\n    cmd: npx\n    args: [-y @modelcontextprotocol/server-github]\n    enabled: true\n    envs: { \"GITHUB_PERSONAL_ACCESS_TOKEN\": \"<YOUR_TOKEN>\" }\n    type: stdio\n    timeout: 300\n"},{"title":"Remote Streamable HTTP extension","language":"yaml","code":"extensions:\n  remote-tools:\n    name: remote-tools\n    type: streamable_http\n    uri: https://example.com/mcp\n    headers: { \"Authorization\": \"Bearer <token>\" }\n    enabled: true\n    timeout: 300\n"}],"notes":["Servers are configured as entries under the extensions key (not mcpServers).","SSE transport is no longer supported; the sse type is kept only for config file compatibility (per the goose source).","Extensions can also be added via `goose configure`, the Desktop UI, goose://extension deeplinks, session flags (--with-extension, --with-builtin, --with-streamable-http-extension), or in-session /extension and /builtin commands.","Secrets referenced via env_keys are stored in the system keyring (or secrets.yaml with file-based storage), not in config.yaml.","goose automatically checks external extensions for known malware before activation."],"docs":"https://goose-docs.ai/docs/getting-started/using-extensions"},"skills":{"status":"supported","verified":"2026-07-12","summary":"SKILL.md skill folders following the open Agent Skills standard, discovered at session start and loaded automatically when a request matches, or listed and loaded via the CLI /skills command.","files":[{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Project-level skills, scoped to the current project."},{"path":"~/.agents/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"Global skills, available in all sessions."},{"path":"~/.agents/plugins/<plugin-name>/","scope":"global","format":"markdown","note":"Skills provided by installed plugins, discovered at session startup."}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier in the YAML frontmatter."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it; goose matches requests against it for automatic loading."}],"transports":[],"auth":[],"invocation":["automatic","/skills <name>","natural language (e.g. 'use the code-review skill')"],"events":[],"capabilities":[],"examples":[{"title":"Code review skill","language":"markdown","code":"---\nname: code-review\ndescription: Comprehensive code review checklist for pull requests\n---\n\n# Code Review Checklist\n\nWhen reviewing code, check each of these areas:\n\n## Functionality\n- [ ] Code does what the PR description claims\n- [ ] Edge cases are handled\n"}],"notes":["Requires the built-in Summon platform extension (enabled by default, v1.25.0+); Summon replaced the deprecated Skills extension (v1.16.0-v1.24.0).","Skills can bundle supporting files (scripts, templates); goose accesses them with the Developer extension's file tools.","Skills can also come from installed plugins under ~/.agents/plugins/<plugin-name>/; Open Plugin skill names are namespaced as <plugin>:<skill>.","Backward compatibility: goose also discovers skills from .goose/skills/, .claude/skills/, ~/.claude/skills/, and platform-specific config directories, but .agents/skills/ is the recommended standard.","goose skills are compatible with Claude Desktop and other agents that support the Agent Skills standard."],"docs":"https://goose-docs.ai/docs/guides/context-engineering/using-skills"},"rules":{"status":"supported","verified":"2026-07-12","summary":"Persistent context via .goosehints and AGENTS.md files, loaded globally from the config directory and locally from the project hierarchy into every request's system prompt.","files":[{"path":"~/.config/goose/.goosehints","scope":"global","format":"text","note":"Global hints applied to all sessions."},{"path":".goosehints","scope":"project","format":"text","note":"Local hints at the project root and/or any directory in the hierarchy (nested hints supported)."},{"path":"AGENTS.md","scope":"project","format":"markdown","note":"Loaded by default alongside .goosehints, including nested AGENTS.md files."},{"path":"~/.config/goose/AGENTS.md","scope":"global","format":"markdown","note":"Configured context filenames are also loaded globally from ~/.config/goose/."}],"fields":[],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Local .goosehints","language":"markdown","code":"This is a simple example JavaScript web application that uses the Express.js framework.\n\nGo through the @README.md for information on how to build and test it as needed.\n\nRun tests with `npm run test` ideally after each change.\n"}],"notes":["By default goose looks for AGENTS.md then .goosehints at each level (both global and local); local hints take priority over global hints on conflict.","Nested hint files are supported in git repositories: files load from the working directory up to the repo root at session start, and from nested subdirectories as goose accesses them.","@filename.md syntax inside a hints file automatically inlines that file's content; plain references just point goose at files to read when needed.","The CONTEXT_FILE_NAMES environment variable (JSON array, default [\"AGENTS.md\", \".goosehints\"]) swaps in other rule filenames such as CLAUDE.md or .cursorrules.","Hints require the Developer extension to be enabled.","Hint files are plain text; markdown formatting is conventional but not required."],"docs":"https://goose-docs.ai/docs/guides/context-engineering/using-goosehints"},"hooks":{"status":"supported","verified":"2026-07-12","summary":"Shell-command hooks that fire on session, prompt, tool, file, and shell lifecycle events, defined in hooks/hooks.json inside plugin directories following the Open Plugins hooks specification.","files":[{"path":"~/.agents/plugins/<plugin-name>/hooks/hooks.json","scope":"global","format":"json","key":"hooks","note":"User plugins, available across projects."},{"path":".agents/plugins/<plugin-name>/hooks/hooks.json","scope":"project","format":"json","key":"hooks","note":"Project plugins, loaded when goose starts from that project."}],"fields":[{"name":"matcher","type":"string","required":false,"description":"Regular expression deciding whether the rule runs for the event; omitted means the rule runs for every event of that type."},{"name":"hooks[].type","type":"\"command\"","required":false,"description":"Action type. Only command is currently supported; defaults to command when omitted."},{"name":"hooks[].command","type":"string","required":true,"description":"Shell command to run (via sh -c). Receives the event payload as JSON on stdin."},{"name":"hooks[].timeout","type":"number","required":false,"description":"Timeout in seconds for the command. Defaults to 30."}],"transports":[],"auth":[],"invocation":[],"events":["SessionStart","SessionEnd","Stop","UserPromptSubmit","PreToolUse","PostToolUse","PostToolUseFailure","BeforeReadFile","AfterFileEdit","BeforeShellExecution","AfterShellExecution"],"capabilities":[],"examples":[{"title":"Format files after goose edits them","language":"json","code":"{\n  \"hooks\": {\n    \"AfterFileEdit\": [\n      {\n        \"matcher\": \"\\\\.(ts|tsx|js|jsx|json|md)$\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"${PLUGIN_ROOT}/scripts/prettier.sh\"\n          }\n        ]\n      }\n    ]\n  }\n}\n"}],"notes":["Hooks belong to a plugin: a directory with plugin.json and hooks/hooks.json, placed under ~/.agents/plugins/<name>/ (user) or <project>/.agents/plugins/<name>/ (project).","Commands run via sh -c and receive the event payload (event, session_id, matcher_context, tool_name, tool_input, message, working_dir, ...) as JSON on stdin.","${PLUGIN_ROOT} in a command references the plugin directory; it is also set in the hook's environment.","The matcher is a regex tested against the event's most relevant string (tool name, prompt text, file path, or shell command).","AfterFileEdit and AfterShellExecution only run after successful tool calls; use PostToolUseFailure for failures. SubagentStart/SubagentStop are not currently emitted.","Hook failures and timeouts are logged but never crash goose. Disable a plugin via disabledPlugins in ~/.config/goose/settings.json (or <project>/.config/goose/settings.json)."],"docs":"https://goose-docs.ai/docs/guides/context-engineering/hooks"},"commands":{"status":"supported","verified":"2026-07-12","summary":"Custom slash commands are shortcuts that run recipes (reusable YAML/JSON task templates), mapped under the slash_commands key in config.yaml or assigned in the Desktop Recipes UI. Built-in CLI slash commands cover session control.","files":[{"path":"~/.config/goose/config.yaml","scope":"global","format":"yaml","key":"slash_commands","note":"List of { command, recipe_path } mappings. On Windows: %APPDATA%/Block/goose/config/config.yaml."}],"fields":[{"name":"command","type":"string","required":true,"description":"Command name without the leading slash."},{"name":"recipe_path","type":"string","required":true,"description":"Absolute path to the recipe .yaml file to run."}],"transports":[],"auth":[],"invocation":["/command-name","/command-name <parameter>"],"events":[],"capabilities":[],"examples":[{"title":"Map slash commands to recipes","language":"yaml","code":"slash_commands:\n  - command: \"run-tests\"\n    recipe_path: \"/path/to/recipe.yaml\"\n  - command: \"daily-report\"\n    recipe_path: \"/Users/me/.local/share/goose/recipes/report.yaml\"\n"},{"title":"Minimal recipe file","language":"yaml","code":"version: \"1.0.0\"\ntitle: \"Code Review Assistant\"\ndescription: \"Automated code review with best practices\"\ninstructions: \"You are a code reviewer...\"\nprompt: \"Review the code in this repository\"\nextensions: []\n"}],"notes":["Running a custom command loads the recipe's instructions and prompt into the conversation without displaying them in chat.","Custom commands accept at most one parameter; any other recipe parameters must have defaults. Names are case-insensitive, unique, and must not contain spaces.","Custom names cannot shadow built-in CLI slash commands such as /recipe, /compact, /help, /plan, /mode, /prompts, /prompt, /skills, /extension, /builtin, /clear, /exit.","Recipes are defined in .yaml (recommended, CLI + Desktop) or .json files; .yml is not supported by the CLI. See the recipe reference for the full schema (instructions, prompt, parameters, extensions, settings, retry, response, sub_recipes).","If a mapped recipe file is missing or invalid, the command text is sent to the model as regular text."],"docs":"https://goose-docs.ai/docs/guides/context-engineering/slash-commands"},"settings":{"status":"supported","verified":"2026-07-12","summary":"Primary configuration lives in ~/.config/goose/config.yaml: provider and model, tool-execution mode, extensions, slash commands, and general settings.","files":[{"path":"~/.config/goose/config.yaml","scope":"global","format":"yaml","note":"macOS/Linux. On Windows: %APPDATA%/Block/goose/config/config.yaml."}],"fields":[{"name":"GOOSE_PROVIDER","type":"string","required":true,"description":"Primary LLM provider (e.g. anthropic, openai)."},{"name":"GOOSE_MODEL","type":"string","required":true,"description":"Default model to use."},{"name":"GOOSE_MODE","type":"string","required":false,"description":"Tool execution behavior.","values":["auto","approve","chat","smart_approve"]},{"name":"GOOSE_TEMPERATURE","type":"number","required":false,"description":"Model response randomness, between 0.0 and 1.0."},{"name":"GOOSE_MAX_TURNS","type":"number","required":false,"description":"Maximum number of turns allowed without user input (default 1000)."},{"name":"GOOSE_AUTO_COMPACT_THRESHOLD","type":"number","required":false,"description":"Context-usage fraction (0.0-1.0) that triggers automatic session summarization; 0.0 disables it (default 0.8)."},{"name":"GOOSE_RECIPE_GITHUB_REPO","type":"string","required":false,"description":"GitHub repository (org/repo) to load recipes from."},{"name":"GOOSE_SEARCH_PATHS","type":"string[]","required":false,"description":"Extra directories prepended to PATH when running extension commands."},{"name":"GOOSE_ALLOWLIST","type":"string","required":false,"description":"URL for the allowed-extensions list."},{"name":"extensions","type":"object","required":false,"description":"MCP extension configuration (see the mcp surface)."},{"name":"slash_commands","type":"array","required":false,"description":"Custom slash-command to recipe mappings (see the commands surface)."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Basic config.yaml","language":"yaml","code":"GOOSE_PROVIDER: \"anthropic\"\nGOOSE_MODEL: \"claude-4.5-sonnet\"\nGOOSE_MODE: \"smart_approve\"\n\nextensions:\n  developer:\n    bundled: true\n    enabled: true\n    name: developer\n    timeout: 300\n    type: builtin\n"}],"notes":["Environment variables take precedence over config file settings, which take precedence over defaults.","Companion files in ~/.config/goose/: permission.yaml (tool permission levels via goose configure), secrets.yaml (only with file-based secret storage), permissions/tool_permissions.json (auto-managed), and prompts/ (custom prompt templates).","Store secrets in the system keyring, not in config.yaml.","Many settings can also be managed via `goose configure` (CLI) or the Desktop Settings page."],"docs":"https://goose-docs.ai/docs/guides/config-files"}},"behaviors":[]},{"name":"Grok Build","type":"cli","vendor":"xAI","homepage":"https://docs.x.ai/build","id":"grok-build","surfaces":{"mcp":{"status":"supported","verified":"2026-09-07","summary":"MCP server tables in project and user config.toml files.","files":[{"path":".grok/config.toml","scope":"project","format":"toml","key":"mcp_servers"},{"path":"~/.grok/config.toml","scope":"global","format":"toml","key":"mcp_servers","note":"Relocatable with GROK_HOME; see https://docs.x.ai/build/settings."}],"fields":[{"name":"command","type":"string","required":false,"description":"Executable for a stdio server."},{"name":"args","type":"string[]","required":false,"description":"Arguments for the executable."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment for the child process."},{"name":"url","type":"string","required":false,"description":"Remote endpoint."},{"name":"headers","type":"record<string, string>","required":false,"description":"HTTP request headers."},{"name":"startup_timeout_sec","type":"number","required":false,"description":"Startup limit in seconds; default 30."},{"name":"tool_timeout_sec","type":"number","required":false,"description":"Tool execution limit in seconds; default 6000."}],"transports":["stdio","http"],"auth":["headers","oauth"],"invocation":[],"events":[],"capabilities":[],"examples":[],"notes":["Project definitions replace same-name user servers.","Remote OAuth is automatic. ${VAR} and ${VAR:-default} expand in connection fields.","add-mcp 2.3.1 also advertises SSE; the linked official guide only explicitly documents HTTP and stdio."],"docs":"https://docs.x.ai/build/features/mcp-servers"}},"behaviors":[]},{"name":"Hermes Agent","id":"hermes-agent","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".hermes/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.hermes/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"IBM Bob","vendor":"IBM","id":"bob","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".bob/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.bob/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"iFlow CLI","type":"cli","vendor":"iFlow","id":"iflow-cli","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".iflow/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.iflow/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"inference.sh","id":"inference-sh","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".inferencesh/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.inferencesh/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Jazz","id":"jazz","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".jazz/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.jazz/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Junie","type":"ide-extension","vendor":"JetBrains","homepage":"https://www.jetbrains.com/junie/","id":"junie","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".junie/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.junie/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Kilo Code","type":"ide-extension","vendor":"Kilo","description":"Open-source AI coding agent extension for VS Code, part of the Kilo agentic engineering platform, configured via shared kilo.jsonc files.","homepage":"https://kilocode.ai","repo":"https://github.com/Kilo-Org/kilocode","docs":"https://kilocode.ai/docs","id":"kilo","surfaces":{"mcp":{"status":"supported","verified":"2026-09-07","summary":"MCP servers configured under the top-level mcp key of kilo.jsonc (project or global). Local (STDIO) and remote (Streamable HTTP with SSE fallback) servers, with OAuth 2.0 for remote servers.","files":[{"path":".kilo/kilo.jsonc","scope":"project","format":"jsonc","key":"mcp","note":"Preferred project location; kilo.json also accepted. Takes priority over root kilo.jsonc."},{"path":"kilo.jsonc","scope":"project","format":"jsonc","key":"mcp","note":"Project-root config alternative."},{"path":"~/.config/kilo/kilo.jsonc","scope":"global","format":"jsonc","key":"mcp","note":"Global config applying to all projects."},{"path":".kilo/kilo.json","scope":"project","format":"json","key":"mcp"},{"path":"kilo.json","scope":"project","format":"json","key":"mcp"},{"path":"~/.config/kilo/kilo.json","scope":"global","format":"json","key":"mcp"}],"fields":[{"name":"type","type":"\"local\" | \"remote\"","required":true,"description":"Server kind: local spawns a child process over STDIO; remote connects over HTTP/HTTPS.","values":["local","remote"]},{"name":"command","type":"string[]","required":false,"description":"Command and arguments to start a local server (e.g. [\"node\", \"/path/to/server.js\"])."},{"name":"environment","type":"record<string, string>","required":false,"description":"Environment variables for the local server process."},{"name":"url","type":"string","required":false,"description":"Endpoint URL for a remote server."},{"name":"headers","type":"record<string, string>","required":false,"description":"Custom HTTP headers for remote servers (e.g. Authorization)."},{"name":"oauth","type":"boolean","required":false,"description":"Set false to disable the automatic OAuth 2.0 flow for a remote server."},{"name":"enabled","type":"boolean","required":false,"description":"Toggle the server without removing its configuration."},{"name":"timeout","type":"number","required":false,"description":"Timeout in milliseconds. Defaults: 10s for local servers, 15s for remote servers."}],"transports":["stdio","http","sse"],"auth":["oauth","headers"],"invocation":[],"events":[],"capabilities":[{"name":"Tools","status":"supported","note":"MCP tools share the built-in permission system via namespaced {server}_{tool} keys."},{"name":"Resources","status":"supported","note":"Servers expose resources alongside tools; Kilo detects available tools and resources automatically."}],"examples":[{"title":"Local (STDIO) server","language":"jsonc","code":"{\n  \"mcp\": {\n    \"my-local-server\": {\n      \"type\": \"local\",\n      \"command\": [\"node\", \"/path/to/server.js\"],\n      \"environment\": { \"API_KEY\": \"your_api_key\" },\n      \"enabled\": true\n    }\n  }\n}\n"},{"title":"Remote server with auto-approved tools","language":"jsonc","code":"{\n  \"mcp\": {\n    \"my-remote-server\": {\n      \"type\": \"remote\",\n      \"url\": \"https://your-server-url.com/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer your-token\" }\n    }\n  },\n  \"permission\": {\n    \"my_remote_server_*\": \"allow\"\n  }\n}\n"}],"notes":["JSON and JSONC are supported. add-mcp 2.3.1 defaults new installs to kilo.json and reuses existing project/global files.","Project-level configuration takes precedence over global configuration.","For remote servers Kilo tries Streamable HTTP first, then falls back to SSE automatically.","Remote servers supporting OAuth 2.0 trigger the auth flow automatically; disable with \"oauth\": false.","Tool auto-approval uses the shared permission key with namespaced names ({server}_{tool}) and wildcard patterns.","Config files support {env:VARIABLE_NAME} syntax to reference environment variables."],"docs":"https://kilo.ai/docs/automate/mcp/using-in-kilo-code"},"skills":{"status":"supported","verified":"2026-07-12","summary":"Agent Skills (SKILL.md packages) loaded from .kilo/skills/ (project) and ~/.kilo/skills/ (global), plus cross-agent compatibility directories and extra paths/URLs configured in kilo.jsonc.","files":[{"path":".kilo/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Project skills, shareable via version control."},{"path":"~/.kilo/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"Personal skills available in all projects."},{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Cross-agent compatibility directory, loaded by default."},{"path":".claude/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Claude Code compatibility directory, loaded when Claude Code Compatibility is enabled."}],"fields":[{"name":"name","type":"string","required":true,"description":"Max 64 characters; lowercase letters, numbers, and hyphens only; must not start or end with a hyphen. Must match the parent directory name."},{"name":"description","type":"string","required":true,"description":"Max 1024 characters. Describes what the skill does and when to use it; the agent matches requests against this text."},{"name":"license","type":"string","required":false,"description":"License name or reference to a bundled license file."},{"name":"compatibility","type":"string","required":false,"description":"Environment requirements (intended product, system packages, network access, etc.)."},{"name":"metadata","type":"record<string, string>","required":false,"description":"Arbitrary key-value mapping for additional metadata."}],"transports":[],"auth":[],"invocation":["automatic (request matches skill description)","skill tool (explicit load, e.g. \"use the api-design skill\")"],"events":[],"capabilities":[],"examples":[{"title":"SKILL.md","language":"markdown","code":"---\nname: api-design\ndescription: REST API design best practices and conventions\n---\n\n# API Design Guidelines\n\nWhen designing REST APIs, follow these conventions:\n\n## URL Structure\n- Use plural nouns for resources: /users, /orders\n- Use kebab-case for multi-word resources: /order-items\n"},{"title":"Extra skill paths and remote URLs (kilo.jsonc)","language":"jsonc","code":"{\n  \"skills\": {\n    \"paths\": [\"/path/to/shared/skills\", \"~/my-skills\"],\n    \"urls\": [\"https://example.com/.well-known/skills/\"]\n  }\n}\n"}],"notes":["Progressive disclosure: only name/description metadata is scanned at session start; the full SKILL.md loads on demand via the skill tool.","Project skills override global skills with the same name.","Compatibility directories: .agents/skills/ is loaded by default; .claude/skills/ when Claude Code Compatibility is enabled.","Extra locations via skills.paths (absolute, ~/, or project-relative) and skills.urls (remote directories serving an index.json manifest) in kilo.jsonc.","Skills can bundle scripts/, references/, and assets/ directories alongside SKILL.md."],"docs":"https://kilocode.ai/docs/customize/skills"},"rules":{"status":"supported","verified":"2026-07-12","summary":"Persistent instructions via auto-discovered AGENTS.md files (project root, subdirectories, and global config dir) plus the instructions array in kilo.jsonc pointing at rule files, globs, or URLs.","files":[{"path":"AGENTS.md","scope":"project","format":"markdown","note":"Primary project instruction file at the workspace root; also loadable from any subdirectory."},{"path":".kilo/rules/*.md","scope":"project","format":"markdown","note":"Conventional rules directory, referenced from the instructions array in kilo.jsonc."},{"path":"kilo.jsonc","scope":"project","format":"jsonc","key":"instructions","note":"Array of file paths, globs, or URLs pointing to instruction files. Also valid in .kilo/kilo.jsonc."},{"path":"~/.config/kilo/AGENTS.md","scope":"global","format":"markdown","note":"Global instructions applying to all projects; ~/.claude/CLAUDE.md is read for Claude compatibility."},{"path":"~/.config/kilo/kilo.jsonc","scope":"global","format":"jsonc","key":"instructions","note":"Global instruction sources."}],"fields":[],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Instruction sources (kilo.jsonc)","language":"jsonc","code":"{\n  \"instructions\": [\n    \".kilo/rules/formatting.md\",\n    \".kilo/rules/*.md\",\n    \"https://example.com/team-instructions.md\"\n  ]\n}\n"},{"title":"Rule file (.kilo/rules/restricted_files.md)","language":"markdown","code":"# Restricted files\n\nFiles in the list contain sensitive data, they MUST NOT be read\n\n- supersecrets.txt\n- credentials.json\n- .env\n"}],"notes":["AGENTS.md is the primary instruction file; CLAUDE.md and CONTEXT.md are also recognized at the project root (discovered via findUp in parent directories too).","Per-directory AGENTS.md files are loaded dynamically when the agent reads a file in that directory.","The instructions key in kilo.jsonc accepts paths, glob patterns, and URLs; URL sources are fetched at session start with a 5-second timeout.","Global instructions from the global kilo.jsonc load after project instructions; project-level instructions take precedence on conflict.","Backward compatible with legacy .kilocode/rules/ directories and .kilocoderules files via auto-migration; migrating to kilo.jsonc/AGENTS.md is recommended.","Markdown is recommended for rule files, though plain text works."],"docs":"https://kilocode.ai/docs/advanced-usage/custom-rules"},"hooks":{"status":"unsupported","verified":"2026-07-12","summary":"Kilo Code does not expose user-configurable lifecycle hooks.","files":[],"fields":[],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[],"notes":["The official documentation has no hooks feature and no hook configuration file.","An open feature request in the official repo (Kilo-Org/kilocode#5827) asks for session lifecycle hooks, confirming they are not currently available."]},"commands":{"status":"supported","verified":"2026-07-12","summary":"Workflows (slash commands) as markdown files in .kilo/commands/ (project) or ~/.config/kilo/commands/ (global); the filename becomes the command name.","files":[{"path":".kilo/commands/<name>.md","scope":"project","format":"markdown"},{"path":"~/.config/kilo/commands/<name>.md","scope":"global","format":"markdown"}],"fields":[{"name":"description","type":"string","required":false,"description":"Shown in the command picker."},{"name":"agent","type":"string","required":false,"description":"Which agent to use when invoking this command."},{"name":"model","type":"string","required":false,"description":"Model override for this command."},{"name":"subtask","type":"boolean","required":false,"description":"When true, runs the command as a sub-agent session."}],"transports":[],"auth":[],"invocation":["/command-name"],"events":[],"capabilities":[],"examples":[{"title":"PR submission workflow (.kilo/commands/submit-pr.md)","language":"markdown","code":"---\ndescription: Submit a pull request with full checks\nagent: code\n---\n\n# Submit PR Workflow\n\n1. Use grep to check for TODO comments or console.log statements\n2. Run tests using bash with npm test\n3. If tests pass, stage and commit changes with a descriptive message\n4. Push the branch and create a pull request using gh pr create\n"}],"notes":["Legacy .kilocode/workflows/ files are automatically migrated to the new command format on startup.","Workflows can use all built-in tools (read, glob, grep, edit, write, bash, webfetch) and MCP server tools."],"docs":"https://kilocode.ai/docs/features/slash-commands/workflows"},"settings":{"status":"supported","verified":"2026-07-12","summary":"kilo.jsonc is the primary config file, shared by the VS Code extension, CLI, and JetBrains. Global config at ~/.config/kilo/kilo.jsonc; project config at kilo.jsonc or .kilo/kilo.jsonc.","files":[{"path":"~/.config/kilo/kilo.jsonc","scope":"global","format":"jsonc","note":"Global config applying to all projects."},{"path":".kilo/kilo.jsonc","scope":"project","format":"jsonc","note":"Preferred project config; takes priority over root kilo.jsonc."},{"path":"kilo.jsonc","scope":"project","format":"jsonc","note":"Project-root config alternative."},{"path":".kilo/kilo.json","scope":"project","format":"json"},{"path":"kilo.json","scope":"project","format":"json"},{"path":"~/.config/kilo/kilo.json","scope":"global","format":"json"}],"fields":[{"name":"permission","type":"record<string, \"allow\" | ...>","required":false,"description":"Auto-approval rules for tools, including MCP tools via namespaced {server}_{tool} keys and wildcards."},{"name":"instructions","type":"string[]","required":false,"description":"Paths, globs, or URLs of additional instruction files (see rules surface)."},{"name":"mcp","type":"record<string, McpServer>","required":false,"description":"MCP server definitions (see mcp surface)."},{"name":"skills","type":"{ paths?: string[], urls?: string[] }","required":false,"description":"Extra skill directories and remote skill URLs (see skills surface)."},{"name":"hide_prompt_training_models","type":"boolean","required":false,"description":"Hide Kilo Gateway models whose providers may use prompts for training (default false)."},{"name":"auto_collapse_reasoning","type":"boolean","required":false,"description":"Collapse reasoning blocks in the chat UI after the agent finishes writing them."},{"name":"terminal_command_display","type":"string","required":false,"description":"Whether terminal command blocks start expanded or collapsed.","values":["expanded","collapsed"]},{"name":"experimental","type":"object","required":false,"description":"Advanced options not exposed in the UI (e.g. codebase_search, batch_tool, openTelemetry, mcp_timeout, speech_to_text_model)."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"kilo.jsonc","language":"jsonc","code":"{\n  \"permission\": {\n    \"my_server_*\": \"allow\"\n  },\n  \"instructions\": [\".kilo/rules/*.md\"],\n  \"auto_collapse_reasoning\": true,\n  \"experimental\": {\n    \"codebase_search\": true,\n    \"mcp_timeout\": 30000\n  }\n}\n"}],"notes":["The Settings webview UI (gear icon) reads and writes the same JSONC files; the .kilo/kilo.jsonc version takes priority over root kilo.jsonc if both exist.","Settings can be exported/imported as kilo-settings.json from the About tab; files are plain text and portable between machines.","The agent has a built-in skill that understands the full kilo.jsonc schema and can edit config on request.","An auto-generated $schema in kilo.jsonc documents the full list of available options.","Avoid committing API keys (e.g. provider.*.options.apiKey); use environment variables for credentials."],"docs":"https://kilocode.ai/docs/getting-started/settings"}},"behaviors":[]},{"name":"Kimi Code CLI","type":"cli","vendor":"Moonshot AI","id":"kimi-code-cli","surfaces":{"mcp":{"status":"supported","verified":"2026-09-07","summary":"Project and user MCP definitions with per-server transport and timeouts.","files":[{"path":".kimi-code/mcp.json","scope":"project","format":"json","key":"mcpServers"},{"path":"~/.kimi-code/mcp.json","scope":"global","format":"json","key":"mcpServers","note":"KIMI_CODE_HOME overrides the directory."}],"fields":[{"name":"command","type":"string","required":false,"description":"Executable for a stdio server."},{"name":"args","type":"string[]","required":false,"description":"Arguments for the executable."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment for the child process."},{"name":"url","type":"string","required":false,"description":"Remote endpoint."},{"name":"headers","type":"record<string, string>","required":false,"description":"HTTP request headers."},{"name":"transport","type":"\"stdio\" | \"http\" | \"sse\"","required":false,"description":"Inferred from command or url; legacy SSE must be explicit."},{"name":"cwd","type":"string","required":false,"description":"Child working directory."},{"name":"bearerTokenEnvVar","type":"string","required":false,"description":"Environment variable holding a bearer token."},{"name":"enabled","type":"boolean","required":false,"description":"False disables this server."},{"name":"startupTimeoutMs","type":"number","required":false,"description":"Connection timeout, 1–2147483647 ms; default 30000."},{"name":"toolTimeoutMs","type":"number","required":false,"description":"Tool timeout, 1–2147483647 ms."},{"name":"enabledTools","type":"string[]","required":false,"description":"Tool allowlist."},{"name":"disabledTools","type":"string[]","required":false,"description":"Tool blocklist."}],"transports":["stdio","http","sse"],"auth":["headers","env-secrets","oauth"],"invocation":[],"events":[],"capabilities":[],"examples":[],"notes":["Project servers override same-name user entries and require workspace trust.","Use /mcp-config login <server> for OAuth."],"docs":"https://www.kimi.com/code/docs/en/kimi-code-cli/customization/mcp.html"},"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.agents/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Kiro CLI","type":"cli","vendor":"AWS","homepage":"https://kiro.dev/","id":"kiro-cli","surfaces":{"mcp":{"status":"partial","verified":"2026-09-07","summary":"MCP configuration shared with Kiro IDE; command selects local servers and url selects remote servers.","files":[{"path":".kiro/settings/mcp.json","scope":"project","format":"json","key":"mcpServers"},{"path":"~/.kiro/settings/mcp.json","scope":"global","format":"json","key":"mcpServers"}],"fields":[{"name":"command","type":"string","required":false,"description":"Executable for a stdio server."},{"name":"args","type":"string[]","required":false,"description":"Arguments for the executable."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment for the child process."},{"name":"url","type":"string","required":false,"description":"Remote endpoint."},{"name":"headers","type":"record<string, string>","required":false,"description":"HTTP request headers."},{"name":"disabled","type":"boolean","required":false,"description":"Disable this server."},{"name":"autoApprove","type":"string[]","required":false,"description":"Tools allowed without confirmation."},{"name":"disabledTools","type":"string[]","required":false,"description":"Tools to disable."},{"name":"oauth","type":"object","required":false,"description":"Remote OAuth settings."}],"transports":["stdio","http"],"auth":["headers","oauth"],"invocation":[],"events":[],"capabilities":[],"examples":[],"notes":["Agent configuration overrides workspace entries, which override global entries.","add-mcp writes remote timeout in milliseconds. The linked official configuration reference does not specify that field; timeout coverage remains unverified."],"docs":"https://kiro.dev/docs/mcp/configuration/"},"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".kiro/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.kiro/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[{"name":"allowed-tools","status":"unsupported"},{"name":"context: fork","status":"unsupported"},{"name":"Hooks","status":"supported"}],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills).","Custom agents must add \"resources\": [\"skill://.kiro/skills/**/SKILL.md\"] to .kiro/agents/<agent>.json."]}},"behaviors":[]},{"name":"Kode","id":"kode","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".kode/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.kode/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Lingma","type":"ide-extension","vendor":"Alibaba","id":"lingma","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".lingma/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.lingma/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Loaf","id":"loaf","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.agents/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"MCPJam","id":"mcpjam","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".mcpjam/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.mcpjam/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"MCPorter","type":"cli","id":"mcporter","surfaces":{"mcp":{"status":"supported","verified":"2026-06-21","summary":"Configure MCP servers in JSON under the mcpServers key.","files":[{"path":"~/.mcporter/mcporter.json","scope":"global","format":"json","key":"mcpServers","note":"Also reads mcporter.jsonc."},{"path":"config/mcporter.json","scope":"project","format":"json","key":"mcpServers"}],"fields":[{"name":"command","type":"string","required":false,"description":"Command to start a local (stdio) server."},{"name":"args","type":"string[]","required":false,"description":"Arguments passed to the command."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables for the server."},{"name":"type","type":"\"http\" | \"sse\"","required":false,"description":"Remote transport type."},{"name":"url","type":"string","required":false,"description":"Endpoint URL for a remote server."},{"name":"headers","type":"record<string, string>","required":false,"description":"HTTP headers for a remote server."}],"transports":["stdio","http","sse"],"auth":["headers"],"invocation":[],"events":[],"capabilities":[],"examples":[],"notes":[]}},"behaviors":[]},{"name":"Mistral Vibe","type":"cli","vendor":"Mistral","homepage":"https://mistral.ai/","id":"mistral-vibe","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".vibe/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.vibe/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Moxby","id":"moxby","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".moxby/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.moxby/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Mux","id":"mux","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".mux/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.mux/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Neovate","id":"neovate","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".neovate/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.neovate/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[{"name":"allowed-tools","status":"supported"},{"name":"context: fork","status":"unsupported"},{"name":"Hooks","status":"unsupported"}],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Ona","type":"cli","vendor":"Ona","id":"ona","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".ona/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.ona/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"OpenClaw","id":"openclaw","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":"skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.openclaw/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[{"name":"allowed-tools","status":"supported"},{"name":"context: fork","status":"unsupported"},{"name":"Hooks","status":"unsupported"}],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills).","Global path falls back to ~/.clawdbot/skills then ~/.moltbot/skills."]}},"behaviors":[]},{"name":"OpenCode","type":"cli","vendor":"SST","description":"Open-source terminal coding agent with a TUI, client/server architecture, and support for many model providers.","homepage":"https://opencode.ai","repo":"https://github.com/sst/opencode","docs":"https://opencode.ai/docs","id":"opencode","surfaces":{"mcp":{"status":"supported","verified":"2026-09-07","summary":"Configure MCP servers under the mcp key in opencode.json or opencode.jsonc. Local servers run as commands; remote servers connect over HTTP with header or OAuth auth.","files":[{"path":"opencode.json","scope":"project","format":"json","key":"mcp","note":"JSONC (opencode.jsonc) is also supported."},{"path":"~/.config/opencode/opencode.json","scope":"global","format":"json","key":"mcp"},{"path":"opencode.jsonc","scope":"project","format":"jsonc","key":"mcp"},{"path":"~/.config/opencode/opencode.jsonc","scope":"global","format":"jsonc","key":"mcp"}],"fields":[{"name":"type","type":"\"local\" | \"remote\"","required":true,"description":"Server connection type.","values":["local","remote"]},{"name":"command","type":"string[]","required":false,"description":"Required for local servers: command and arguments to run the MCP server."},{"name":"environment","type":"record<string, string>","required":false,"description":"Environment variables to set when running a local server."},{"name":"cwd","type":"string","required":false,"description":"Working directory for a local server process. Relative paths resolve from the workspace."},{"name":"url","type":"string","required":false,"description":"Required for remote servers: URL of the remote MCP server."},{"name":"headers","type":"record<string, string>","required":false,"description":"Headers to send with requests to a remote server (e.g. Authorization)."},{"name":"oauth","type":"{ clientId?: string, clientSecret?: string, scope?: string } | false","required":false,"description":"OAuth config for pre-registered client credentials, or false to disable automatic OAuth detection."},{"name":"enabled","type":"boolean","required":false,"description":"Enable or disable the MCP server on startup."},{"name":"timeout","type":"number","required":false,"description":"Timeout in ms for fetching tools from the MCP server. Defaults to 5000."}],"transports":["stdio","http"],"auth":["oauth","headers"],"invocation":[],"events":[],"capabilities":[{"name":"Tools","status":"supported","note":"MCP tools are automatically available to the LLM alongside built-in tools."}],"examples":[{"title":"Local server","language":"json","code":"{\n  \"$schema\": \"https://opencode.ai/config.json\",\n  \"mcp\": {\n    \"my-local-mcp-server\": {\n      \"type\": \"local\",\n      \"command\": [\"npx\", \"-y\", \"my-mcp-command\"],\n      \"enabled\": true,\n      \"environment\": { \"MY_ENV_VAR\": \"my_env_var_value\" }\n    }\n  }\n}\n"},{"title":"Remote server with headers","language":"json","code":"{\n  \"$schema\": \"https://opencode.ai/config.json\",\n  \"mcp\": {\n    \"my-remote-mcp\": {\n      \"type\": \"remote\",\n      \"url\": \"https://my-mcp-server.com\",\n      \"enabled\": true,\n      \"headers\": { \"Authorization\": \"Bearer MY_API_KEY\" }\n    }\n  }\n}\n"}],"notes":["add-mcp 2.3.1 defaults new installs to opencode.jsonc and reuses existing JSON/JSONC files. This installer selection is distinct from native config merge precedence; see https://opencode.ai/docs/config/.","Local servers use type 'local' with command as an array; remote servers use type 'remote' with url.","OAuth is automatic for remote servers: OpenCode detects 401 responses, uses Dynamic Client Registration (RFC 7591), and stores tokens in ~/.local/share/opencode/mcp-auth.json. Manage with `opencode mcp auth|list|logout|debug`.","MCP tools register with the server name as prefix and can be enabled/disabled globally or per agent via the tools option with glob patterns (e.g. \"my-mcp*\": false).","Organizations can ship default MCP servers via a .well-known/opencode remote config; local configs override them per server."],"docs":"https://opencode.ai/docs/mcp-servers/"},"skills":{"status":"supported","verified":"2026-07-12","summary":"SKILL.md instruction sets discovered from project and home directories, listed in the native skill tool and loaded on demand by the agent.","files":[{"path":".opencode/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"OpenCode walks up from the working directory to the git worktree root."},{"path":"~/.config/opencode/skills/<name>/SKILL.md","scope":"global","format":"markdown"},{"path":".claude/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Claude Code-compatible location. Disable with OPENCODE_DISABLE_CLAUDE_CODE_SKILLS=1."},{"path":"~/.claude/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"Claude Code-compatible location."},{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Agent-compatible location."},{"path":"~/.agents/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"Agent-compatible location."}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier: 1-64 chars, lowercase alphanumeric with single hyphen separators, must match the directory name."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it (1-1024 chars)."},{"name":"license","type":"string","required":false,"description":"Optional license identifier."},{"name":"compatibility","type":"string","required":false,"description":"Optional compatibility hint."},{"name":"metadata","type":"record<string, string>","required":false,"description":"Optional string-to-string metadata map."}],"transports":[],"auth":[],"invocation":["automatic (skill tool)"],"events":[],"capabilities":[],"examples":[{"title":"Skill with frontmatter","language":"markdown","code":"---\nname: git-release\ndescription: Create consistent releases and changelogs\nlicense: MIT\ncompatibility: opencode\nmetadata:\n  audience: maintainers\n---\n\n## What I do\n\n- Draft release notes from merged PRs\n- Propose a version bump\n\n## When to use me\n\nUse this when you are preparing a tagged release.\n"},{"title":"Skill permissions in opencode.json","language":"json","code":"{\n  \"permission\": {\n    \"skill\": {\n      \"*\": \"allow\",\n      \"internal-*\": \"deny\",\n      \"experimental-*\": \"ask\"\n    }\n  }\n}\n"}],"notes":["Skills are loaded on demand via the native skill tool: available skills are listed in the tool description and the agent calls skill({ name }) to load the full content.","Claude-compatible (.claude/skills/) and agent-compatible (.agents/skills/) locations are also searched, in projects and in the home directory.","Only name, description, license, compatibility, and metadata frontmatter fields are recognized; unknown fields are ignored.","Access is controlled with pattern-based permissions under permission.skill in opencode.json (allow/deny/ask), overridable per agent; set tools.skill = false to disable skills for an agent entirely."],"docs":"https://opencode.ai/docs/skills/"},"rules":{"status":"supported","verified":"2026-07-12","summary":"AGENTS.md files hold persistent project and global instructions, with CLAUDE.md fallbacks and an instructions option for extra rule files.","files":[{"path":"AGENTS.md","scope":"project","format":"markdown","note":"Project rules, found by traversing up from the current directory. Commit to Git."},{"path":"~/.config/opencode/AGENTS.md","scope":"global","format":"markdown","note":"Personal rules applied across all sessions."},{"path":"CLAUDE.md","scope":"project","format":"markdown","note":"Claude Code-compatible fallback, used only if no AGENTS.md exists."},{"path":"~/.claude/CLAUDE.md","scope":"global","format":"markdown","note":"Claude Code-compatible fallback, used only if no ~/.config/opencode/AGENTS.md exists."},{"path":"opencode.json","scope":"project","format":"json","key":"instructions","note":"Array of paths, globs, or URLs to additional instruction files."}],"fields":[{"name":"instructions","type":"string[]","required":false,"description":"Paths, glob patterns, or remote URLs of instruction files to include (e.g. CONTRIBUTING.md, .cursor/rules/*.md)."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Reuse existing rule files","language":"json","code":"{\n  \"$schema\": \"https://opencode.ai/config.json\",\n  \"instructions\": [\"CONTRIBUTING.md\", \"docs/guidelines.md\", \".cursor/rules/*.md\"]\n}\n"}],"notes":["Run /init to scan the repo and generate or improve the project AGENTS.md.","Precedence: local files found by traversing up from the current directory (AGENTS.md wins over CLAUDE.md), then ~/.config/opencode/AGENTS.md, then ~/.claude/CLAUDE.md.","Claude Code compatibility can be disabled with OPENCODE_DISABLE_CLAUDE_CODE=1 (all) or OPENCODE_DISABLE_CLAUDE_CODE_PROMPT=1 (only ~/.claude/CLAUDE.md).","The instructions option accepts paths, glob patterns, and remote URLs (fetched with a 5s timeout); all instruction files are combined with AGENTS.md."],"docs":"https://opencode.ai/docs/rules/"},"hooks":{"status":"supported","verified":"2026-07-12","summary":"Lifecycle hooks are implemented through the plugin system: JS/TS modules that hook into agent events to observe, block, or rewrite behavior.","files":[{"path":".opencode/plugins/","scope":"project","format":"typescript","note":"Directory of JS/TS plugin modules, auto-loaded at startup."},{"path":"~/.config/opencode/plugins/","scope":"global","format":"typescript","note":"Directory of JS/TS plugin modules, auto-loaded at startup."},{"path":"opencode.json","scope":"project","format":"json","key":"plugin","note":"Array of npm package names to load as plugins (regular and scoped packages)."}],"fields":[{"name":"plugin","type":"string[]","required":false,"description":"npm packages to load as plugins, e.g. [\"opencode-helicone-session\", \"@my-org/custom-plugin\"]."}],"transports":[],"auth":[],"invocation":[],"events":["tool.execute.before","tool.execute.after","shell.env","experimental.session.compacting","event"],"capabilities":[],"examples":[{"title":"Block reads of .env files","language":"javascript","code":"export const EnvProtection = async ({ project, client, $, directory, worktree }) => {\n  return {\n    \"tool.execute.before\": async (input, output) => {\n      if (input.tool === \"read\" && output.args.filePath.includes(\".env\")) {\n        throw new Error(\"Do not read .env files\")\n      }\n    },\n  }\n}\n"},{"title":"Notify when a session goes idle","language":"javascript","code":"export const NotificationPlugin = async ({ $ }) => {\n  return {\n    event: async ({ event }) => {\n      if (event.type === \"session.idle\") {\n        await $`osascript -e 'display notification \"Session completed!\" with title \"opencode\"'`\n      }\n    },\n  }\n}\n"}],"notes":["There is no declarative shell-hook config; hooks are functions returned by plugin modules written in JavaScript or TypeScript (typed via @opencode-ai/plugin).","The generic event hook receives bus events such as session.idle, session.created, file.edited, permission.asked, tool.execute.before/after, message.updated, and tui.* events.","tool.execute.before can throw to block a tool call or mutate args to rewrite input; shell.env injects environment variables into all shell execution.","Plugins can also register custom tools via the tool helper, and experimental.session.compacting customizes or replaces the compaction prompt.","Plugin load order: global config, project config, ~/.config/opencode/plugins/, .opencode/plugins/. npm plugins are installed with Bun and cached in ~/.cache/opencode/node_modules/."],"docs":"https://opencode.ai/docs/plugins/"},"commands":{"status":"supported","verified":"2026-07-12","summary":"Custom slash commands defined as markdown files with frontmatter or inline in opencode.json, with argument placeholders, shell output injection, and file references.","files":[{"path":".opencode/commands/<name>.md","scope":"project","format":"markdown"},{"path":"~/.config/opencode/commands/<name>.md","scope":"global","format":"markdown"},{"path":"opencode.json","scope":"project","format":"json","key":"command","note":"Inline command definitions; template is required in this form."}],"fields":[{"name":"template","type":"string","required":true,"description":"The prompt sent to the LLM when the command runs (the markdown body in file-based commands)."},{"name":"description","type":"string","required":false,"description":"Brief description shown in the TUI when typing the command."},{"name":"agent","type":"string","required":false,"description":"Agent that executes the command. Subagents trigger a subagent invocation by default."},{"name":"subtask","type":"boolean","required":false,"description":"Force the command to run as a subagent invocation to keep it out of the primary context."},{"name":"model","type":"string","required":false,"description":"Model override for this command."}],"transports":[],"auth":[],"invocation":["/command-name"],"events":[],"capabilities":[],"examples":[{"title":"Command file (.opencode/commands/test.md)","language":"markdown","code":"---\ndescription: Run tests with coverage\nagent: build\n---\n\nRun the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes.\n"},{"title":"Command with arguments","language":"markdown","code":"---\ndescription: Create a new component\n---\n\nCreate a new React component named $ARGUMENTS with TypeScript support.\nInclude proper typing and basic structure.\n"}],"notes":["The markdown file name becomes the command name; the frontmatter defines properties and the body becomes the prompt template.","Templates support $ARGUMENTS, positional $1/$2/$3 arguments, !`command` to inject shell output, and @path to include file contents.","Custom commands can override built-in commands like /init, /undo, /redo, /share, and /help."],"docs":"https://opencode.ai/docs/commands/"},"settings":{"status":"supported","verified":"2026-07-12","summary":"opencode.json (or .jsonc) configures models, agents, permissions, tools, MCP, commands, and plugins, merged across remote, global, project, and managed scopes.","files":[{"path":"opencode.json","scope":"project","format":"json","note":"Found in the current directory or by traversing up to the nearest Git directory. JSONC (opencode.jsonc) also supported. Schema: https://opencode.ai/config.json."},{"path":"~/.config/opencode/opencode.json","scope":"global","format":"json","note":"User-wide preferences like providers, models, and permissions."},{"path":"/Library/Application Support/opencode/opencode.json","scope":"enterprise","format":"json","note":"Managed config, requires admin to write. Linux: /etc/opencode/; Windows: %ProgramData%\\opencode. Not user-overridable."},{"path":"tui.json","scope":"project","format":"json","note":"TUI-specific settings; also available globally at ~/.config/opencode/tui.json."},{"path":"opencode.jsonc","scope":"project","format":"jsonc"},{"path":"~/.config/opencode/opencode.jsonc","scope":"global","format":"jsonc"}],"fields":[{"name":"model","type":"string","required":false,"description":"Default model in provider/model format, e.g. anthropic/claude-sonnet-4-5."},{"name":"small_model","type":"string","required":false,"description":"Separate model for lightweight tasks like title generation."},{"name":"provider","type":"object","required":false,"description":"Provider configuration: API keys, base URLs, custom models, timeouts."},{"name":"agent","type":"object","required":false,"description":"Specialized agent definitions with per-agent prompt, model, tools, and permissions."},{"name":"default_agent","type":"string","required":false,"description":"Primary agent used when none is specified (e.g. build or plan)."},{"name":"permission","type":"object","required":false,"description":"Approval rules per tool or pattern, e.g. { \"edit\": \"ask\", \"bash\": \"ask\" }.","values":["allow","ask","deny"]},{"name":"tools","type":"record<string, boolean>","required":false,"description":"Enable or disable tools (including MCP tools) globally, with glob pattern support."},{"name":"mcp","type":"object","required":false,"description":"MCP server definitions (see MCP surface)."},{"name":"instructions","type":"string[]","required":false,"description":"Additional instruction files (see Rules surface)."},{"name":"command","type":"object","required":false,"description":"Inline custom command definitions (see Commands surface)."},{"name":"plugin","type":"string[]","required":false,"description":"npm packages to load as plugins (see Hooks surface)."},{"name":"share","type":"\"manual\" | \"auto\" | \"disabled\"","required":false,"description":"Conversation sharing behavior. Default manual.","values":["manual","auto","disabled"]},{"name":"autoupdate","type":"boolean | \"notify\"","required":false,"description":"Automatically download updates on startup, or notify only."},{"name":"snapshot","type":"boolean","required":false,"description":"Track file changes for undo/revert. Disable for large repos."},{"name":"formatter","type":"boolean | object","required":false,"description":"Enable code formatters, or configure overrides and custom formatters."},{"name":"lsp","type":"boolean | object","required":false,"description":"Enable LSP servers, or configure overrides and custom servers."},{"name":"compaction","type":"{ auto?: boolean, prune?: boolean, reserved?: number }","required":false,"description":"Context compaction behavior."},{"name":"server","type":"{ port?: number, hostname?: string, mdns?: boolean, cors?: string[] }","required":false,"description":"Server settings for opencode serve and opencode web."},{"name":"disabled_providers","type":"string[]","required":false,"description":"Providers to never load, even if credentials are available. Takes priority over enabled_providers."},{"name":"enabled_providers","type":"string[]","required":false,"description":"Allowlist of providers; all others are ignored."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Basic config","language":"jsonc","code":"{\n  \"$schema\": \"https://opencode.ai/config.json\",\n  \"model\": \"anthropic/claude-sonnet-4-5\",\n  \"autoupdate\": true,\n  \"permission\": {\n    \"edit\": \"ask\",\n    \"bash\": \"ask\"\n  }\n}\n"}],"notes":["Precedence (later overrides earlier): remote .well-known/opencode config, global config, OPENCODE_CONFIG path, project config, .opencode directories, OPENCODE_CONFIG_CONTENT, managed config files, macOS managed preferences (MDM).","Configs are merged, not replaced: non-conflicting keys from all sources are preserved.","Values support {env:VARIABLE_NAME} and {file:path} substitution.","TUI-specific settings (theme, keybinds, scroll, notifications) live in a separate tui.json with schema https://opencode.ai/tui.json.","On macOS, managed preferences deploy via .mobileconfig in the ai.opencode.managed preference domain; Linux uses /etc/opencode/, Windows %ProgramData%\\opencode."],"docs":"https://opencode.ai/docs/config/"}},"behaviors":[]},{"name":"OpenHands","type":"cli","vendor":"All Hands AI","homepage":"https://github.com/All-Hands-AI/OpenHands","id":"openhands","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".openhands/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.openhands/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[{"name":"allowed-tools","status":"supported"},{"name":"context: fork","status":"unsupported"},{"name":"Hooks","status":"unsupported"}],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Pi","id":"pi","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".pi/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.pi/agent/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[{"name":"allowed-tools","status":"supported"},{"name":"context: fork","status":"unsupported"},{"name":"Hooks","status":"unsupported"}],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Pochi","id":"pochi","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".pochi/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.pochi/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"PromptScript","id":"promptscript","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills).","Global install not supported."]}},"behaviors":[]},{"name":"Qoder","type":"editor","vendor":"Qoder","homepage":"https://qoder.com/","id":"qoder","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".qoder/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.qoder/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[{"name":"allowed-tools","status":"supported"},{"name":"context: fork","status":"unsupported"},{"name":"Hooks","status":"unsupported"}],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Qoder CN","type":"editor","vendor":"Qoder","id":"qoder-cn","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".qoder/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.qoder-cn/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Qwen Code","type":"cli","vendor":"Alibaba","description":"An open-source AI coding agent for the terminal, forked from Gemini CLI and optimized for Qwen-Coder models.","homepage":"https://github.com/QwenLM/qwen-code","repo":"https://github.com/QwenLM/qwen-code","docs":"https://qwenlm.github.io/qwen-code-docs/en/users/overview","id":"qwen-code","surfaces":{"mcp":{"status":"supported","verified":"2026-07-12","summary":"MCP servers configured under the mcpServers key in settings.json. Supports stdio, SSE, and Streamable HTTP transports, OAuth 2.0, per-server tool filtering, discovery timeouts, and the qwen mcp CLI for managing entries.","files":[{"path":".qwen/settings.json","scope":"project","format":"json","key":"mcpServers"},{"path":"~/.qwen/settings.json","scope":"global","format":"json","key":"mcpServers","note":"User scope is the default for qwen mcp add."}],"fields":[{"name":"command","type":"string","required":false,"description":"Path to the executable for stdio transport. One of command, url, or httpUrl is required."},{"name":"args","type":"string[]","required":false,"description":"Command-line arguments for stdio transport."},{"name":"url","type":"string","required":false,"description":"SSE endpoint URL (legacy transport; prefer httpUrl when the server supports both)."},{"name":"httpUrl","type":"string","required":false,"description":"Streamable HTTP endpoint URL."},{"name":"headers","type":"record<string, string>","required":false,"description":"Custom HTTP headers when using url or httpUrl."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables for the server process. Supports $VAR_NAME / ${VAR_NAME} expansion."},{"name":"cwd","type":"string","required":false,"description":"Working directory for stdio transport."},{"name":"timeout","type":"number","required":false,"description":"Tool-call timeout in milliseconds (default 600,000 = 10 minutes)."},{"name":"discoveryTimeoutMs","type":"number","required":false,"description":"Cap on the initial discovery handshake. Defaults: 30s for stdio servers, 5s for remote HTTP/SSE servers."},{"name":"trust","type":"boolean","required":false,"description":"When true, bypasses all tool call confirmations for this server. Default false."},{"name":"includeTools","type":"string[]","required":false,"description":"Allowlist of tool names to expose from this server."},{"name":"excludeTools","type":"string[]","required":false,"description":"Denylist of tool names; takes precedence over includeTools."},{"name":"oauth","type":"{ enabled?, clientId?, clientSecret?, authorizationUrl?, tokenUrl?, scopes?, redirectUri?, tokenParamName?, audiences? }","required":false,"description":"OAuth configuration; endpoints are auto-discovered if omitted. redirectUri defaults to http://localhost:7777/oauth/callback."}],"transports":["stdio","sse","http"],"auth":["oauth","headers"],"invocation":[],"events":[],"capabilities":[{"name":"Tools","status":"supported"},{"name":"Prompts","status":"supported","note":"Prompts advertised via prompts/list become slash commands; discovery is lenient about the declared capability."},{"name":"Resources","status":"supported","note":"Browse via /mcp and inject with @server:uri; disabled in untrusted folders."},{"name":"Roots","status":"missing","note":"Not documented in the official MCP docs."},{"name":"Elicitation","status":"missing","note":"Not documented in the official MCP docs."},{"name":"Sampling","status":"missing","note":"Not documented in the official MCP docs."}],"examples":[{"title":"Local stdio server","language":"json","code":"{\n  \"mcpServers\": {\n    \"pythonTools\": {\n      \"command\": \"python\",\n      \"args\": [\"-m\", \"my_mcp_server\", \"--port\", \"8080\"],\n      \"cwd\": \"./mcp-servers/python\",\n      \"env\": { \"API_KEY\": \"${EXTERNAL_API_KEY}\" },\n      \"timeout\": 15000\n    }\n  }\n}\n"},{"title":"Remote HTTP server with auth header","language":"json","code":"{\n  \"mcpServers\": {\n    \"httpServerWithAuth\": {\n      \"httpUrl\": \"http://localhost:3000/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer your-api-token\" },\n      \"timeout\": 5000\n    }\n  }\n}\n"}],"notes":["Prefer httpUrl (Streamable HTTP) over url (SSE) for remote servers; stdio uses command/args.","Servers are discovered progressively in the background; per-server discoveryTimeoutMs defaults to 30s (stdio) or 5s (remote).","The mcp settings object (mcp.allowed / mcp.excluded) globally allow- or deny-lists servers, with glob pattern support.","Manage servers via qwen mcp add/remove or the interactive /mcp dialog.","OAuth tokens are stored in ~/.qwen/mcp-oauth-tokens.json (plaintext, mode 0600); set QWEN_CODE_FORCE_ENCRYPTED_FILE_STORAGE=true for keychain or encrypted storage.","MCP resources are referenced in messages with @server:uri syntax."],"docs":"https://github.com/QwenLM/qwen-code/blob/main/docs/users/features/mcp.md"},"skills":{"status":"supported","verified":"2026-07-12","summary":"SKILL.md Agent Skills discovered from personal (~/.qwen/skills/), project (.qwen/skills/), and extension directories. Model-invoked by default, user-invocable as /<skill-name>, with optional path gating and priority ordering.","files":[{"path":".qwen/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Project skills, shared with the team via git."},{"path":"~/.qwen/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"Personal skills, available across all projects."}],"fields":[{"name":"name","type":"string","required":true,"description":"Non-empty identifier of Unicode letters/digits plus _ : . - (whitespace and slashes are rejected)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it; drives model-side discovery."},{"name":"priority","type":"number","required":false,"description":"Optional; higher values sort earlier in the /skills listing only. Unset behaves like 0."},{"name":"paths","type":"string[]","required":false,"description":"Glob patterns that gate model discovery until a tool call touches a matching file."},{"name":"user-invocable","type":"boolean","required":false,"description":"Set false to hide the skill from /<skill-name> and the /skills picker (model-only). Default true."},{"name":"disable-model-invocation","type":"boolean","required":false,"description":"Set true to hide the skill from the model while keeping user invocation. Default false."}],"transports":[],"auth":[],"invocation":["/skill-name","automatic","/skills (panel)"],"events":[],"capabilities":[],"examples":[{"title":"Path-gated skill","language":"markdown","code":"---\nname: tsx-helper\ndescription: React TSX component helper\npaths:\n  - 'src/**/*.tsx'\n  - 'packages/*/src/**/*.tsx'\n---\n\n# TSX Helper\n\n## Instructions\nProvide clear, step-by-step guidance for Qwen Code.\n"}],"notes":["Skills are model-invoked based on the description; /<skill-name> invokes one explicitly and /skills opens the interactive panel.","paths: globs (picomatch, relative to project root) keep a skill out of the model's listing until a tool call touches a matching file; once activated it stays active for the session.","Extensions can bundle skills in their skills/ directory, declared in qwen-extension.json.","Changes to SKILL.md take effect on the next session start."],"docs":"https://github.com/QwenLM/qwen-code/blob/main/docs/users/features/skills.md"},"rules":{"status":"supported","verified":"2026-07-12","summary":"QWEN.md instruction files (global, project, and personal-local tiers) loaded at session start, plus automatic auto-memory the agent writes itself and an opt-in git-shared team memory tier.","files":[{"path":"QWEN.md","scope":"project","format":"markdown","note":"Project root; applies to the whole team when committed."},{"path":".qwen/QWEN.local.md","scope":"project","format":"markdown","note":"Personal, project-specific instructions; keep out of git."},{"path":"~/.qwen/QWEN.md","scope":"global","format":"markdown","note":"Personal instructions across all projects."},{"path":".qwen/team-memory/","scope":"project","format":"markdown","note":"Opt-in git-shared auto-memory tier (memory.enableTeamMemory); one file per memory plus a MEMORY.md index."}],"fields":[{"name":"memory.enableManagedAutoMemory","type":"boolean","required":false,"description":"settings.json toggle for automatic memory saving (default true)."},{"name":"memory.enableManagedAutoDream","type":"boolean","required":false,"description":"settings.json toggle for periodic background memory cleanup."},{"name":"memory.enableTeamMemory","type":"boolean","required":false,"description":"Enable the git-shared .qwen/team-memory/ tier (default false)."},{"name":"memory.enableTeamMemorySync","type":"boolean","required":false,"description":"Best-effort git sync of team memory at session start (default false)."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Project QWEN.md","language":"markdown","code":"See @README.md for project overview.\n\n# Conventions\n\n- Always use pnpm, not npm.\n- Git workflow: @docs/git-workflow.md\n"}],"notes":["Qwen Code also reads an existing AGENTS.md in the repository, so instructions do not need to be duplicated.","Reference other files from QWEN.md with @path/to/file; relative paths resolve from the QWEN.md file itself.","/init generates a starter QWEN.md; /memory opens the memory panel; /remember and /forget edit auto-memory directly.","Auto-memory (on by default) stores markdown notes in ~/.qwen/projects/<project>/memory/; /dream triggers cleanup.","Team memory (.qwen/team-memory/, off by default via memory.enableTeamMemory) shares durable project knowledge through git, with secret scanning on writes.",".qwen/QWEN.local.md must be gitignored manually; it loads after the shared project QWEN.md."],"docs":"https://github.com/QwenLM/qwen-code/blob/main/docs/users/features/memory.md"},"hooks":{"status":"supported","verified":"2026-07-12","summary":"Lifecycle hooks configured under the hooks key in settings.json, with four executor types: shell command, HTTP POST, registered function (internal), and LLM prompt. Hooks can inject context, block tools, and audit the session across a wide event set.","files":[{"path":".qwen/settings.json","scope":"project","format":"json","key":"hooks"},{"path":"~/.qwen/settings.json","scope":"global","format":"json","key":"hooks"}],"fields":[{"name":"matcher","type":"string","required":false,"description":"Regex filtering the trigger (tool id, subagent type, session source, etc.) depending on the event."},{"name":"sequential","type":"boolean","required":false,"description":"Run hooks in this group in order instead of in parallel."},{"name":"hooks[].type","type":"\"command\" | \"http\" | \"prompt\"","required":true,"description":"Hook executor type (function type exists but is internal-only)."},{"name":"hooks[].command","type":"string","required":false,"description":"Shell command to execute (command hooks). Receives event JSON on stdin."},{"name":"hooks[].url","type":"string","required":false,"description":"Target URL for HTTP hooks; event JSON is sent as the POST body."},{"name":"hooks[].headers","type":"record<string, string>","required":false,"description":"HTTP request headers; supports ${VAR} interpolation limited to allowedEnvVars."},{"name":"hooks[].allowedEnvVars","type":"string[]","required":false,"description":"Whitelist of environment variables allowed in HTTP hook URLs/headers."},{"name":"hooks[].timeout","type":"number","required":false,"description":"Timeout: milliseconds for command hooks (default 60000), seconds for HTTP hooks (default 600)."},{"name":"hooks[].async","type":"boolean","required":false,"description":"Command hooks only: run in the background without blocking; results surface next turn."},{"name":"hooks[].env","type":"record<string, string>","required":false,"description":"Environment variables for command hooks."},{"name":"hooks[].shell","type":"\"bash\" | \"powershell\"","required":false,"description":"Shell used to run command hooks."},{"name":"hooks[].name","type":"string","required":false,"description":"Friendly name for logging."},{"name":"hooks[].statusMessage","type":"string","required":false,"description":"Status message displayed while the hook executes."},{"name":"hooks[].once","type":"boolean","required":false,"description":"HTTP hooks only: execute at most once per event per session."}],"transports":[],"auth":[],"invocation":[],"events":["PreToolUse","PostToolUse","PostToolUseFailure","UserPromptSubmit","SessionStart","SessionEnd","MessageDisplay","Stop","SubagentStart","SubagentStop","PreCompact","Notification","PermissionRequest","PermissionDenied","TodoCreated","TodoCompleted"],"capabilities":[],"examples":[{"title":"Security check before shell commands","language":"json","code":"{\n  \"hooks\": {\n    \"PreToolUse\": [\n      {\n        \"matcher\": \"^run_shell_command$\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"$QWEN_PROJECT_DIR/.qwen/hooks/security-check.sh\",\n            \"name\": \"security-check\",\n            \"timeout\": 10000\n          }\n        ]\n      }\n    ]\n  }\n}\n"},{"title":"HTTP audit hook","language":"json","code":"{\n  \"hooks\": {\n    \"PreToolUse\": [\n      {\n        \"matcher\": \"*\",\n        \"hooks\": [\n          {\n            \"type\": \"http\",\n            \"url\": \"http://127.0.0.1:8080/hooks/pre-tool-use\",\n            \"headers\": { \"Authorization\": \"Bearer ${HOOK_API_KEY}\" },\n            \"allowedEnvVars\": [\"HOOK_API_KEY\"],\n            \"timeout\": 10\n          }\n        ]\n      }\n    ]\n  }\n}\n"}],"notes":["Command hooks receive JSON on stdin and reply via stdout; exit code 2 blocks the action with stderr as feedback to the model.","HTTP hooks POST the event JSON to a URL with SSRF protection, URL allowlists, and env var interpolation restricted to allowedEnvVars.","Matchers are regexes against tool ids, subagent types, or session sources; empty string or * matches all. Some events (UserPromptSubmit, Stop, Todo*) take no matcher.","Hooks run in parallel by default; sequential: true enforces ordered execution. Command hooks can set async: true for non-blocking background runs.","Project-level hooks require trusted folder status.","Function hooks are used internally by the Skill system and are not a public configuration API."],"docs":"https://github.com/QwenLM/qwen-code/blob/main/docs/users/features/hooks.md"},"commands":{"status":"supported","verified":"2026-07-12","summary":"Custom slash commands as Markdown files with optional YAML frontmatter under .qwen/commands/ (TOML format is deprecated but still read). Subdirectories create namespaced names, and prompts support {{args}}, !{...} shell execution, and @{...} file injection.","files":[{"path":".qwen/commands/<name>.md","scope":"project","format":"markdown","note":"Project commands; git/commit.md becomes /git:commit."},{"path":"~/.qwen/commands/<name>.md","scope":"global","format":"markdown","note":"User commands, available in every project."}],"fields":[{"name":"description","type":"string","required":false,"description":"Optional frontmatter field shown in /help; the Markdown body after the frontmatter is the prompt."},{"name":"prompt","type":"string","required":true,"description":"Deprecated TOML format only: the prompt sent to the model. In Markdown commands the body serves this role."}],"transports":[],"auth":[],"invocation":["/command-name","/namespace:command-name"],"events":[],"capabilities":[],"examples":[{"title":"Commit message from staged diff","language":"markdown","code":"---\ndescription: Generate Commit message based on staged changes\n---\n\nPlease generate a Commit message based on the following diff:\n\n!{git diff --staged}\n"}],"notes":["Project commands override user commands of the same name.","Markdown is the recommended format; legacy TOML files still work and trigger an automatic migration prompt.","Processing order: @{file} injection first, then !{shell} blocks (with confirmation dialog and shell escaping), then {{args}} substitution.","Without {{args}}, provided arguments are appended to the prompt after two newlines.","MCP server prompts also appear as slash commands (labeled MCP: <server>)."],"docs":"https://github.com/QwenLM/qwen-code/blob/main/docs/users/features/commands.md"},"settings":{"status":"supported","verified":"2026-07-12","summary":"Layered settings.json files (system defaults, user, project, system overrides) organized into category objects like general, ui, model, context, tools, security, mcp, memory, and hooks. Legacy flat settings are migrated automatically.","files":[{"path":".qwen/settings.json","scope":"project","format":"json","note":"Project settings; override user settings."},{"path":"~/.qwen/settings.json","scope":"global","format":"json","note":"User settings for all sessions."},{"path":"/etc/qwen-code/settings.json","scope":"enterprise","format":"json","note":"System overrides beating user and project settings (Linux). Windows: C:\\ProgramData\\qwen-code\\settings.json; macOS: /Library/Application Support/QwenCode/settings.json."},{"path":"/etc/qwen-code/system-defaults.json","scope":"enterprise","format":"json","note":"System-wide defaults with the lowest precedence (Linux); Windows and macOS analogues exist."}],"fields":[{"name":"general","type":"object","required":false,"description":"General behavior: preferredEditor, vimMode, enableAutoUpdate, language, chatRecording, voice options."},{"name":"model","type":"object","required":false,"description":"Model selection and generation configuration."},{"name":"context","type":"object","required":false,"description":"Context loading and file filtering (.gitignore / .qwenignore handling)."},{"name":"mcpServers","type":"record<string, object>","required":false,"description":"MCP server definitions (see the MCP surface)."},{"name":"mcp","type":"{ allowed?, excluded? }","required":false,"description":"Global MCP allow/deny lists with glob pattern support."},{"name":"hooks","type":"object","required":false,"description":"Lifecycle hook configuration (see the Hooks surface)."},{"name":"memory","type":"{ enableManagedAutoMemory?, enableManagedAutoDream?, enableTeamMemory?, enableTeamMemorySync? }","required":false,"description":"Auto-memory and team memory toggles (see the Rules surface)."},{"name":"ui","type":"object","required":false,"description":"Terminal UI: theme, customThemes, statusLine, banner and footer options."},{"name":"output","type":"{ format?: \"text\" | \"json\", showTimestamps?: boolean }","required":false,"description":"CLI output format options."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Project settings","language":"json","code":"{\n  \"general\": { \"vimMode\": true },\n  \"memory\": { \"enableTeamMemory\": true },\n  \"mcpServers\": {\n    \"my-server\": {\n      \"httpUrl\": \"http://localhost:3000/mcp\"\n    }\n  }\n}\n"}],"notes":["Precedence (low to high): defaults, system defaults file, user, project, system settings file, environment variables, command-line arguments.","String values may reference environment variables with $VAR_NAME or ${VAR_NAME} syntax.","System paths can be overridden with QWEN_CODE_SYSTEM_SETTINGS_PATH and QWEN_CODE_SYSTEM_DEFAULTS_PATH.","Authentication (API keys, model providers) is configured separately; see the official auth docs."],"docs":"https://github.com/QwenLM/qwen-code/blob/main/docs/users/configuration/settings.md"}},"behaviors":[]},{"name":"Reasonix","id":"reasonix","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".reasonix/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.reasonix/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Replit","type":"platform","vendor":"Replit","homepage":"https://replit.com/","id":"replit","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.config/agents/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Roo Code","type":"ide-extension","vendor":"Roo Code","description":"Open-source AI coding agent extension for VS Code with multiple modes, MCP support, and rich rule/skill customization.","homepage":"https://roocode.com","repo":"https://github.com/RooCodeInc/Roo-Code","docs":"https://docs.roocode.com","id":"roo","surfaces":{"mcp":{"status":"supported","verified":"2026-07-12","summary":"MCP servers configured under mcpServers in a project .roo/mcp.json or the global mcp_settings.json. Supports STDIO, Streamable HTTP, and legacy SSE transports.","files":[{"path":".roo/mcp.json","scope":"project","format":"json","key":"mcpServers","note":"Committed project-level servers; created via 'Edit Project MCP' in the MCP settings view."},{"path":"mcp_settings.json","scope":"global","format":"json","key":"mcpServers","note":"Global servers; stored in VS Code extension global storage and opened via 'Edit Global MCP' in the MCP settings view."}],"fields":[{"name":"command","type":"string","required":true,"description":"Executable to run for a STDIO server (e.g. node, python, npx, or an absolute path). Required for stdio servers."},{"name":"args","type":"string[]","required":false,"description":"Arguments passed to the command. Supports ${env:VARIABLE_NAME} interpolation."},{"name":"cwd","type":"string","required":false,"description":"Working directory to launch the server process from. Defaults to the first workspace folder."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables set for the server process."},{"name":"type","type":"\"stdio\" | \"streamable-http\" | \"sse\"","required":false,"description":"Transport type. Defaults to stdio for command-based configs; required for URL-based configs.","values":["stdio","streamable-http","sse"]},{"name":"url","type":"string","required":false,"description":"Endpoint URL for a remote Streamable HTTP or SSE server."},{"name":"headers","type":"record<string, string>","required":false,"description":"Custom HTTP headers for remote servers (e.g. authentication tokens)."},{"name":"alwaysAllow","type":"string[]","required":false,"description":"Tool names from this server to auto-approve."},{"name":"disabledTools","type":"string[]","required":false,"description":"Tool names to disable from this server."},{"name":"disabled","type":"boolean","required":false,"description":"Set true to disable this server configuration."},{"name":"timeout","type":"number","required":false,"description":"Per-server response timeout override in seconds (1-3600, default 60)."},{"name":"watchPaths","type":"string[]","required":false,"description":"File paths to watch; the server restarts automatically when they change (stdio servers)."}],"transports":["stdio","http","sse"],"auth":["headers","env"],"invocation":[],"events":[],"capabilities":[{"name":"Tools","status":"supported","note":"Invoked via the use_mcp_tool tool."},{"name":"Resources","status":"supported","note":"Accessed via the access_mcp_resource tool."}],"examples":[{"title":"Local STDIO server","language":"json","code":"{\n  \"mcpServers\": {\n    \"local-server\": {\n      \"command\": \"node\",\n      \"args\": [\"server.js\"],\n      \"env\": { \"API_KEY\": \"your_api_key\" },\n      \"alwaysAllow\": [\"tool1\"],\n      \"disabled\": false\n    }\n  }\n}\n"},{"title":"Remote Streamable HTTP server","language":"json","code":"{\n  \"mcpServers\": {\n    \"remote-server\": {\n      \"type\": \"streamable-http\",\n      \"url\": \"https://your-server.com/api/mcp-endpoint\",\n      \"headers\": { \"X-API-Key\": \"your-secure-api-key\" }\n    }\n  }\n}\n"}],"notes":["Project-level servers take precedence over global servers with the same name.","System environment variables can be referenced in args and env via ${env:VARIABLE_NAME}.","SSE is legacy; Streamable HTTP (type = \"streamable-http\") is recommended for remote servers. URL-based configs must set type explicitly.","Per-tool auto-approval via alwaysAllow plus the global 'Use MCP servers' auto-approve setting."],"docs":"https://docs.roocode.com/features/mcp/using-mcp-in-roo"},"skills":{"status":"supported","verified":"2026-07-12","summary":"SKILL.md instruction packages following the Agent Skills format, loaded on demand when a request matches the skill description. Supports mode-specific and cross-agent (.agents) locations.","files":[{"path":".roo/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Roo-specific project skills (highest priority)."},{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Cross-agent project skills shared with other agent tools."},{"path":"~/.roo/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"Roo-specific global skills."},{"path":"~/.agents/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"Cross-agent global skills."}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier; must exactly match the directory (or symlink) name. 1-64 chars, lowercase alphanumeric and hyphens, no leading/trailing/consecutive hyphens."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it (1-1024 chars). Roo matches requests against this text."}],"transports":[],"auth":[],"invocation":["automatic (request matches skill description)","skill tool (explicit load, e.g. \"use the pdf-processing skill\")"],"events":[],"capabilities":[],"examples":[{"title":"SKILL.md","language":"markdown","code":"---\nname: pdf-processing\ndescription: Extract text and tables from PDF files using Python libraries\n---\n\n# PDF Processing Instructions\n\nWhen the user requests PDF processing:\n1. Check if PyPDF2 or pdfplumber is installed\n2. For text extraction, use pdfplumber for better table detection\n3. Always handle encoding errors gracefully\n"}],"notes":["Progressive disclosure: only frontmatter metadata is indexed at startup; the full SKILL.md loads when a request matches, and bundled files are read on demand.","Override priority: project .roo > project .agents > global .roo > global .agents; mode-specific beats generic within each location.","Mode-specific variants live in skills-{modeSlug}/ directories (e.g. .roo/skills-code/).","Skills can bundle helper scripts, templates, and reference files alongside SKILL.md.","Symlinked skill directories are supported; the skill name comes from the symlink name."],"docs":"https://docs.roocode.com/features/skills"},"rules":{"status":"supported","verified":"2026-07-12","summary":"Persistent custom instructions from .roo/rules/ directories (global and workspace), mode-specific rules-{modeSlug}/ variants, .roorules fallback files, and AGENTS.md.","files":[{"path":".roo/rules/","scope":"project","format":"markdown","note":"Preferred workspace-wide rules directory; any text/markdown files, read recursively."},{"path":".roo/rules-{modeSlug}/","scope":"project","format":"markdown","note":"Mode-specific rules (e.g. .roo/rules-code/), applied only in that mode."},{"path":".roorules","scope":"project","format":"markdown","note":"Single-file fallback when .roo/rules/ is missing or empty. Plain text also accepted."},{"path":"AGENTS.md","scope":"project","format":"markdown","note":"Agent Rules standard file in the workspace root; AGENT.md used as fallback."},{"path":"~/.roo/rules/","scope":"global","format":"markdown","note":"Global rules applied to all projects."},{"path":"~/.roo/rules-{modeSlug}/","scope":"global","format":"markdown","note":"Global mode-specific rules."}],"fields":[],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Workspace rule file (.roo/rules/coding-standards.md)","language":"markdown","code":"# Global Coding Standards\n\n1. Always use TypeScript for new projects\n2. Write unit tests for all new functions\n3. Use descriptive variable names\n4. Add JSDoc comments for public APIs\n"}],"notes":["Loading order: global rules (~/.roo/) first, then workspace rules (.roo/); workspace rules win on conflict. Mode-specific rules load before generic rules.","Rules directories are read recursively and appended to the system prompt in alphabetical order by filename.","Fallback single files (.roorules, .roorules-{modeSlug}) are used only when the corresponding rules directory is missing or empty; legacy .clinerules is also read.","AGENTS.md loading is controlled by the roo-cline.useAgentRules VS Code setting (default true); AGENT.md is a fallback when AGENTS.md is absent.","Additional plain-text instructions can be set per-mode and globally in the Prompts tab UI."],"docs":"https://docs.roocode.com/features/custom-instructions"},"hooks":{"status":"unsupported","verified":"2026-07-12","summary":"Roo Code does not expose user-configurable lifecycle hooks.","files":[],"fields":[],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[],"notes":["The official documentation has no hooks feature; no hook configuration file exists in docs or the extension repo.","Task lifecycle events (taskStarted, taskCompleted, etc.) exist only as an internal extension API for programmatic consumers, not as a user-facing hook surface."]},"commands":{"status":"supported","verified":"2026-07-12","summary":"Custom slash commands as markdown files in .roo/commands/ (project) or ~/.roo/commands/ (global); the filename becomes the command name.","files":[{"path":".roo/commands/<name>.md","scope":"project","format":"markdown"},{"path":"~/.roo/commands/<name>.md","scope":"global","format":"markdown"}],"fields":[{"name":"description","type":"string","required":false,"description":"Shown in the command menu to explain the command's purpose."},{"name":"argument-hint","type":"string","required":false,"description":"Hint displayed next to the command showing expected arguments (e.g. <endpoint-name> <http-method>)."},{"name":"mode","type":"string","required":false,"description":"Mode slug to switch to before running the command (e.g. code, architect)."}],"transports":[],"auth":[],"invocation":["/command-name"],"events":[],"capabilities":[],"examples":[{"title":"Command with frontmatter (.roo/commands/api-endpoint.md)","language":"markdown","code":"---\ndescription: Generate a new REST API endpoint with best practices\nargument-hint: <endpoint-name> <http-method>\n---\n\nCreate a new REST API endpoint with the following specifications:\n- Proper error handling\n- Input validation\n- Unit tests\n\nFollow our project's API conventions and patterns.\n"}],"notes":["Project commands override global commands with the same name; built-in commands (e.g. /init and mode-switching commands like /code) cannot be overridden.","Commands can also be created and managed from Settings > Slash Commands.","Command subdirectories and symlinked command directories are supported."],"docs":"https://docs.roocode.com/features/slash-commands"},"settings":{"status":"supported","verified":"2026-07-12","summary":"Settings live in the Roo Code settings UI backed by extension storage, exportable/importable as JSON. Agent-relevant knobs (command allowlists, AGENTS.md loading, timeouts) are VS Code settings under the roo-cline.* namespace.","files":[{"path":".vscode/settings.json","scope":"project","format":"json","key":"roo-cline","note":"VS Code workspace settings; all Roo settings are prefixed roo-cline.* (also settable in user settings)."},{"path":"~/Documents/roo-code-settings.json","scope":"global","format":"json","note":"Default filename for exported settings; any path can be used and wired to auto-import."}],"fields":[{"name":"roo-cline.allowedCommands","type":"string[]","required":false,"description":"Commands auto-executed without approval. Default: [\"git log\", \"git diff\", \"git show\"]."},{"name":"roo-cline.deniedCommands","type":"string[]","required":false,"description":"Commands always blocked from execution."},{"name":"roo-cline.commandExecutionTimeout","type":"number","required":false,"description":"Timeout in seconds for command execution (0-600; 0 = no timeout)."},{"name":"roo-cline.useAgentRules","type":"boolean","required":false,"description":"Enable loading of AGENTS.md files for agent-specific instructions (default true)."},{"name":"roo-cline.autoImportSettingsPath","type":"string","required":false,"description":"Path to a settings JSON automatically imported on VS Code startup."},{"name":"roo-cline.customStoragePath","type":"string","required":false,"description":"Custom directory for Roo Code storage (task history, settings)."},{"name":"roo-cline.apiRequestTimeout","type":"number","required":false,"description":"Timeout in seconds for AI provider API requests (0-3600, default 600)."},{"name":"roo-cline.newTaskRequireTodos","type":"boolean","required":false,"description":"Require a todo list when creating new tasks via subtasks (default false)."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Auto-approve safe commands (VS Code settings.json)","language":"json","code":"{\n  \"roo-cline.allowedCommands\": [\"git log\", \"git diff\", \"npm test\"],\n  \"roo-cline.useAgentRules\": true,\n  \"roo-cline.autoImportSettingsPath\": \"~/roo-code-settings.json\"\n}\n"}],"notes":["Export/Import produces a roo-code-settings.json file containing provider profiles (including plaintext API keys) and global settings.","roo-cline.autoImportSettingsPath auto-imports a settings JSON on every VS Code start, useful for syncing machines or standardizing teams.","MCP servers, rules, skills, and commands have their own dedicated files (see the other surfaces)."],"docs":"https://docs.roocode.com/features/settings-management"}},"behaviors":[]},{"name":"Rovo Dev","type":"cli","vendor":"Atlassian","id":"rovodev","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".rovodev/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.rovodev/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Tabnine CLI","type":"cli","vendor":"Tabnine","homepage":"https://www.tabnine.com/","id":"tabnine-cli","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".tabnine/agent/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.tabnine/agent/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Terramind","id":"terramind","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".terramind/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.terramind/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Tinycloud","id":"tinycloud","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".tinycloud/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.tinycloud/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Trae","type":"editor","vendor":"ByteDance","homepage":"https://www.trae.ai/","id":"trae","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".trae/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.trae/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Trae CN","type":"editor","vendor":"ByteDance","homepage":"https://www.trae.com.cn/","id":"trae-cn","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".trae/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.trae-cn/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Visual Studio Code","type":"editor","vendor":"Microsoft","description":"Microsoft's code editor with GitHub Copilot chat and agent mode built in — configured via .vscode/mcp.json, settings.json, instructions files, prompt files, skills, and hooks.","homepage":"https://code.visualstudio.com/","repo":"https://github.com/microsoft/vscode","docs":"https://code.visualstudio.com/docs/copilot/overview","id":"vscode","surfaces":{"mcp":{"status":"supported","verified":"2026-07-12","summary":"Configure MCP servers in mcp.json under the servers key (not mcpServers). Supports stdio, Streamable HTTP, and legacy SSE, plus an MCP server gallery in the Extensions view and optional sandboxing for local servers.","files":[{"path":".vscode/mcp.json","scope":"project","format":"json","key":"servers","note":"Check into source control to share servers with your team."},{"path":"<VS Code profile>/mcp.json","scope":"global","format":"json","key":"servers","note":"Open with the MCP: Open User Configuration command; lives in the VS Code user-profile folder (e.g. ~/Library/Application Support/Code/User/mcp.json on macOS). Each profile can have its own servers."}],"fields":[{"name":"type","type":"\"stdio\" | \"http\" | \"sse\"","required":false,"description":"Server transport. stdio for local command servers, http (Streamable HTTP) or sse (legacy) for remote servers."},{"name":"command","type":"string","required":false,"description":"Command to start a local (stdio) server."},{"name":"args","type":"string[]","required":false,"description":"Arguments passed to the command."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables for the server. Avoid hardcoding secrets; use input variables or environment files."},{"name":"url","type":"string","required":false,"description":"Endpoint URL for a remote server."},{"name":"headers","type":"record<string, string>","required":false,"description":"HTTP headers for a remote server."},{"name":"sandboxEnabled","type":"boolean","required":false,"description":"Run a local stdio server in an isolated sandbox (macOS and Linux). Tool calls from sandboxed servers are auto-approved."}],"transports":["stdio","http","sse"],"auth":["headers"],"invocation":[],"events":[],"capabilities":[{"name":"Tools","status":"supported"},{"name":"Prompts","status":"supported","note":"Invoke server prompts by typing / in the chat input."},{"name":"Resources","status":"supported","note":"Attach via Add Context > MCP Resources or the MCP: Browse Resources command."},{"name":"Sampling","status":"supported","note":"Models exposed to servers are controlled by the chat.mcp.serverSampling setting."},{"name":"Apps","status":"supported","note":"Interactive UI components rendered inline in chat (chat.mcp.apps.enabled)."}],"examples":[{"title":"Remote and local servers","language":"json","code":"{\n  \"servers\": {\n    \"github\": {\n      \"type\": \"http\",\n      \"url\": \"https://api.githubcopilot.com/mcp\"\n    },\n    \"playwright\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@microsoft/mcp-server-playwright\"]\n    }\n  }\n}\n"},{"title":"Sandboxed local server","language":"json","code":"{\n  \"servers\": {\n    \"myServer\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@example/mcp-server\"],\n      \"sandboxEnabled\": true\n    }\n  },\n  \"sandbox\": {\n    \"filesystem\": { \"allowWrite\": [\"${workspaceFolder}\"] },\n    \"network\": { \"allowedDomains\": [\"api.example.com\"] }\n  }\n}\n"}],"notes":["Servers live under the servers key (not mcpServers).","Servers can also be installed from the MCP gallery (search @mcp in the Extensions view), added via MCP: Add Server, or via the code --add-mcp CLI flag.","MCP servers can be configured in devcontainer.json under customizations.vscode.mcp.servers.","chat.mcp.discovery.enabled can auto-discover MCP configs from other apps (e.g. Claude Desktop).","New or changed servers require an explicit trust confirmation before they start.","On macOS and Linux, local stdio servers can be sandboxed with sandboxEnabled plus a top-level sandbox object (filesystem/network rules)."],"docs":"https://code.visualstudio.com/docs/copilot/customization/mcp-servers"},"skills":{"status":"supported","verified":"2026-07-12","summary":"SKILL.md Agent Skills (open standard) loaded on demand from project and personal skill folders, including Claude- and .agents-compatible locations. Skills double as slash commands in chat.","files":[{"path":".github/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":".claude/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Claude-compatible project location."},{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Cross-agent project location."},{"path":"~/.copilot/skills/<name>/SKILL.md","scope":"global","format":"markdown"},{"path":"~/.claude/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"Claude-compatible personal location."},{"path":"~/.agents/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"Cross-agent personal location."}],"fields":[{"name":"name","type":"string","required":true,"description":"Unique identifier. Lowercase letters, numbers, and hyphens only; must match the parent directory name; max 64 characters."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it (drives automatic loading). Max 1024 characters."},{"name":"argument-hint","type":"string","required":false,"description":"Hint shown in the chat input when the skill is invoked as a slash command."},{"name":"user-invocable","type":"boolean","required":false,"description":"Whether the skill appears in the / menu. Default true."},{"name":"disable-model-invocation","type":"boolean","required":false,"description":"When true, the agent cannot auto-load the skill; it must be invoked via slash command. Default false."},{"name":"context","type":"\"fork\"","required":false,"description":"Experimental. Run the skill in a dedicated subagent context; only the final result returns to the parent agent. Requires github.copilot.chat.skillTool.enabled."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[{"title":"SKILL.md","language":"markdown","code":"---\nname: webapp-testing\ndescription: Guide for testing web applications using Playwright. Use this when asked to create or run browser-based tests.\n---\n\n# Web Application Testing with Playwright\n\n1. Review the [test template](./test-template.js) for the standard test structure\n2. Create a new test file in the `tests/` directory\n3. Use role-based locators and add assertions\n"}],"notes":["Enabled via chat.useAgentSkills (default true); extra locations via chat.agentSkillsLocations.","Progressive loading: only name/description at startup, the SKILL.md body when activated, and bundled files only when referenced.","Extensions can contribute skills via the chatSkills contribution point in package.json.","In monorepos, chat.useCustomizationsInParentRepositories discovers skills from the parent repository root."],"docs":"https://code.visualstudio.com/docs/copilot/customization/agent-skills"},"rules":{"status":"supported","verified":"2026-07-12","summary":"Always-on instructions via .github/copilot-instructions.md, AGENTS.md, and CLAUDE.md, plus file-based *.instructions.md files that apply conditionally via applyTo glob patterns.","files":[{"path":".github/copilot-instructions.md","scope":"project","format":"markdown","note":"Single always-on file applied to all chat requests in the workspace."},{"path":"AGENTS.md","scope":"project","format":"markdown","note":"Always-on, cross-agent instructions in the workspace root; subfolder AGENTS.md files are experimental."},{"path":"CLAUDE.md","scope":"project","format":"markdown","note":"Claude-compatible always-on instructions (also .claude/CLAUDE.md and CLAUDE.local.md)."},{"path":".github/instructions/**/*.instructions.md","scope":"project","format":"markdown","note":"File-based instructions applied via applyTo glob or semantic match of the description."},{"path":".claude/rules/*.md","scope":"project","format":"markdown","note":"Claude Rules format; uses a paths glob array instead of applyTo."},{"path":"~/.copilot/instructions/*.instructions.md","scope":"global","format":"markdown","note":"Personal instruction files; user-profile instructions can also live in VS Code user data and sync via Settings Sync."}],"fields":[{"name":"name","type":"string","required":false,"description":"Display name shown in the UI (.instructions.md frontmatter). Defaults to the file name."},{"name":"description","type":"string","required":false,"description":"Short description shown on hover in the Chat view; also used for semantic matching."},{"name":"applyTo","type":"string","required":false,"description":"Glob pattern (relative to the workspace root) that auto-applies the instructions to matching files. Use ** for all files; omit to require manual attachment."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Path-scoped instructions file","language":"markdown","code":"---\nname: 'Python Standards'\ndescription: 'Coding conventions for Python files'\napplyTo: '**/*.py'\n---\n# Python coding standards\n- Follow the PEP 8 style guide.\n- Use type hints for all function signatures.\n"}],"notes":["AGENTS.md support is controlled by chat.useAgentsMdFile (default true); nested AGENTS.md in subfolders is experimental (chat.useNestedAgentsMdFiles).","CLAUDE.md support (workspace root, .claude/CLAUDE.md, ~/.claude/CLAUDE.md, CLAUDE.local.md) is controlled by chat.useClaudeMdFile.",".claude/rules instruction files use a paths array (Claude Rules format) instead of applyTo.","GitHub organization-level instructions are discovered when github.copilot.chat.organizationInstructions.enabled is set.","Priority when instructions conflict: personal (user) > repository > organization.","Extra locations configurable via chat.instructionsFilesLocations; instruction folders are searched recursively.","Custom instructions are not used for inline completions as you type."],"docs":"https://code.visualstudio.com/docs/copilot/customization/custom-instructions"},"hooks":{"status":"supported","verified":"2026-07-12","summary":"Preview: JSON hook files run shell commands at agent lifecycle events. Hooks receive event JSON on stdin and can return JSON on stdout to block tools, decide permissions, or inject context.","files":[{"path":".github/hooks/*.json","scope":"project","format":"json","key":"hooks"},{"path":".claude/settings.json","scope":"project","format":"json","key":"hooks","note":"Claude Code compatibility (also .claude/settings.local.json)."},{"path":"~/.copilot/hooks/*.json","scope":"global","format":"json","key":"hooks"},{"path":"~/.claude/settings.json","scope":"global","format":"json","key":"hooks","note":"Claude Code compatibility. Workspace hooks take precedence over user hooks for the same event."}],"fields":[{"name":"type","type":"\"command\"","required":true,"description":"Hook handler type."},{"name":"command","type":"string","required":true,"description":"Shell command to run. Receives event JSON on stdin; may write JSON to stdout."},{"name":"cwd","type":"string","required":false,"description":"Working directory for the command."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables for the command."},{"name":"timeout","type":"number","required":false,"description":"Timeout in seconds. Default 30."},{"name":"windows | linux | osx","type":"string","required":false,"description":"OS-specific command overrides, selected by the extension host platform."}],"transports":[],"auth":[],"invocation":[],"events":["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","PreCompact","SubagentStart","SubagentStop","Stop"],"capabilities":[],"examples":[{"title":"Format after edits","language":"json","code":"{\n  \"hooks\": {\n    \"PostToolUse\": [\n      {\n        \"type\": \"command\",\n        \"command\": \"npx prettier --write .\"\n      }\n    ]\n  }\n}\n"},{"title":"Block dangerous commands (PreToolUse output)","language":"json","code":"{\n  \"hookSpecificOutput\": {\n    \"permissionDecision\": \"deny\",\n    \"permissionDecisionReason\": \"Destructive command blocked by security policy\"\n  }\n}\n"}],"notes":["Preview feature; the configuration format may change.","Same hook format as Claude Code and Copilot CLI. Claude Code configs are read but matcher values are ignored (hooks run for all tools); Copilot CLI camelCase event names and bash/powershell fields are converted.","Exit code 0 parses stdout as JSON; exit code 2 blocks and shows stderr to the model; other codes are non-blocking warnings.","PreToolUse hooks can return hookSpecificOutput.permissionDecision (allow/deny/ask); SessionStart hooks can return additionalContext.","Extra locations via chat.hookFilesLocations; agent-scoped hooks in .agent.md frontmatter require chat.useCustomAgentHooks.","Organizations can disable hooks via enterprise policy."],"docs":"https://code.visualstudio.com/docs/copilot/customization/hooks"},"commands":{"status":"supported","verified":"2026-07-12","summary":"Prompt files (.prompt.md) are reusable Markdown prompts invoked as slash commands in chat, with YAML frontmatter for agent, model, and tool selection.","files":[{"path":".github/prompts/<name>.prompt.md","scope":"project","format":"markdown"},{"path":"<VS Code profile>/prompts/<name>.prompt.md","scope":"global","format":"markdown","note":"User prompt files live in VS Code user data (per profile); create them via the Chat: New Prompt File command."}],"fields":[{"name":"description","type":"string","required":false,"description":"Short description of the prompt."},{"name":"name","type":"string","required":false,"description":"Slash-command name. Defaults to the file name."},{"name":"argument-hint","type":"string","required":false,"description":"Hint text shown in the chat input field."},{"name":"agent","type":"string","required":false,"description":"Agent used to run the prompt: ask, agent, plan, or a custom agent name.","values":["ask","agent","plan","<custom agent>"]},{"name":"model","type":"string","required":false,"description":"Language model used when running the prompt. Defaults to the currently selected model."},{"name":"tools","type":"string[]","required":false,"description":"Tool or tool-set names available to this prompt. Use '<server>/*' to include all tools of an MCP server; unavailable tools are ignored."}],"transports":[],"auth":[],"invocation":["/prompt-name"],"events":[],"capabilities":[],"examples":[{"title":"Prompt file","language":"markdown","code":"---\nagent: 'agent'\ndescription: 'Generate a new React form component'\ntools: ['search/codebase', 'vscode/askQuestions']\n---\nYour goal is to generate a new React form component based on our templates.\n\n* Use `react-hook-form` for form state management\n* Always define TypeScript types for your form data\n"}],"notes":["Agent skills also appear as slash commands alongside prompt files.","Extra workspace locations via chat.promptFilesLocations; user prompt files sync via Settings Sync.","Bodies support Markdown links to workspace files, #tool: references, and ${input:variableName} placeholders.","Custom agents (.github/agents/*.agent.md, formerly chat modes) are a separate mechanism; a prompt file can target one via the agent frontmatter field.","Generate prompt files with /create-prompt or the Agent Customizations editor."],"docs":"https://code.visualstudio.com/docs/copilot/customization/prompt-files"},"settings":{"status":"supported","verified":"2026-07-12","summary":"Agent behavior is configured in settings.json via chat.* and github.copilot.* keys: agent mode, tool approvals, sandboxing, MCP access, and discovery locations for instructions, prompts, skills, and hooks.","files":[{"path":".vscode/settings.json","scope":"project","format":"jsonc"},{"path":"<VS Code profile>/settings.json","scope":"global","format":"jsonc","note":"e.g. ~/Library/Application Support/Code/User/settings.json on macOS."}],"fields":[{"name":"chat.agent.enabled","type":"boolean","required":false,"description":"Enable or disable agent mode. Default true; can be managed at the organization level."},{"name":"chat.agent.maxRequests","type":"number","required":false,"description":"Maximum number of requests the agent can make per turn. Default 25."},{"name":"chat.tools.terminal.autoApprove","type":"record<string, boolean>","required":false,"description":"Which terminal commands are auto-approved in agent mode; supports /regex/ keys. Dangerous commands (rm, curl, chmod, ...) default to false."},{"name":"chat.tools.edits.autoApprove","type":"record<string, boolean>","required":false,"description":"Glob patterns for files that require approval before edits are applied."},{"name":"chat.tools.global.autoApprove","type":"boolean","required":false,"description":"Auto-approve all tools (disables critical security protections). Default false; org-manageable."},{"name":"chat.mcp.access","type":"boolean","required":false,"description":"Manage which MCP servers can be used. Org-manageable."},{"name":"chat.mcp.discovery.enabled","type":"boolean","required":false,"description":"Auto-discover MCP server configuration from other applications. Default false."},{"name":"chat.mcp.serverSampling","type":"object","required":false,"description":"Which models are exposed to MCP servers for sampling."},{"name":"chat.useAgentsMdFile","type":"boolean","required":false,"description":"Use AGENTS.md files as always-on chat context. Default true."},{"name":"chat.useClaudeMdFile","type":"boolean","required":false,"description":"Use CLAUDE.md files as always-on custom instructions. Default true."},{"name":"chat.instructionsFilesLocations","type":"record<string, boolean>","required":false,"description":"Folders searched (recursively) for *.instructions.md files. Default includes .github/instructions."},{"name":"chat.promptFilesLocations","type":"record<string, boolean>","required":false,"description":"Folders searched for .prompt.md files. Default includes .github/prompts."},{"name":"chat.useAgentSkills","type":"boolean","required":false,"description":"Enable Agent Skills support. Default true."},{"name":"chat.agentSkillsLocations","type":"record<string, boolean>","required":false,"description":"Folders searched for skills. Defaults include .github/skills, .claude/skills, ~/.copilot/skills, ~/.claude/skills."},{"name":"chat.hookFilesLocations","type":"record<string, boolean>","required":false,"description":"Preview. Additional hook file locations (folders of *.json or individual files)."},{"name":"chat.agent.sandbox.enabled","type":"\"off\" | \"on\" | \"allowNetwork\"","required":false,"description":"Preview. Sandboxing for agent terminal commands (macOS/Linux). Sandboxed commands are auto-approved. Org-manageable."},{"name":"github.copilot.enable","type":"record<string, boolean>","required":false,"description":"Enable or disable inline suggestions per language."},{"name":"github.copilot.chat.codeGeneration.useInstructionFiles","type":"boolean","required":false,"description":"Automatically add .github/copilot-instructions.md to chat requests. Default true."},{"name":"chat.disableAIFeatures","type":"boolean","required":false,"description":"Disable and hide all built-in AI features and the Copilot extensions."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Agent-related settings","language":"jsonc","code":"{\n  \"chat.agent.maxRequests\": 50,\n  \"chat.tools.terminal.autoApprove\": {\n    \"npm test\": true,\n    \"/^git (status|diff)/\": true\n  },\n  \"chat.useAgentsMdFile\": true,\n  \"chat.instructionsFilesLocations\": {\n    \".github/instructions\": true\n  }\n}\n"}],"notes":["Standard VS Code settings precedence applies: user settings, then workspace .vscode/settings.json.","Several agent settings (e.g. chat.agent.enabled, chat.mcp.access, chat.tools.global.autoApprove) can be managed centrally by organization policy.","settings.json supports comments (JSONC)."],"docs":"https://code.visualstudio.com/docs/copilot/reference/copilot-settings"}},"behaviors":[]},{"name":"Warp","type":"desktop-app","vendor":"Warp","description":"The Agentic Development Environment — a terminal and agent platform with local and cloud agents (Oz), MCP, rules, and skills.","homepage":"https://www.warp.dev/","docs":"https://docs.warp.dev/","id":"warp","surfaces":{"mcp":{"status":"supported","verified":"2026-07-12","summary":"MCP servers configured in Settings > Agents > MCP servers, in Warp Drive, or via file-based .warp/.mcp.json config. Warp also picks up MCP config from Claude Code, Codex, and other agent providers.","files":[{"path":"~/.warp/.mcp.json","scope":"global","format":"json","key":"mcpServers","note":"Shared by Stable and Preview channels. Pasted multi-server JSON also uses the mcpServers key."},{"path":".warp/.mcp.json","scope":"project","format":"json","key":"mcpServers","note":"Project-scoped; requires explicit approval and never auto-spawns."}],"fields":[{"name":"command","type":"string","required":true,"description":"Executable to launch for a CLI (stdio) server, e.g. npx."},{"name":"args","type":"string[]","required":true,"description":"Command-line arguments passed to the command."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables for the server (e.g. API tokens)."},{"name":"working_directory","type":"string","required":false,"description":"Working directory where the command runs; used to resolve relative paths."},{"name":"url","type":"string","required":true,"description":"HTTP endpoint for a Streamable HTTP or SSE server."},{"name":"headers","type":"record<string, string>","required":false,"description":"HTTP headers for remote servers (e.g. Authorization bearer token)."}],"transports":["stdio","sse","http"],"auth":["oauth","headers","env"],"invocation":[],"events":[],"capabilities":[{"name":"Tools","status":"supported"},{"name":"Resources","status":"supported","note":"Running servers list their available tools and resources on the MCP servers page."}],"examples":[{"title":"Multiple servers (paste or .warp/.mcp.json)","language":"json","code":"{\n  \"mcpServers\": {\n    \"filesystem\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/path/to/allowed/files\"]\n    },\n    \"externalDocs\": {\n      \"url\": \"http://localhost:4000/mcp/stream\",\n      \"headers\": { \"my-header\": \"my-header-value\" }\n    }\n  }\n}\n"}],"notes":["Global Warp-managed servers auto-spawn by default; global servers from third-party providers (Claude Code ~/.claude.json, Codex ~/.codex/config.toml, other agents ~/.agents/.mcp.json) require the Auto-spawn servers from third-party agents toggle.","Project-scoped servers from any provider never auto-spawn and must be approved/toggled on per session.","The bundled /agent-add-mcp skill lets the agent write file-based server definitions to ~/.warp/.mcp.json (global) or {repo_root}/.warp/.mcp.json (project) with your approval.","Warp prevents edits to MCP config files unless you explicitly approve the change.","Servers can be shared with teammates via Warp Drive; env secrets are scrubbed and replaced with variables on share.","Set working_directory explicitly when command/args include relative paths."],"docs":"https://docs.warp.dev/agent-platform/capabilities/mcp/"},"skills":{"status":"supported","verified":"2026-07-12","summary":"SKILL.md skills (Agent Skills format) discovered from .agents/skills/ and many compatible directories, invocable by the agent or directly via /{skill-name} with argument placeholders.","files":[{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Recommended project location; subdirectory skills are discovered when working within that subdirectory."},{"path":"~/.agents/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"Recommended global location, available across all projects."},{"path":".warp/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Warp-specific alternative; .claude/skills/, .codex/skills/, .cursor/skills/ and others are also scanned."},{"path":"~/.warp/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"Warp-specific global directory; also where Warp's bundled skills live."}],"fields":[{"name":"name","type":"string","required":true,"description":"Unique identifier for the skill (typically kebab-case)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it; the agent uses this to decide when to invoke the skill."}],"transports":[],"auth":[],"invocation":["/skill-name","automatic"],"events":[],"capabilities":[],"examples":[{"title":"Parameterized skill","language":"markdown","code":"---\nname: explain-topic\ndescription: Explain a topic for a specific audience in a given tone\n---\n\n# Explain Topic\n\nExplain $0 for an audience of $1 professionals.\nUse a $2 tone.\nFull request: $ARGUMENTS\n"}],"notes":["Warp scans many skill directory names at both project and home scope: .agents/skills/ (recommended), .warp/skills/, .claude/skills/, .codex/skills/, .cursor/skills/, .gemini/skills/, .copilot/skills/, .factory/skills/, .github/skills/, .opencode/skills/.","Skill discovery is based on the cwd; for git repos Warp includes all skills from the current directory up through the repository root.","Argument placeholders: $ARGUMENTS (full raw string), $ARGUMENTS[N] (Nth whitespace-separated arg, 0-indexed), $N shorthand. Extra text with no placeholders is passed as a separate user message.","Skills can include supporting files (scripts, templates, configs) referenced by relative path from SKILL.md.","Edit skills with the /open-skill slash command; bundled skills live in ~/.warp/skills/.","Warp maintains ready-to-use skills in the warpdotdev/oz-skills repository; skills can also drive cloud agents (Skills as Agents)."],"docs":"https://docs.warp.dev/agent-platform/capabilities/skills/"},"rules":{"status":"supported","verified":"2026-07-12","summary":"Project Rules in AGENTS.md (or legacy WARP.md) files at repo root and subdirectories, plus cloud-managed Global Rules in Warp Drive.","files":[{"path":"AGENTS.md","scope":"project","format":"markdown","note":"Repo root and subdirectories; closest file takes precedence."},{"path":"WARP.md","scope":"project","format":"markdown","note":"Legacy name, still fully supported; wins over AGENTS.md in the same directory."}],"fields":[],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Generate project rules","language":"text","code":"/init\n"}],"notes":["AGENTS.md is the default project rules file; existing WARP.md files remain fully supported and take priority if both exist in the same directory.","The filename must be all caps (AGENTS.md, not agents.md).","Warp automatically applies the rules file in the repo root and the current directory, and makes a best-effort attempt to include a subdirectory's rules file when editing files there.","Precedence: current subdirectory rules > root directory rules > Global Rules.","/init generates an AGENTS.md or links an existing rules file (CLAUDE.md, .cursorrules, AGENT.md, GEMINI.md, .clinerules, .windsurfrules, .github/copilot-instructions.md); /add-rule creates a Global Rule; /open-project-rules opens project rules in Warp's editor.","Global Rules are managed in Warp Drive (Personal > Rules), not as local files; rules usage can be toggled with the agents.knowledge.rules_enabled setting."],"docs":"https://docs.warp.dev/agent-platform/capabilities/rules/"},"hooks":{"status":"unsupported","verified":"2026-07-12","summary":"Warp has no lifecycle hook mechanism for its agents.","files":[],"fields":[],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[],"notes":["No hooks surface exists in the official docs (docs.warp.dev). Agent lifecycle hooks are open feature requests tracked in warpdotdev/Warp issues #7834, #8931, and #6857."]},"commands":{"status":"supported","verified":"2026-07-12","summary":"Slash commands in Agent Mode combine built-in static commands (/init, /agent, /model, /add-mcp, ...) with user-defined Agent Prompts saved in Warp Drive and skills invoked as /{skill-name}.","files":[],"fields":[{"name":"name","type":"string","required":true,"description":"Prompt name shown in the slash menu and used for search."},{"name":"description","type":"string","required":false,"description":"Meaningful description, indexed for search."},{"name":"arguments","type":"array","required":false,"description":"Prompt arguments created via {{argument}} placeholders; each has a type (text or enum), optional description, and default value."}],"transports":[],"auth":[],"invocation":["/command-name","/skill-name","command palette"],"events":[],"capabilities":[],"examples":[{"title":"Parameterized Warp Drive prompt","language":"text","code":"Summarize the git log since {{ref}} and highlight breaking changes for {{audience}}.\n"}],"notes":["Built-in static commands include /agent, /new, /init, /index, /model, /add-mcp, /add-prompt, /add-rule, /prompts, /queue, /create-environment, and more.","Custom reusable prompts are Warp Drive Prompts — parameterized natural-language queries stored in Warp Drive (cloud objects, not local files) and runnable from the slash menu, Command Palette, or Warp Drive.","Prompt arguments use {{argument}} placeholders, typed text or enum, with optional descriptions and default values; SHIFT-TAB cycles through arguments.","Skills are also user-invocable as slash commands with argument support (see Skills).","Slash command availability in the terminal input is controlled by the terminal.input.enable_slash_commands_in_terminal setting."],"docs":"https://docs.warp.dev/agent-platform/capabilities/slash-commands/"},"settings":{"status":"supported","verified":"2026-07-12","summary":"TOML settings file with hot reload; the [agents] sections control model, knowledge (rules), MCP auto-spawn, and permission profiles for the agent.","files":[{"path":"~/.warp/settings.toml","scope":"global","format":"toml","note":"macOS Stable path; Linux uses ~/.config/warp-terminal/settings.toml. There is no project-scoped settings file."}],"fields":[{"name":"agents.model","type":"string","required":false,"description":"Default model for the Warp Agent in the terminal. Default \"auto\"."},{"name":"agents.knowledge.rules_enabled","type":"boolean","required":false,"description":"Whether the agent uses your saved rules during requests. Default true."},{"name":"agents.mcp_servers.file_based_mcp_enabled","type":"boolean","required":false,"description":"Auto-spawn global file-based MCP servers from third-party agents. Default false."},{"name":"agents.profiles.agent_mode_coding_permissions","type":"string","required":false,"description":"File read permission level for the agent.","values":["always_ask_before_reading","always_allow_reading","allow_reading_specific_files"]},{"name":"agents.profiles.agent_mode_execute_readonly_commands","type":"boolean","required":false,"description":"Whether the agent can auto-execute read-only commands without asking. Default false."},{"name":"agents.profiles.agent_mode_command_execution_allowlist","type":"string[]","required":false,"description":"Regex patterns for commands the agent can execute without explicit permission."},{"name":"agents.profiles.agent_mode_command_execution_denylist","type":"string[]","required":false,"description":"Regex patterns for commands the agent must always ask before executing."},{"name":"agents.warp_agent.is_any_ai_enabled","type":"boolean","required":false,"description":"Master switch for all AI features. Default true."},{"name":"agents.warp_agent.other.agent_attribution_enabled","type":"boolean","required":false,"description":"Add an attribution co-author line to commits and PRs the agent creates. Default true."},{"name":"agents.warp_agent.other.default_prompt_submission_mode","type":"string","required":false,"description":"Behavior when submitting a prompt while the agent is still responding. Default interrupt.","values":["interrupt","queue"]},{"name":"agents.cloud_conversation_storage_enabled","type":"boolean","required":false,"description":"Whether conversations are stored in the cloud. Default true."},{"name":"general.default_session_mode","type":"string","required":false,"description":"Default mode for new terminal sessions. Default terminal.","values":["terminal","agent","cloud_agent","tab_config","docker_sandbox"]},{"name":"code.indexing.agent_mode_codebase_context","type":"boolean","required":false,"description":"Whether Codebase Context is provided to the agent. Default true."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Agent permissions in settings.toml","language":"toml","code":"[agents]\nmodel = \"auto\"\n\n[agents.profiles]\nagent_mode_execute_readonly_commands = true\nagent_mode_command_execution_allowlist = [\"ls(\\\\s.*)?\", \"cat(\\\\s.*)?\"]\n\n[agents.mcp_servers]\nfile_based_mcp_enabled = true\n"}],"notes":["File location depends on platform/channel: macOS Stable ~/.warp/settings.toml, Linux ~/.config/warp-terminal/settings.toml, Windows %LOCALAPPDATA%\\warp\\Warp\\config\\settings.toml.","Settings are grouped into TOML sections; only include settings you want to change. A settings_schema.json ships with the app.","Agent-relevant sections: [agents], [agents.knowledge], [agents.mcp_servers], [agents.profiles], [agents.warp_agent.*], [agents.third_party], [agents.voice].","Settings can sync across devices via account.is_settings_sync_enabled."],"docs":"https://docs.warp.dev/terminal/settings/all-settings/"}},"behaviors":[]},{"name":"Windsurf","type":"editor","vendor":"Cognition","description":"Agentic AI code editor built around the Cascade agent, created by Codeium and now maintained by Cognition as Devin Desktop.","homepage":"https://windsurf.com","docs":"https://docs.windsurf.com","id":"windsurf","surfaces":{"mcp":{"status":"supported","verified":"2026-07-12","summary":"Configure MCP servers for Cascade in mcp_config.json under the mcpServers key, or install from the built-in MCP Marketplace. Supports stdio, Streamable HTTP, and SSE with OAuth for each transport.","files":[{"path":"~/.codeium/windsurf/mcp_config.json","scope":"global","format":"json","key":"mcpServers","note":"Also editable via the MCP Marketplace / MCP Servers settings UI."}],"fields":[{"name":"command","type":"string","required":false,"description":"Command to start a local (stdio) server, e.g. npx, docker, node."},{"name":"args","type":"string[]","required":false,"description":"Arguments passed to the command."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables for the server. Supports ${env:...} and ${file:...} interpolation."},{"name":"serverUrl","type":"string","required":false,"description":"Endpoint URL for a remote (HTTP/SSE) server. url is also accepted."},{"name":"headers","type":"record<string, string>","required":false,"description":"HTTP headers for a remote server (e.g. API keys, Authorization). Supports interpolation."},{"name":"disabledTools","type":"string[]","required":false,"description":"Tools to disable for this server (excluded from enterprise whitelist matching)."}],"transports":["stdio","http","sse"],"auth":["oauth","headers"],"invocation":[],"events":[],"capabilities":[{"name":"Tools","status":"supported"},{"name":"Prompts","status":"supported"},{"name":"Resources","status":"supported"}],"examples":[{"title":"Local stdio server","language":"json","code":"{\n  \"mcpServers\": {\n    \"github\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@modelcontextprotocol/server-github\"],\n      \"env\": {\n        \"GITHUB_PERSONAL_ACCESS_TOKEN\": \"<YOUR_PERSONAL_ACCESS_TOKEN>\"\n      }\n    }\n  }\n}\n"},{"title":"Remote HTTP server with header interpolation","language":"json","code":"{\n  \"mcpServers\": {\n    \"remote-http-mcp\": {\n      \"serverUrl\": \"<your-server-url>/mcp\",\n      \"headers\": {\n        \"API_KEY\": \"Bearer ${env:AUTH_TOKEN}\"\n      }\n    }\n  }\n}\n"}],"notes":["Remote servers use a serverUrl (or url) field instead of command/args.","Cascade has a limit of 100 total MCP tools enabled at any given time; individual tools can be toggled per server.","command, args, env, serverUrl, url, and headers support ${env:VAR_NAME} and ${file:/path/to/file} interpolation to avoid hardcoding secrets.","One-click installs via windsurf://windsurf-mcp-registry deeplinks; teams can whitelist servers or point at custom MCP registries (enterprise)."],"docs":"https://docs.devin.ai/desktop/cascade/mcp"},"skills":{"status":"supported","verified":"2026-07-12","summary":"Folder-based SKILL.md skills (Agent Skills standard) that bundle instructions with supporting files. Cascade sees only name and description until it invokes the skill (progressive disclosure).","files":[{"path":".windsurf/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Workspace skills, committed with the repo."},{"path":"~/.codeium/windsurf/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"Global skills, available in all workspaces. Not committed."},{"path":"/etc/windsurf/skills/<name>/SKILL.md","scope":"enterprise","format":"markdown","note":"System skills deployed by IT (Linux path; macOS: /Library/Application Support/Windsurf/skills/, Windows: C:\\ProgramData\\Windsurf\\skills\\). Read-only for end users."}],"fields":[{"name":"name","type":"string","required":true,"description":"Unique skill identifier (lowercase letters, numbers, hyphens). Displayed in the UI and used for @-mentions."},{"name":"description","type":"string","required":true,"description":"Brief explanation shown to the model so Cascade can decide when to invoke the skill."}],"transports":[],"auth":[],"invocation":["automatic","@skill-name"],"events":[],"capabilities":[],"examples":[{"title":"Skill with frontmatter","language":"markdown","code":"---\nname: deploy-to-production\ndescription: Guides the deployment process to production with safety checks\n---\n\n## Pre-deployment Checklist\n1. Run all tests\n2. Check for uncommitted changes\n3. Verify environment variables\n\n## Deployment Steps\nFollow these steps to deploy safely...\n"}],"notes":["Supporting files (scripts, templates, checklists) placed next to SKILL.md become available when the skill is invoked.","For cross-agent compatibility, skills are also discovered in .agents/skills/ and ~/.agents/skills/; with Claude Code config reading enabled, .claude/skills/ and ~/.claude/skills/ are scanned too.","Skills can also be created from the Cascade Customizations UI (+ Workspace / + Global)."],"docs":"https://docs.devin.ai/desktop/cascade/skills"},"rules":{"status":"supported","verified":"2026-07-12","summary":"User-defined rules at global, workspace, and system level, with per-rule activation modes (always_on, glob, model_decision, manual). AGENTS.md files are fed into the same rules engine with location-based scoping.","files":[{"path":".windsurf/rules/*.md","scope":"project","format":"markdown","note":"One file per rule with frontmatter activation mode. .devin/rules/*.md is preferred in newer builds."},{"path":".windsurfrules","scope":"project","format":"markdown","note":"Legacy single-file workspace rules at the repo root; still read."},{"path":"AGENTS.md","scope":"project","format":"markdown","note":"Root and any subdirectory. Root = always-on, subdirectory = auto-glob for that directory. No frontmatter."},{"path":"~/.codeium/windsurf/memories/global_rules.md","scope":"global","format":"markdown","note":"Single always-on file applied across all workspaces. Max 6,000 characters."},{"path":"/etc/windsurf/rules/*.md","scope":"enterprise","format":"markdown","note":"System rules deployed by IT (Linux path; macOS: /Library/Application Support/Windsurf/rules/, Windows: C:\\ProgramData\\Windsurf\\rules\\). Merged with user rules, read-only."}],"fields":[{"name":"trigger","type":"string","required":false,"description":"Activation mode declared in the rule's frontmatter.","values":["always_on","model_decision","glob","manual"]},{"name":"description","type":"string","required":false,"description":"Shown in the system prompt for model_decision rules; Cascade reads the full rule when it decides the description is relevant."},{"name":"globs","type":"string","required":false,"description":"Glob pattern(s) for glob-triggered rules (e.g. **/*.test.ts); applied when Cascade reads or edits matching files."}],"transports":[],"auth":[],"invocation":["@rule-name"],"events":[],"capabilities":[],"examples":[{"title":"Glob-scoped workspace rule","language":"markdown","code":"---\ntrigger: glob\nglobs: **/*.test.ts\n---\n\nAll test files must use `describe`/`it` blocks and mock external API calls.\n"}],"notes":["Newer builds prefer .devin/rules/*.md over .windsurf/rules/*.md; both are read (.devin takes precedence).","Rules are discovered in the workspace, its subdirectories, and parent directories up to the git root.","Workspace rule files are limited to 12,000 characters each; the global rules file to 6,000 characters.","Root-level AGENTS.md is always-on; AGENTS.md in a subdirectory becomes a glob rule for <directory>/**. agents.md (lowercase) also works.","Cascade also auto-generates Memories (stored locally in ~/.codeium/windsurf/memories/) that are retrieved when relevant; these are separate from user-defined rules."],"docs":"https://docs.devin.ai/desktop/cascade/memories"},"hooks":{"status":"supported","verified":"2026-07-12","summary":"Cascade Hooks run shell commands at key points in the agent workflow, configured in hooks.json at system, user, and workspace level (merged, executed system -> user -> workspace). Hooks receive event JSON on stdin; pre-hooks can block the action by exiting with code 2.","files":[{"path":".windsurf/hooks.json","scope":"project","format":"json","key":"hooks","note":"Workspace hooks, version-controlled with the repo."},{"path":"~/.codeium/windsurf/hooks.json","scope":"global","format":"json","key":"hooks","note":"User-level hooks (JetBrains plugin reads ~/.codeium/hooks.json)."},{"path":"/etc/windsurf/hooks.json","scope":"enterprise","format":"json","key":"hooks","note":"System hooks deployed by IT (Linux path; macOS: /Library/Application Support/Windsurf/hooks.json, Windows: C:\\ProgramData\\Windsurf\\hooks.json)."}],"fields":[{"name":"command","type":"string","required":false,"description":"Shell command to run on macOS/Linux (via bash -c). At least one of command or powershell is required."},{"name":"powershell","type":"string","required":false,"description":"Command to run on Windows (via powershell -Command). Falls back to command when omitted."},{"name":"show_output","type":"boolean","required":false,"description":"Whether to display the hook's stdout/stderr in the Cascade UI."},{"name":"working_directory","type":"string","required":false,"description":"Directory to run the command from. Defaults to the workspace root; ~ expansion is not supported."}],"transports":[],"auth":[],"invocation":[],"events":["pre_read_code","post_read_code","pre_write_code","post_write_code","pre_run_command","post_run_command","pre_mcp_tool_use","post_mcp_tool_use","pre_user_prompt","post_cascade_response","post_cascade_response_with_transcript","post_setup_worktree"],"capabilities":[],"examples":[{"title":"Block dangerous commands and format after edits","language":"json","code":"{\n  \"hooks\": {\n    \"pre_run_command\": [\n      {\n        \"command\": \"python3 /Users/yourname/hooks/block_dangerous_commands.py\",\n        \"show_output\": true\n      }\n    ],\n    \"post_write_code\": [\n      {\n        \"command\": \"bash /Users/yourname/hooks/format_code.sh\",\n        \"show_output\": false\n      }\n    ]\n  }\n}\n"}],"notes":["Exit code 0 = proceed; exit code 2 = blocking error (pre-hooks only); other codes = non-blocking error.","Only pre_user_prompt, pre_read_code, pre_write_code, pre_run_command, and pre_mcp_tool_use can block actions.","Every hook receives common JSON fields: agent_action_name, trajectory_id, execution_id, timestamp, model_name, and event-specific tool_info.","post_cascade_response_with_transcript writes a full JSONL conversation transcript to ~/.windsurf/transcripts/{trajectory_id}.jsonl.","Enterprise teams can also distribute hooks via the cloud dashboard (Team Settings > Cascade Hooks); cloud hooks load before system, user, and workspace hooks."],"docs":"https://docs.devin.ai/desktop/cascade/hooks"},"commands":{"status":"supported","verified":"2026-07-12","summary":"Workflows are markdown prompt templates invoked manually with /workflow-name slash commands. Cascade processes the steps sequentially; workflows can call other workflows.","files":[{"path":".windsurf/workflows/*.md","scope":"project","format":"markdown","note":"Workspace workflows, committed with the repo."},{"path":"~/.codeium/windsurf/global_workflows/*.md","scope":"global","format":"markdown","note":"Global workflows available in every workspace. Not committed."},{"path":"/etc/windsurf/workflows/*.md","scope":"enterprise","format":"markdown","note":"System workflows deployed by IT (Linux path; macOS: /Library/Application Support/Windsurf/workflows/, Windows: C:\\ProgramData\\Windsurf\\workflows\\). Highest precedence, read-only."}],"fields":[],"transports":[],"auth":[],"invocation":["/workflow-name"],"events":[],"capabilities":[],"examples":[{"title":"Workflow to address PR comments","language":"markdown","code":"1. Check out the PR branch: `gh pr checkout [id]`\n2. Get comments on the PR via `gh api`\n3. For EACH comment: analyze the file and line range, make the change\n   if it is clear, otherwise ask for clarification.\n4. After all comments are processed, summarize what you did and which\n   comments need the USER's attention.\n"}],"notes":["Manual-only: Cascade never invokes a workflow automatically (use a Skill for model-invoked procedures).","Workflow files are limited to 12,000 characters each.","Workflows are discovered in the workspace, its subdirectories, and parent directories up to the git root.","Precedence when names collide: system > workspace > global > built-in (e.g. /plan).","Workflows contain a title, description, and a series of steps; a workflow can include instructions like 'Call /other-workflow'."],"docs":"https://docs.devin.ai/desktop/cascade/workflows"},"settings":{"status":"partial","verified":"2026-07-12","summary":"Agent-relevant settings live in the in-app settings UI (Cascade gitignore access, diff zones, terminal allow/deny lists, marketplace URL); there is no documented user-editable settings file for agent behavior. Enterprises can enforce settings centrally via OS-level policies.","files":[{"path":"/etc/windsurf/policies/policy.json","scope":"enterprise","format":"json","note":"Linux JSON policy file deployed by IT. Windows uses registry-based group policy, macOS uses configuration profiles."}],"fields":[{"name":"AllowedExtensions","type":"string (JSON)","required":false,"description":"Allowlist of permitted extension publishers, e.g. {\"windsurf\": true, \"github\": true}."},{"name":"UpdateMode","type":"string","required":false,"description":"Controls how the editor updates (e.g. manual)."},{"name":"EnableTelemetry","type":"boolean","required":false,"description":"Enable or disable telemetry."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Linux policy file","language":"json","code":"{\n  \"AllowedExtensions\": \"{\\\"publisher1\\\": true, \\\"publisher2\\\": true}\",\n  \"UpdateMode\": \"manual\"\n}\n"}],"notes":["User settings are managed via the settings UI (top-right dropdown or Command Palette > Open User Settings) rather than a documented config file.","Enterprise policy values override settings configured at any level (default, user, workspace).","Windows policies are read from the registry at Software\\Policies\\Windsurf\\{ProductName}; macOS uses .mobileconfig configuration profiles.","Documented policies include AllowedExtensions (JSON allowlist of extension publishers), UpdateMode, EnableTelemetry, and EnableFeedback."],"docs":"https://docs.devin.ai/desktop/enterprise-policies"}},"behaviors":[]},{"name":"Zed","type":"editor","vendor":"Zed Industries","description":"A high-performance, open source code editor with a built-in Agent Panel, MCP support, and ACP-based external agents.","homepage":"https://zed.dev","repo":"https://github.com/zed-industries/zed","docs":"https://zed.dev/docs","id":"zed","surfaces":{"mcp":{"status":"supported","verified":"2026-07-12","summary":"Configure MCP servers (context servers) in settings.json under the context_servers key, or install them as Zed extensions. Supports local stdio and remote servers with OAuth.","files":[{"path":"~/.config/zed/settings.json","scope":"global","format":"json","key":"context_servers","note":"macOS/Linux. On Windows: %APPDATA%/Zed/settings.json."},{"path":".zed/settings.json","scope":"project","format":"json","key":"context_servers"}],"fields":[{"name":"source","type":"\"custom\" | \"extension\"","required":false,"description":"How the server is provided. Entries added via the UI set 'custom'; extension-provided servers use 'extension'."},{"name":"command","type":"string","required":false,"description":"Command to start a local (stdio) server."},{"name":"args","type":"string[]","required":false,"description":"Arguments passed to the command."},{"name":"env","type":"record<string, string>","required":false,"description":"Environment variables for a local server."},{"name":"url","type":"string","required":false,"description":"Endpoint URL for a remote server."},{"name":"headers","type":"record<string, string>","required":false,"description":"HTTP headers for a remote server (e.g. Authorization: Bearer <token>)."}],"transports":["stdio","http"],"auth":["oauth","headers"],"invocation":[],"events":[],"capabilities":[{"name":"Tools","status":"supported"},{"name":"Prompts","status":"supported"},{"name":"Resources","status":"unsupported","note":"Official docs state Zed currently supports MCP's Tools and Prompts features."},{"name":"Roots","status":"unsupported","note":"Not listed among supported MCP features in official docs."},{"name":"Elicitation","status":"unsupported","note":"Docs welcome contributions for Elicitation support."},{"name":"Sampling","status":"unsupported","note":"Docs welcome contributions for Sampling support."}],"examples":[{"title":"Local and remote context servers","language":"json","code":"{\n  \"context_servers\": {\n    \"local-mcp-server\": {\n      \"command\": \"some-command\",\n      \"args\": [\"arg-1\", \"arg-2\"],\n      \"env\": {}\n    },\n    \"remote-mcp-server\": {\n      \"url\": \"https://example.com/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer <token>\" }\n    },\n    \"remote-mcp-server-with-oauth\": {\n      \"url\": \"https://mcp.example.com/mcp\"\n    }\n  }\n}\n"}],"notes":["MCP servers can also be installed as Zed extensions from the extension registry (Settings > AI > MCP Servers > Install from Extensions).","Remote servers without an Authorization header trigger the standard MCP OAuth flow.","Zed handles notifications/tools/list_changed and reloads a server's tool list at runtime without a restart.","Servers configured in Zed are forwarded to External Agents over the Agent Client Protocol (ACP).","Per-tool approval uses agent.tool_permissions with the key format mcp:<server>:<tool>; agent.tool_permissions.default is one of confirm, allow, or deny.","Custom agent profiles can scope which context servers and tools are enabled via enable_all_context_servers and per-server tool toggles."],"docs":"https://zed.dev/docs/ai/mcp"},"skills":{"status":"supported","verified":"2026-07-12","summary":"SKILL.md skill folders following the open Agent Skills standard, loaded autonomously from a catalog or invoked manually via slash command or @-mention.","files":[{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Project-local skills, only loaded from trusted worktrees."},{"path":"~/.agents/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"Global skills, available in every project."}],"fields":[{"name":"name","type":"string","required":true,"description":"Lowercase letters, numbers, and hyphens only; 1-64 chars; no leading/trailing/consecutive hyphens. Should match the folder name."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it. Keep under 1024 bytes; longer descriptions load with a warning."},{"name":"disable-model-invocation","type":"boolean","required":false,"description":"When true, hides the skill from the agent's catalog; it remains invocable via slash command or @-mention."}],"transports":[],"auth":[],"invocation":["/skill-name","@skill","automatic"],"events":[],"capabilities":[],"examples":[{"title":"Manual-only deploy skill","language":"markdown","code":"---\nname: deploy\ndescription: Deploy the current branch to production.\ndisable-model-invocation: true\n---\n\n## Instructions\n\nStep-by-step instructions for the agent...\n"}],"notes":["Skills replaced Zed's reusable Rules Library.","Flat layout only: skills must be direct children of the skills root; nested folders are not discovered.","Project-local skills only load from trusted worktrees; a project-local skill overrides a global skill with the same name.","Live reload: SKILL.md edits take effect immediately without restarting the session.","The total size of all skill names and descriptions is capped at 50KB for the catalog.","Skills can bundle scripts/, references/, and assets/ that the agent loads on demand.","Skills can be shared via self-contained zed://skill links and imported from GitHub .md URLs; a built-in /create-skill skill scaffolds new skills.","Invoking a user-created skill prompts for permission (same flow as tool permissions); built-in skills do not prompt."],"docs":"https://zed.dev/docs/ai/skills"},"rules":{"status":"supported","verified":"2026-07-12","summary":"Always-on instructions via AGENTS.md: a personal global file plus one project instruction file, with compatibility for .rules, .cursorrules, CLAUDE.md, and similar.","files":[{"path":"~/.config/zed/AGENTS.md","scope":"global","format":"markdown","note":"Personal instructions for every project. On Windows: %APPDATA%/Zed/AGENTS.md."},{"path":"AGENTS.md","scope":"project","format":"markdown","note":"Project instructions at the worktree root. First matching compatibility file wins (see notes)."},{"path":".rules","scope":"project","format":"text","note":"Zed-native compatibility instruction file; highest priority in the match order."}],"fields":[],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Project AGENTS.md","language":"markdown","code":"# Project instructions\n\n- Run `cargo test` before committing.\n- Follow the repository's error-handling conventions in src/errors.rs.\n"}],"notes":["Zed's Rules Library was replaced: reusable rules became Skills, always-on rules became Instructions (AGENTS.md).","For project instructions Zed uses the first matching file in this order: .rules, .cursorrules, .windsurfrules, .clinerules, .github/copilot-instructions.md, AGENT.md, AGENTS.md, CLAUDE.md, GEMINI.md.","Project instructions override personal AGENTS.md when they conflict.","Instructions apply to the Zed Agent; External Agents and Terminal Threads read their own native instruction files."],"docs":"https://zed.dev/docs/ai/instructions"},"hooks":{"status":"unsupported","verified":"2026-07-12","summary":"Zed has no lifecycle hook system for the Agent Panel: no user-configurable scripts fire on agent events such as tool use, prompt submit, or session start/end.","files":[],"fields":[],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[],"notes":["Agent lifecycle hooks (custom commands, pre/post tool-use scripts) are open feature requests on the Zed GitHub repo (e.g. issues #57890, #52688) but are not shipped.","The unrelated create_worktree Task hook runs when Zed creates a linked git worktree for parallel agents; it is a workspace task hook, not an agent lifecycle hook."]},"commands":{"status":"partial","verified":"2026-07-12","summary":"Slash commands in the Agent Panel invoke skills by name, plus the built-in /compact. There is no separate custom prompt-template command format; custom commands are authored as skills.","files":[{"path":".agents/skills/<name>/SKILL.md","scope":"project","format":"markdown","note":"Skills double as slash commands; see the skills surface for the full format."},{"path":"~/.agents/skills/<name>/SKILL.md","scope":"global","format":"markdown","note":"Global skills are also available as slash commands in every project."}],"fields":[],"transports":[],"auth":[],"invocation":["/skill-name","/compact","/create-skill"],"events":[],"capabilities":[],"examples":[],"notes":["Typing / in the Agent Panel message editor lists installed skills; selecting one injects the skill's instructions as context.","/compact manually compacts the current Zed Agent thread.","/create-skill invokes the built-in skill-creation skill.","Legacy Text Threads have their own built-in context slash commands (/file, /fetch, /prompt, /now, /diagnostics, /symbols, /tab, /selection, /terminal, /default); these do not work in the modern Agent Panel. See https://zed.dev/docs/ai/text-threads.","User-defined prompt-template command files (e.g. a .zed/commands/ directory) are an open feature request, not a shipped feature."],"docs":"https://zed.dev/docs/ai/skills"},"settings":{"status":"supported","verified":"2026-07-12","summary":"Agent behavior is configured in settings.json under the agent key: tool permissions, profiles, auto-compaction, feature-specific models, and model parameters.","files":[{"path":"~/.config/zed/settings.json","scope":"global","format":"json","key":"agent","note":"macOS/Linux. On Windows: %APPDATA%/Zed/settings.json."},{"path":".zed/settings.json","scope":"project","format":"json","key":"agent","note":"Project settings override user settings for this worktree."}],"fields":[{"name":"tool_permissions.default","type":"\"confirm\" | \"allow\" | \"deny\"","required":false,"description":"Default tool-approval behavior for the Zed Agent. confirm (default) prompts before every tool action."},{"name":"profiles","type":"object","required":false,"description":"Named agent profiles that toggle built-in tools and context servers (e.g. enable_all_context_servers, per-server tools)."},{"name":"auto_compact","type":"{ enabled: boolean, threshold: string | number }","required":false,"description":"Automatic thread compaction. Threshold is a percentage string (\"90%\"), a token count, or a negative remaining-token count."},{"name":"model_parameters","type":"array","required":false,"description":"Temperature overrides per provider, model, or provider/model pair; matching entries are checked last to first."},{"name":"inline_assistant_model","type":"object","required":false,"description":"Model override for the Inline Assistant."},{"name":"commit_message_model","type":"object","required":false,"description":"Model override for Git commit message generation."},{"name":"thread_summary_model","type":"object","required":false,"description":"Model override for thread summaries."},{"name":"subagent_model","type":"object","required":false,"description":"Model override for subagents."},{"name":"commit_message_instructions","type":"string","required":false,"description":"Instructions applied only to generated Git commit messages."}],"transports":[],"auth":[],"invocation":[],"events":[],"capabilities":[],"examples":[{"title":"Auto-compaction and commit message instructions","language":"json","code":"{\n  \"agent\": {\n    \"auto_compact\": {\n      \"enabled\": true,\n      \"threshold\": \"90%\"\n    },\n    \"commit_message_instructions\": \"Use the Conventional Commits format: <type>(<scope>): <description>.\"\n  }\n}\n"}],"notes":["The Settings Editor (agent: open settings) exposes LLM providers, External Agents, and MCP servers; zed: open settings file opens the raw JSON.","MCP servers live in the same settings.json under the context_servers key (see the mcp surface).","In Zed v0.224.0+ tool approval is controlled by agent.tool_permissions.default; earlier versions used the agent.always_allow_tool_actions boolean (default false).","Per-tool permission rules support MCP tools with the key format mcp:<server>:<tool>."],"docs":"https://zed.dev/docs/ai/agent-settings"}},"behaviors":[]},{"name":"Zencoder","type":"ide-extension","vendor":"Zencoder","homepage":"https://zencoder.ai/","id":"zencoder","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".zencoder/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.zencoder/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[{"name":"allowed-tools","status":"unsupported"},{"name":"context: fork","status":"unsupported"},{"name":"Hooks","status":"unsupported"}],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]},{"name":"Zenflow","type":"ide-extension","vendor":"Zencoder","homepage":"https://zencoder.ai/","id":"zenflow","surfaces":{"skills":{"status":"supported","verified":"2026-06-21","summary":"SKILL.md skills following the open Agent Skills standard.","files":[{"path":".zencoder/skills/<name>/SKILL.md","scope":"project","format":"markdown"},{"path":"~/.zencoder/skills/<name>/SKILL.md","scope":"global","format":"markdown"}],"fields":[{"name":"name","type":"string","required":true,"description":"Skill identifier (required by the Agent Skills standard)."},{"name":"description","type":"string","required":true,"description":"What the skill does and when to use it."}],"transports":[],"auth":[],"invocation":["/skill-name"],"events":[],"capabilities":[],"examples":[],"notes":["Skill discovery paths from the open skills CLI (vercel-labs/skills)."]}},"behaviors":[]}]}