Skip to content
Back to skills

Claude Code Framework

ASecurity

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 ...

  • 5 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 6, 2026
ai-agentsjavascripttypescriptgojavabashnodetestingdebugginggitapi

Works with

  • claude code
  • terminal
  • cli
  • api
  • mcp

Security analysis

A100/100

Pro scans all 5 files and shows the line behind each finding

Scanned September 6, 2026

npx -y skills add nxtg-ai/forge-plugin --skill claude-code-framework --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Claude Code Framework?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Claude Code Framework
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/nxtg-ai-claude-code-framework/badge)](https://www.skillsdirectory.com/skills/nxtg-ai-claude-code-framework)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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:

1. **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.
2. **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.
3. **Clear context aggressively.** `/clear` between unrelated tasks; provide only files
   relevant to the current task. Don't let one session accumulate stale context.
4. **TDD as guardrail.** Write/keep failing tests first, let Claude iterate to green. Tests
   are the objective signal that beats "looks done."
5. **Split write vs. review contexts.** Have a fresh context or subagent verify code the
   first context wrote — a single context rationalizes its own mistakes.
6. **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](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.

```bash
cd your-project && claude      # Interactive session
claude "explain this project"  # Start with an initial prompt
claude -p "prompt text"        # Print mode: query once, exit (scriptable/pipeable)
claude -c                      # Continue most recent conversation
claude --resume <session-id>   # Resume a specific session
claude mcp serve               # Run Claude Code itself as an MCP server
```

---

## 2. MCP INTEGRATION (Quick Reference)

MCP is an open standard connecting Claude Code to external tools, databases, and APIs.

```bash
claude mcp add --transport http  <name> <url>              # HTTP remote
claude mcp add --transport sse   <name> <url>              # Server-Sent Events
claude mcp add --transport stdio <name> -- <cmd>           # Local process (fastest)
claude mcp add-json <name> '{"type":"http","url":"..."}'   # From JSON
claude mcp add-from-claude-desktop                         # Import from Desktop
claude mcp list / get <name> / remove <name>               # Manage
/mcp                                                       # Status (in-session)
```

### 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

```bash
@github:issue://123                 # Reference an MCP resource
/mcp__github__list_prs              # Execute an MCP prompt (no args)
/mcp__jira__create_issue "Bug" high # Execute with args
```

### Context tuning

```bash
ENABLE_TOOL_SEARCH=auto:5 claude    # Dynamic tool loading — fires at 5% of context
ENABLE_TOOL_SEARCH=true  claude     # Always dynamic
ENABLE_TOOL_SEARCH=false claude     # Load all tools upfront
export MAX_MCP_OUTPUT_TOKENS=50000  # Warn at 10k; default max 25k tokens
```

> Full MCP details (transports, `@`-mentions, enterprise `managed-mcp.json`, popular
> integrations): [reference.md](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).

```bash
/init      # Bootstrap a CLAUDE.md by analyzing the project
/memory    # Open and edit memory files in your editor (in-session)
```

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.

1. **Discovery** — session start scans available skills (~100 tokens of YAML metadata each).
2. **Contextual activation** — Claude decides which to invoke from the `description`.
3. **Dynamic loading** — full skill body loads only when needed.

Locations: `~/.claude/skills/` (user), `.claude/skills/` (project), plugin-provided.

```yaml
name: skill-name
description: When this skill is relevant...    # Auto-trigger matching; put "Use when…" first
disable-model-invocation: true                 # Manual-only: removes description from context
user-invocable: false                          # Hide from / menu but keep in context
argument-hint: "[args]"                         # Autocomplete hint
allowed-tools: Read, Grep                      # Pre-approve tools the procedure runs
context: fork                                   # Run in an isolated subagent context
model: sonnet                                   # Per-skill model override
```

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](reference/authoring.md).
> Ready-to-copy skill templates: [patterns.md](patterns.md).

---

## 5. PLAN MODE

Use plan mode for complex features before any implementation.

```bash
> "Build a task management API with user authentication"
# Claude generates: DB schema, endpoint structure, auth flow, testing strategy
> "Use TypeScript instead of JavaScript"   # Refine the plan
> "Looks good, proceed"                     # Approve → Claude implements
```

