Platform Matrix
Last verified: 2026-09-29. This is the single source of truth for paths, fields, and config shapes in this guide.
~ means your home directory (C:\Users\<you> on Windows). Always write paths inside skills and configs with forward slashes.
Skills
Section titled “Skills”| Claude Code | Claude.ai / Desktop | Claude API | Cursor | |
|---|---|---|---|---|
| Project location | .claude/skills/<name>/SKILL.md |
n/a | n/a | .cursor/skills/, .agents/skills/, and also .claude/skills/, .codex/skills/ |
| Personal location | ~/.claude/skills/<name>/ |
Uploaded as a ZIP in Settings → Capabilities | Uploaded via the Skills API | ~/.cursor/skills/, ~/.agents/skills/, and also ~/.claude/skills/, ~/.codex/skills/ |
| Plugins | Yes (plugin skills/ folder) |
n/a | n/a | Yes (Cursor plugins) |
| Auto-invocation | From description |
From description |
From description (needs the code execution tool) |
From description |
| Manual invocation | /skill-name |
Ask for it by name | n/a | /skill-name, or as a Custom Mode for a whole session |
| Reserved dir | none | none | none | ~/.cursor/skills-cursor/ (Cursor’s built-ins; don’t write here) |
Cross-platform tip: a skill in .claude/skills/ (project) or ~/.claude/skills/ (personal) is picked up by both Claude Code and Cursor. .agents/skills/ is the vendor-neutral path from the open Agent Skills standard.
SKILL.md frontmatter
Section titled “SKILL.md frontmatter”| Field | Spec (all platforms) | Claude Code | Cursor | Notes |
|---|---|---|---|---|
name |
Required | ✓ | ✓ (must match the folder name) | ≤64 chars, a-z 0-9 -; must not contain anthropic or claude on Anthropic surfaces |
description |
Required | ✓ | ✓ | ≤1024 chars, no XML tags; say what and when |
disable-model-invocation |
✓ | ✓ | true = only runs when invoked explicitly |
|
allowed-tools |
Optional (experimental in spec) | ✓ | – | Tools usable without asking while the skill is active |
argument-hint |
✓ | – | Hint shown for /skill-name <args> |
|
model |
✓ | – | Override the model while the skill runs | |
paths (legacy globs) |
– | ✓ | Only offer the skill for matching files | |
license, compatibility, metadata |
Optional | ✓ | metadata ✓ |
Free-form; safe everywhere |
icon, color |
– | ✓ | Custom Mode badge |
Unknown fields are ignored by platforms that don’t support them, so you can safely combine fields in one file.
Subagents (file-based)
Section titled “Subagents (file-based)”| Claude Code | Cursor | |
|---|---|---|
| Project location | .claude/agents/<name>.md |
.cursor/agents/, and also .claude/agents/, .codex/agents/ |
| Personal location | ~/.claude/agents/ |
~/.cursor/agents/, and also ~/.claude/agents/, ~/.codex/agents/ |
| Precedence | Project over user | Project over user; .cursor/ over .claude/ and .codex/ |
| Manage | /agents command |
Customize panel, or /create-subagent |
| Invoke | Automatic (from description) or “use the X subagent” / @-mention |
Automatic, /name, or “use the X subagent” |
| Built-ins | Explore, Plan, general-purpose |
explore, bash, browser |
| Nesting | Subagents cannot spawn subagents | One level deep |
Subagent frontmatter
Section titled “Subagent frontmatter”| Field | Claude Code | Cursor | Notes |
|---|---|---|---|
name |
✓ required | ✓ (defaults to filename) | lowercase + hyphens |
description |
✓ required | ✓ | Drives delegation. “Use proactively when…” encourages automatic use |
tools |
✓ comma-separated allowlist (omit to inherit all) | ✗ not supported: subagents inherit all parent tools | Use readonly in Cursor to restrict |
model |
sonnet, opus, haiku, inherit, or a model ID |
inherit or a model ID (options in brackets, e.g. [effort=high]) |
|
readonly |
– | ✓ blocks edits and state-changing shell | |
is_background |
– | ✓ doesn’t block the parent | |
permissionMode, skills, color |
✓ | – | Claude Code extras |
Cross-platform tip: a subagent in .claude/agents/ with only name, description, and model: inherit works in both. If you add tools:, Claude Code honours it and Cursor ignores it, so don’t rely on tools for safety in Cursor.
Programmatic agents (SDKs & CLIs)
Section titled “Programmatic agents (SDKs & CLIs)”| Claude | Cursor | |
|---|---|---|
| CLI (headless) | claude -p "prompt" |
agent -p "prompt" --output-format json |
| TypeScript SDK | @anthropic-ai/claude-agent-sdk |
@cursor/sdk (Node ≥ 22.13) |
| Python SDK | claude-agent-sdk (import claude_agent_sdk) |
cursor-sdk (import cursor_sdk, Python ≥ 3.10) |
| Auth | ANTHROPIC_API_KEY (or Bedrock/Vertex env) |
CURSOR_API_KEY |
| Loads project config | Only with settingSources (e.g. ["project"]) |
Local: only with local.settingSources; Cloud: always |
| Cloud / remote runs | Your own infrastructure | Cursor Cloud Agents (SDK or REST API) |
MCP clients
Section titled “MCP clients”| Cursor | Claude Code | Claude Desktop | Claude.ai (web) | |
|---|---|---|---|---|
| Project config | .cursor/mcp.json |
.mcp.json (project root) |
n/a | n/a |
| User config | ~/.cursor/mcp.json |
~/.claude.json (via claude mcp add --scope user) |
%APPDATA%\Claude\claude_desktop_config.json (Win) / ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) |
Settings → Connectors |
| Add via CLI/UI | Customize → MCPs | claude mcp add |
Settings → Developer → Edit Config, or install a .mcpb bundle |
“Add custom connector” (remote URL only) |
| Transports | stdio, SSE, Streamable HTTP | stdio, SSE, HTTP | stdio (local), remote via connectors | Remote (Streamable HTTP / SSE) only |
| Env interpolation | ${env:NAME}, ${workspaceFolder}, ${userHome} |
${NAME}, ${NAME:-default} in .mcp.json |
Literal values in env |
n/a |
| OAuth | Dynamic + static (auth object) |
Yes (/mcp to authenticate) |
Via connectors | Yes |
| Logs | Output panel → “MCP Logs” | claude --debug, /mcp |
%APPDATA%\Claude\logs\mcp*.log |
n/a |
All of the file-based configs use the same top-level key:
{ "mcpServers": { "<server-name>": { "command": "...", "args": [] } } }MCP SDKs
Section titled “MCP SDKs”| Current (stable) | Previous | |
|---|---|---|
| Spec | 2026-07-28 | 2025-06-18 / 2025-11-25. v2 servers still serve 2025-era initialize openings by default |
| TypeScript | @modelcontextprotocol/server 2.x (plus /client, /express, /hono, /fastify, /node), Zod 4 |
@modelcontextprotocol/sdk 1.x, Zod 3 |
| Python | mcp 2.x: from mcp.server.mcpserver import MCPServer |
mcp 1.x: from mcp.server.fastmcp import FastMCP |
| Inspector | npx @modelcontextprotocol/inspector · Python: mcp dev server.py |
same |
Both templates in 03-mcp/templates/ are tested against the current versions by npm run qa:templates.
Rules and memory (for context)
Section titled “Rules and memory (for context)”| Claude Code | Cursor | |
|---|---|---|
| Project instructions | CLAUDE.md (root and subfolders) |
AGENTS.md (root and subfolders), .cursor/rules/*.mdc |
| Personal | ~/.claude/CLAUDE.md |
User Rules (Customize → Rules) |
| Rule types | n/a | Always / file globs / intelligent (description) / manual (@rule) |
Hooks (for context)
Section titled “Hooks (for context)”| Claude Code | Cursor | |
|---|---|---|
| Location | .claude/settings.json → hooks |
.cursor/hooks.json, ~/.cursor/hooks.json |
| Key events | PreToolUse, PostToolUse, UserPromptSubmit, Stop, SubagentStop, SessionStart |
preToolUse, postToolUse, beforeShellExecution, beforeMCPExecution, afterFileEdit, subagentStart, stop, … |
| Block an action | Exit code 2 |
Exit code 2 |
Cursor can also load Claude Code hooks.
Official sources
Section titled “Official sources”Re-verify against these when updating the matrix:
- Agent Skills open standard: https://agentskills.io
- Claude Code docs (skills, subagents, MCP, hooks, SDK): https://docs.claude.com/en/docs/claude-code/overview
- Claude Agent Skills (API and best practices): https://docs.claude.com/en/docs/agents-and-tools/agent-skills/overview
- Claude Agent SDK: https://docs.claude.com/en/api/agent-sdk/overview
- Cursor docs: Skills · Subagents · MCP · Rules · Hooks · CLI · TypeScript SDK · Python SDK
- Model Context Protocol spec and SDKs: https://modelcontextprotocol.io
- MCP Inspector: https://github.com/modelcontextprotocol/inspector