| name | Claude Code Framework |
| description | Authoritative reference for how Claude Code itself works AND how to build for it — CLAUDE.md memory, custom slash commands, subagents, skills, hooks, MCP servers, settings precedence, permissions, plan mode, CLI/headless/CI, worktrees, and multi-platform surfaces. Use when authoring or debugging a plugin component (command/agent/skill/hook), wiring an MCP server, choosing frontmatter fields, configuring settings.json or permissions, figuring out why an agent/skill won't auto-trigger, running headless/CI or worktree-parallel sessions, or answering "how does Claude Code X work / how should I structure this for Claude Code."
|
| when_to_use | Triggers: "write/review a CLAUDE.md", "add a slash command", "create a subagent/skill/hook", "wire an MCP server", "configure settings.json / permissions / allowedTools", "why won't my agent or skill trigger", "run Claude Code in CI / headless", "git worktree parallel sessions", "context is bloating / clear context", "TDD workflow", "how does Claude Code <feature> work".
|
| disable-model-invocation | true |
| allowed-tools | Read, Grep, Glob |
Claude Code Framework — Reference & Decision Guide
Authoritative reference for Claude Code's behavior and for authoring its extensions.
Ground every claim to current behavior at https://code.claude.com/docs. Model IDs,
pricing, and "as of version X" specifics rot — re-verify against live docs before relying
on them. This file is the index; depth lives in the linked reference files.
CORE OPERATING RULES
Apply these directly when working with Claude Code on real tasks:
- Plan before code on anything non-trivial. Use Plan Mode (or a written plan) to agree
on approach before edits. Discussion-then-code catches wrong turns cheaply.
- Keep CLAUDE.md lean and failure-focused. Document what Claude gets wrong in this
repo (build quirks, forbidden paths, naming rules), not what it does right. ~100–200
lines; past ~40k chars Claude Code warns performance degrades — move depth into
skills/docs and link them.
- Clear context aggressively.
/clear between unrelated tasks; provide only files
relevant to the current task. Don't let one session accumulate stale context.
- TDD as guardrail. Write/keep failing tests first, let Claude iterate to green. Tests
are the objective signal that beats "looks done."
- Split write vs. review contexts. Have a fresh context or subagent verify code the
first context wrote — a single context rationalizes its own mistakes.
- Checkpoints ≠ version control.
/rewind (or double-Esc) restores Claude's edits and
conversation, but NOT your bash side effects (migrations, rm, pushes). Commit real
milestones to git.
EXTENDING CLAUDE CODE — PICK THE RIGHT SURFACE
| You want to… | Use | Lives in |
|---|
Reusable prompt shortcut (/thing) | Slash command | .claude/commands/*.md |
| Specialized persona with its own context/tools | Subagent | .claude/agents/*.md |
| Auto-loaded domain knowledge (model-triggered) | Skill | .claude/skills/*/SKILL.md |
| Deterministic action on an event (lint, guard, sync) | Hook | settings.json + script |
| External tool/data integration | MCP server | .mcp.json / claude mcp add |
| Repo-wide standing context | CLAUDE.md | ./CLAUDE.md, ~/.claude/CLAUDE.md |
Rule of thumb: command = you invoke on demand; skill = Claude pulls it in when
relevant; agent = isolated context for a bounded job; hook = the harness runs it
(not the model), so it's the only way to guarantee an automated behavior.
Frontmatter field tables + authoring patterns: reference/authoring.md
1. CORE CAPABILITIES
Claude Code is an autonomous coding agent in your terminal: feature implementation
(plan → implement → verify), bug fixing, codebase navigation, and task automation.
cd your-project && claude
claude "explain this project"
claude -p "prompt text"
claude -c
claude --resume <session-id>
claude mcp serve
2. MCP INTEGRATION (Quick Reference)
MCP is an open standard connecting Claude Code to external tools, databases, and APIs.
claude mcp add --transport http <name> <url>
claude mcp add --transport sse <name> <url>
claude mcp add --transport stdio <name> -- <cmd>
claude mcp add-json <name> '{"type":"http","url":"..."}'
claude mcp add-from-claude-desktop
claude mcp list / get <name> / remove <name>
/mcp
Scope & precedence
| Scope | File | When |
|---|
local (default) | ~/.claude.json | Current project only |
project | .mcp.json | Team-shared, version controlled |
user | ~/.claude.json | All projects |
Precedence: Local > Project > User — a same-named local server shadows a project one.
In-session usage
@github:issue://123
/mcp__github__list_prs
/mcp__jira__create_issue "Bug" high
Context tuning
ENABLE_TOOL_SEARCH=auto:5 claude
ENABLE_TOOL_SEARCH=true claude
ENABLE_TOOL_SEARCH=false claude
export MAX_MCP_OUTPUT_TOKENS=50000
Full MCP details (transports, @-mentions, enterprise managed-mcp.json, popular
integrations): reference.md
3. CLAUDE.MD — PROJECT MEMORY
Auto-loaded at session start. Commit it so the whole team benefits.
- Import other files:
@path/to/import (relative to the importing file).
CLAUDE.local.md — auto-gitignored, private per-machine overrides.
.claude/rules/*.md — auto-loaded as project memory; support paths globs for
file-scoped rules.
- Hierarchy:
~/.claude/CLAUDE.md (global) → ./CLAUDE.md (project) → subdirectory
CLAUDE.md (component-specific).
/init
/memory
Keep it failure-focused, lean (~100–200 lines, hard ceiling ~40k chars), and iterated like
a prompt: add the one line that prevents a repeated mistake; delete rules that stop mattering.
4. SKILLS SYSTEM
Skills are context-aware capabilities that activate on task context — pure LLM reasoning,
no embeddings or classifiers.
- Discovery — session start scans available skills (~100 tokens of YAML metadata each).
- Contextual activation — Claude decides which to invoke from the
description.
- Dynamic loading — full skill body loads only when needed.
Locations: ~/.claude/skills/ (user), .claude/skills/ (project), plugin-provided.
name: skill-name
description: When this skill is relevant...
disable-model-invocation: true
user-invocable: false
argument-hint: "[args]"
allowed-tools: Read, Grep
context: fork
model: sonnet
Progressive disclosure: keep SKILL.md under ~500 lines; move detail into sibling
reference/*.md and link it (body content is recurring per-turn token cost).
Skill/agent/command authoring + field tables: reference/authoring.md.
Ready-to-copy skill templates: patterns.md.
5. PLAN MODE
Use plan mode for complex features before any implementation.
> "Build a task management API with user authentication"
> "Use TypeScript instead of JavaScript"
> "Looks good, proceed"
Catch issues in the planning phase, not during debugging — like aligning with a senior
architect before execution.
6. UNIX PHILOSOPHY — COMPOSABILITY
tail -f app.log | claude -p "Slack me if you see any anomalies"
git diff main | claude -p "Review changes and generate a commit message"
cat metrics.csv | claude -p "Identify the slowest endpoints"
find . -name "*.py" | xargs -I {} claude -p "Add type hints to {}"
7. SETTINGS & CONFIGURATION
Hierarchy (highest → lowest precedence)
- Organizational policies (managed settings — system-level
managed-mcp.json)
.claude/settings.json — team conventions (project root, version controlled)
.claude/settings.local.json — machine-specific (project root, gitignored)
~/.claude/settings.json / ~/.claude.json — user-level global
{
"permissions": {
"allow": ["Read", "Write(src/**)", "Bash(git *)", "Bash(npm *)"],
"deny": ["Read(**/.env*)", "Read(**/*.key)", "Bash(rm *)", "Bash(sudo *)"]
},
"env": { "MAX_MCP_OUTPUT_TOKENS": "50000", "ENABLE_TOOL_SEARCH": "auto:5" }
}
Permissions: deny overrides allow; patterns are literal globs — Read(.env*) does
NOT match config/.env, use Read(**/.env*). Scope Bash narrowly (Bash(git *)), never
blanket Bash. Don't pin a dated "model" in a committed settings file — it freezes the
team on a rotting model; omit to inherit or use /model at runtime.
settings tiers, hooks wiring, and the full permissions model: reference.md.
8. SUBAGENTS & PARALLEL EXECUTION
> "Spawn a subagent to write unit tests while you implement the API endpoints"
- Desktop app / CLI: multiple sessions via git worktrees (or agent
isolation: worktree).
- Web interface: built-in parallel task execution.
tools: Task in agent frontmatter enables spawning subagents.
forge-plugin rule: leaf workers (testing, security, docs) OMIT Task; orchestrators
(planner, builder, guardian, detective, orchestrator) INCLUDE Task.
Headless/CI, worktree parallelism, multi-Claude verification: reference/workflows.md.
9. MULTI-PLATFORM
| Platform | Notes |
|---|
| Terminal (CLI) | claude in any terminal — primary interface |
Web (claude.ai/code) | No local setup, parallel tasks, built-in diff view |
| Desktop App | Visual diff, parallel sessions via git worktrees |
| VS Code Extension | Inline diffs, @-mentions, plan review UI |
| JetBrains Plugin | IntelliJ/PyCharm/WebStorm support |
| GitHub Actions | anthropic/claude-code-action@v1 |
QUICK REFERENCE CARD
claude / claude -p "prompt" / claude -c / claude --resume <id>
claude mcp list | add <config> | serve
/mcp
/memory
/rewind
@<file>
CLAUDE.md
.mcp.json
.claude/settings.json
.claude/settings.local.json
~/.claude.json
WORKED EXAMPLE — an agent that won't auto-trigger
Symptom: you built .claude/agents/db-migrator.md but Claude never delegates to it.
- Read the frontmatter
name. name: DB_Migrator → invalid (uppercase + underscore).
Rename to db-migrator. The name is the wiring key, not a label.
- Read the
description. "Handles database stuff." → no trigger signal. Rewrite:
"Plans and applies database schema migrations with rollback. Use when the user adds a
column, changes a table, writes an Alembic/Prisma migration, or mentions schema drift."
Add a realistic <example> block.
- Check for
disable-model-invocation: true on any skill/agent you expected to preload
— it removes the description from context, so auto-trigger can never fire. Remove it if
you need routing.
- Confirm
color is in the allowed palette, reload the session, and test with a prompt
that matches the new trigger phrases.
GOTCHAS
Real, non-obvious traps — verified against this plugin's own source (agents/*.md,
servers/governance-mcp/) and current Claude Code behavior.
- A weak
description is the #1 reason an agent/skill won't fire. Routing is decided
purely from description text. Write ". Use when ." with the key case first; <example> blocks in agent descriptions sharpen delegation.
disable-model-invocation: true removes the description from context entirely and
blocks subagent preload — it's not merely "manual-only." This skill uses it; it's reachable
only by explicit invocation. Never set it on a skill you want Claude to auto-route to.
- Agent
name must be lowercase-hyphens, ≤64 chars — no uppercase, no underscores. A
display-cased name (NXTG-CEO-LOOP) silently fails discovery; the fix was nxtg-ceo-loop.
color accepts ONLY purple|cyan|green|orange|blue|red. Any other value is ignored.
- Leaf-worker agents must OMIT
Task; orchestrators must INCLUDE it. Give Task to a
leaf and you invite unintended recursion; withhold it from an orchestrator and delegation
silently no-ops.
- Invalid frontmatter fields are silently dropped, not errored.
shortname, avatar,
whenToUse (camelCase), exampleQueries, when_to_use on an agent look accepted but do
nothing. Verify names against the valid set; never assume a field "took."
model in an agent/skill overrides the session model — an agent pinned to sonnet
will NOT inherit an Opus session. Omit to inherit; set only for a deliberately fixed tier.
- Hooks are the harness, not the model — and can block. A
PreToolUse hook exiting code
2 denies the tool call (stderr goes to Claude); advisory hooks must exit 0. A slow
SessionStart/UserPromptSubmit hook delays every turn — set a timeout.
- Use
${CLAUDE_PLUGIN_ROOT}, never absolute paths, in plugin command/hook bodies.
Absolute paths break when the plugin installs to a different machine/location.
- An MCP entry file that runs
server.connect() at import time breaks test harnesses.
governance-mcp/index.mjs guards it ()
and dropped its shebang because the shebang blocked vitest's ESM
transform. Gate the transport connect behind an env flag if you import the module in tests.
LIMITATIONS & BEST PRACTICES
- Use
.claudeignore to exclude large irrelevant files from context.
- Never commit API keys to
.mcp.json — use environment variables.
- Local stdio servers are faster than remote HTTP/SSE; audit third-party MCP servers first.
- Keep MCP Tool Search's
auto:N threshold consistent with the ENABLE_TOOL_SEARCH value.
- Enterprise: use
managed-mcp.json for exclusive policy control.
ADDITIONAL RESOURCES
- reference.md — MCP transports/
@-mentions/enterprise, settings & hooks
schema, session management, install, platform integration, practical examples.
- reference/authoring.md — commands, subagents, skills, MCP:
authoring patterns + complete valid-frontmatter field tables.
- reference/workflows.md — CLI flags, headless/CI automation, git
worktree parallelism, checklist-driven and multi-Claude verification, checkpoints & rewind.
- patterns.md — copy-ready CLAUDE.md / rules / skill / agent / hook / MCP templates.