Catch issues in the planning phase, not during debugging — like aligning with a senior
architect before execution.

---

## 6. UNIX PHILOSOPHY — COMPOSABILITY

```bash
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)

1. Organizational policies (managed settings — system-level `managed-mcp.json`)
2. `.claude/settings.json` — team conventions (project root, version controlled)
3. `.claude/settings.local.json` — machine-specific (project root, gitignored)
4. `~/.claude/settings.json` / `~/.claude.json` — user-level global

```json
{
  "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](reference.md).

---

## 8. SUBAGENTS & PARALLEL EXECUTION

```bash
> "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](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

```bash
# CLI
claude / claude -p "prompt" / claude -c / claude --resume <id>
claude mcp list | add <config> | serve

# In-session
/mcp        # MCP status        /init      # bootstrap CLAUDE.md
/memory     # edit memory       /clear     # drop context between tasks
/rewind     # restore edits (NOT bash side effects)
@<file>     # reference a file   @<mcp-resource>  # reference an MCP resource

# Config files
CLAUDE.md                     # Project context (auto-loaded)
.mcp.json                     # Project MCP servers (version controlled)
.claude/settings.json         # Team settings
.claude/settings.local.json   # Local overrides (gitignored)
~/.claude.json                # User config
```

---

## WORKED EXAMPLE — an agent that won't auto-trigger

Symptom: you built `.claude/agents/db-migrator.md` but Claude never delegates to it.

1. **Read the frontmatter `name`.** `name: DB_Migrator` → invalid (uppercase + underscore).
   Rename to `db-migrator`. The `name` is the wiring key, not a label.
2. **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.
3. **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.
4. **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 "<what it does>. Use when <concrete phrases users
  say>." 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 (`if (!process.env.FORGE_TEST_MODE) server.connect(...)`)
  and dropped its `#!/usr/bin/env node` shebang because the shebang blocked vitest's ESM
  transform. Gate the transport connect behind an env flag if you import the module in tests.
- **`allowed-tools` pre-approves; it does NOT restrict.** It only suppresses permission
  prompts. To actually limit reach, use `permissions.deny` / `disallowedTools` in settings.
- **Pinned model IDs and version numbers rot.** Don't hardcode `claude-sonnet-4-...` in a
  committed `settings.json` unless you mean to; treat any "as of version X" claim as needing
  re-verification against live docs.
- **CLAUDE.md hard ceiling is ~40k characters.** Past it Claude Code warns and recall
  degrades. Move deep detail into `.claude/rules/*.md` (path-scoped) or linked docs.
- **Many skills can exceed the ~15k-char command budget** and get their descriptions dropped
  from context. Raise it: `export SLASH_COMMAND_TOOL_CHAR_BUDGET=30000`.

---

## 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](reference.md) — MCP transports/`@`-mentions/enterprise, settings & hooks
  schema, session management, install, platform integration, practical examples.
- [reference/authoring.md](reference/authoring.md) — commands, subagents, skills, MCP:
  authoring patterns + complete valid-frontmatter field tables.
- [reference/workflows.md](reference/workflows.md) — CLI flags, headless/CI automation, git
  worktree parallelism, checklist-driven and multi-Claude verification, checkpoints & rewind.
- [patterns.md](patterns.md) — copy-ready CLAUDE.md / rules / skill / agent / hook / MCP templates.

| Doc | URL |
|-----|-----|
| Overview | https://code.claude.com/docs/en/overview |
| MCP | https://code.claude.com/docs/en/mcp |
| Skills | https://code.claude.com/docs/en/skills |
| Hooks | https://code.claude.com/docs/en/hooks |
| Settings | https://code.claude.com/docs/en/settings |
| Best Practices | https://www.anthropic.com/engineering/claude-code-best-practices |

Files in this skill

  • SKILL.md17.3 KB
  • patterns.md15.5 KB
  • reference.md11.7 KB
  • reference/authoring.md5.1 KB
  • reference/workflows.md4.8 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…