diff --git a/CHANGELOG.md b/CHANGELOG.md
index ca69cb3..a32acf6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Added
+- **MCP Server: 3 new tools** — compare_versions, get_threat/list_threats, search_examples
+ - `compare_versions(from, to?)` — diff entre deux versions Claude Code CLI : toutes les releases dans la plage, highlights agrégés, breaking changes agrégés
+ - `get_threat(id)` — lookup CVE (ex: `CVE-2025-53109`) ou technique d'attaque (ex: `T001`) depuis la threat database v2.4.0
+ - `list_threats(category?)` — browse la threat-db : résumé global avec counts (sans catégorie) ou liste détaillée par section (`cves`, `authors`, `skills`, `techniques`, `mitigations`, `sources`)
+ - `search_examples(query, limit?)` — recherche sémantique dans les 175 templates par intention (ex: `"hook lint"`, `"agent code review"`) — complémentaire à `get_example` (nom exact) et `list_examples` (catégorie)
+ - `mcp-server/IDEAS.md` — futures idées documentées : `get_quiz`, `get_methodology`, `get_workflow`, resource `diff`, prompt `security-review`
+ - Total : 8 tools → 12 tools (+ 3 resources + 1 prompt)
+
- **Terminal Personalization Settings** — documentation `spinnerVerbs` + `spinnerTipsOverride` dans `guide/ultimate-guide.md` §3.3 Settings & Permissions
- Nouvelle section "Terminal Personalization Settings" (ligne 4978) : exemples JSON pour `spinnerVerbs` (mode replace/add) et `spinnerTipsOverride` (avec `excludeDefault: true`)
- `settings.json` available keys enrichi : ajout `spinnerVerbs`, `spinnerTipsOverride`, `plansDirectory`, `enableAllProjectMcpServers`
diff --git a/README.md b/README.md
index 9a47096..f647c4d 100644
--- a/README.md
+++ b/README.md
@@ -10,6 +10,7 @@
+
@@ -93,40 +94,39 @@ Both guides serve different needs. Choose based on your priority.
**Quickest path**: [Cheat Sheet](./guide/cheatsheet.md) — 1 printable page with daily essentials
-**Interactive onboarding** (no clone needed):
+**Interactive onboarding** (no setup needed):
```bash
claude "Fetch and follow the onboarding instructions from: https://raw.githubusercontent.com/FlorianBruniaux/claude-code-ultimate-guide/main/tools/onboarding-prompt.md"
```
**Browse directly**: [Full Guide](./guide/ultimate-guide.md) | [Visual Diagrams](./guide/diagrams/) | [Examples](./examples/) | [Quiz](./quiz/)
-
-Prerequisites & Minimal CLAUDE.md Template
+---
-**Prerequisites**: Node.js 18+ | [Anthropic API key](https://console.anthropic.com/)
+## 🔌 MCP Server — Use the guide from any Claude Code session
-```markdown
-# Project: [NAME]
+No cloning needed. Add to `~/.claude.json` and ask questions directly from any session:
-## Tech Stack
-- Language: [e.g., TypeScript]
-- Framework: [e.g., Next.js 14]
-- Testing: [e.g., Vitest]
-
-## Commands
-- Build: `npm run build`
-- Test: `npm test`
-- Lint: `npm run lint`
-
-## Rules
-- Run tests before marking tasks complete
-- Follow existing code patterns
-- Keep commits atomic and conventional
+```json
+{
+ "mcpServers": {
+ "claude-code-guide": {
+ "type": "stdio",
+ "command": "npx",
+ "args": ["-y", "claude-code-ultimate-guide-mcp"]
+ }
+ }
+}
```
-Save as `CLAUDE.md` in your project root. Claude reads it automatically.
+12 tools: `search_guide`, `read_section`, `get_cheatsheet`, `get_digest`, `get_example`, `list_examples`, `get_release`, `get_changelog`, `list_topics`, `compare_versions`, `get_threat`, `list_threats`, `search_examples` — plus 8 slash commands `/ccguide:*` and a Haiku agent.
-
+**Onboarding one-liner** (once MCP is configured):
+```bash
+claude "Use the claude-code-guide MCP server. Activate the claude-code-expert prompt, then run a personalized onboarding: ask me 3 questions about my goal, experience level, and preferred tone — then build a custom learning path using search_guide and read_section to navigate the guide with live source links."
+```
+
+→ [MCP Server README](./mcp-server/README.md)
---
diff --git a/guide/architecture.md b/guide/architecture.md
index ae880f2..4cadbd1 100644
--- a/guide/architecture.md
+++ b/guide/architecture.md
@@ -277,6 +277,7 @@ Beyond the 8 core tools, Claude Code can leverage:
- **Context7**: Official library documentation lookup
- **Sequential**: Structured multi-step reasoning
- **Playwright**: Browser automation and E2E testing
+- **claude-code-ultimate-guide**: 12 tools — guide search, release tracking, `compare_versions`, security threat lookup (`get_threat`, `list_threats` with 28 CVEs + 655 malicious skills), template search (`search_examples`) — `npx -y claude-code-ultimate-guide-mcp`
**Community Plugins**:
- **ast-grep**: AST-based structural code search (explicit invocation)
diff --git a/mcp-server/IDEAS.md b/mcp-server/IDEAS.md
new file mode 100644
index 0000000..61bfc0e
--- /dev/null
+++ b/mcp-server/IDEAS.md
@@ -0,0 +1,78 @@
+# MCP Server — Future Ideas
+
+Tracked ideas that didn't make it into the current release. Implementation complexity varies; all are technically feasible with existing data.
+
+---
+
+## Tools
+
+### `get_quiz(topic?, count?)`
+
+Interactive quiz from `machine-readable/questions.json` (274 questions, already used by the landing site).
+
+- `topic` (optional string): filter by topic (e.g. "hooks", "agents", "mcp")
+- `count` (optional number, default 5, max 20): number of questions to return
+- Returns questions with options, correct answer, and explanation
+- Useful for learning validation, onboarding, and teaching workflows
+
+**Data**: `machine-readable/questions.json` — not currently bundled in the package; would need bundling or GitHub fetch.
+
+---
+
+### `get_methodology(name)`
+
+Step-by-step workflows for TDD, SDD, BDD from `guide/methodologies.md`.
+
+- `name` (string): `tdd | sdd | bdd | all`
+- Returns the workflow steps, when to use it, and example commands
+- Useful for agents doing test-driven development or spec-driven design
+
+**Data**: `guide/methodologies.md` — fetched on demand (already in section-reader infrastructure).
+
+---
+
+### `get_workflow(name)`
+
+Step-by-step workflows from `guide/workflows/` directory.
+
+- `name` (string): partial name match (e.g. "code-review", "refactor", "debug")
+- Returns the workflow with steps, triggers, and example prompts
+- Could list available workflows when no name provided
+
+**Data**: `guide/workflows/*.md` — fetched on demand.
+
+---
+
+## Resources
+
+### `claude-code-guide://diff`
+
+Shows what changed between the bundled YAML index version and the live GitHub version.
+
+- Fetch live `machine-readable/reference.yaml` from GitHub
+- Diff against bundled version (entry count, new keys, changed values)
+- Helps users know when the package is stale vs. the guide
+
+**Complexity**: Medium — requires async resource handler + structured diffing.
+
+---
+
+## Prompts
+
+### `security-review`
+
+Dedicated security audit workflow prompt using the threat database.
+
+- Guides the model through: check CVEs → check authors → check skills → check techniques
+- Returns a structured security posture report
+- Reuses `list_threats` and `get_threat` tools internally
+
+**Dependency**: Requires `threats.ts` tools (already implemented in v1.1.0).
+
+---
+
+## Notes
+
+- All ideas use data already in the repo — no new data sources needed
+- `get_quiz` requires bundling `questions.json` (currently not in npm package)
+- `get_methodology` and `get_workflow` are low-effort since section-reader already handles arbitrary file fetching
diff --git a/mcp-server/README.md b/mcp-server/README.md
new file mode 100644
index 0000000..b8602f3
--- /dev/null
+++ b/mcp-server/README.md
@@ -0,0 +1,230 @@
+# claude-code-ultimate-guide-mcp
+
+MCP server for the [Claude Code Ultimate Guide](https://github.com/FlorianBruniaux/claude-code-ultimate-guide) — search, read, and explore 20,000+ lines of documentation directly from Claude Code or any MCP-compatible client.
+
+No need to clone the repo. The guide's structured index is bundled in the package (~130KB compressed), and file content is fetched from GitHub on demand with 24h local cache.
+
+## Installation
+
+### Quick start (npx)
+
+Add to `~/.claude.json` (user-level, all projects):
+
+```json
+{
+ "mcpServers": {
+ "claude-code-guide": {
+ "type": "stdio",
+ "command": "npx",
+ "args": ["-y", "claude-code-ultimate-guide-mcp"]
+ }
+ }
+}
+```
+
+### Global install
+
+```bash
+npm install -g claude-code-ultimate-guide-mcp
+```
+
+```json
+{
+ "mcpServers": {
+ "claude-code-guide": {
+ "type": "stdio",
+ "command": "claude-code-guide-mcp"
+ }
+ }
+}
+```
+
+### Per-project
+
+Add to `.claude/settings.json` at your repo root.
+
+## Tools
+
+### Search & Navigation
+
+| Tool | Signature | Description |
+|------|-----------|-------------|
+| `search_guide` | `(query, limit?)` | Search by keyword or question across 882 indexed entries. Returns ranked results with GitHub links. |
+| `read_section` | `(path, offset?, limit?)` | Read a file section with pagination (500 lines max per call). Returns GitHub + guide site links. |
+| `list_topics` | `()` | Browse all 25 topic categories in the guide with entry counts. |
+
+### Templates & Examples
+
+| Tool | Signature | Description |
+|------|-----------|-------------|
+| `get_example` | `(name)` | Fetch a production-ready template by exact name (agents, hooks, commands, skills). |
+| `list_examples` | `(category?)` | List all templates by category with GitHub links. Categories: `agents`, `commands`, `hooks`, `skills`, `scripts`. |
+| `search_examples` | `(query, limit?)` | Semantic search across all templates by intent (e.g. `"hook lint"`, `"agent code review"`). |
+
+### What's New
+
+| Tool | Signature | Description |
+|------|-----------|-------------|
+| `get_changelog` | `(count?)` | Last N entries from the guide CHANGELOG (default 5, max 20). |
+| `get_digest` | `(period)` | Combined digest of guide changes + Claude Code CLI releases. Period: `day`, `week`, `month`. |
+| `get_release` | `(version?, count?)` | Claude Code CLI release details. Pass a version (e.g. `"2.1.59"`) or omit for latest + recent N. |
+| `compare_versions` | `(from, to?)` | Diff between two Claude Code versions: aggregated highlights and breaking changes for all releases in range. |
+
+### Security Intelligence
+
+| Tool | Signature | Description |
+|------|-----------|-------------|
+| `get_threat` | `(id)` | Look up a CVE (e.g. `"CVE-2025-53109"`) or attack technique (e.g. `"T001"`) from the threat database. |
+| `list_threats` | `(category?)` | Browse the threat database. Without category: global summary with counts. With category: full section list. Categories: `cves`, `authors`, `skills`, `techniques`, `mitigations`, `sources`. |
+
+### Quick Reference
+
+| Tool | Signature | Description |
+|------|-----------|-------------|
+| `get_cheatsheet` | `(section?)` | Full cheatsheet or filtered to a specific section (e.g. `"hooks"`, `"agents"`, `"mcp"`). |
+
+## Resources
+
+| URI | Description |
+|-----|-------------|
+| `claude-code-guide://reference` | Full structured index (94KB YAML, ~900 entries) — use as fallback when search isn't enough |
+| `claude-code-guide://releases` | Claude Code official releases history (YAML) |
+| `claude-code-guide://llms` | Guide identity/navigation file (llms.txt) |
+
+## Prompts
+
+| Prompt | Args | Description |
+|--------|------|-------------|
+| `claude-code-expert` | `question?` | Activates expert mode with optimal workflow: search → read → example → YAML fallback |
+
+## Onboarding (first run)
+
+After installing the MCP server, run this in any Claude Code session for a personalized guided tour:
+
+```bash
+claude "Use the claude-code-guide MCP server. Activate the claude-code-expert prompt, then run a personalized onboarding: ask me 3 questions about my goal, experience level, and preferred tone — then build a custom learning path using search_guide and read_section to navigate the guide with live source links."
+```
+
+This replaces the static URL-fetch approach with live search across 900+ indexed entries, always up to date, with GitHub + guide site links on every result.
+
+## Usage examples
+
+```
+# Search
+search_guide("hooks")
+search_guide("cost optimization")
+search_guide("custom agents")
+
+# Read content
+read_section("guide/ultimate-guide.md", 8077)
+read_section("guide/cheatsheet.md")
+
+# Templates
+get_example("code-reviewer")
+get_example("pre-commit hook")
+list_examples("agents")
+list_examples("hooks")
+search_examples("hook lint")
+search_examples("agent code review")
+
+# What's new
+get_digest("week")
+get_digest("month")
+get_changelog(10)
+get_release()
+get_release("2.1.59")
+compare_versions("2.1.50", "2.1.59")
+compare_versions("2.0.0")
+
+# Security
+get_threat("CVE-2025-53109")
+get_threat("T001")
+list_threats()
+list_threats("cves")
+list_threats("techniques")
+
+# Quick reference
+get_cheatsheet()
+get_cheatsheet("hooks")
+list_topics()
+```
+
+## Slash command shortcuts
+
+Install the companion slash commands for one-keystroke access in Claude Code. They live in `.claude/commands/ccguide/` of the guide repo — copy or symlink to `~/.claude/commands/ccguide/` for global availability.
+
+```bash
+# From the guide repo root
+cp -r .claude/commands/ccguide ~/.claude/commands/ccguide
+```
+
+Once installed, these commands are available in any Claude Code session:
+
+| Command | Example | What it does |
+|---------|---------|--------------|
+| `/ccguide:search ` | `/ccguide:search hooks` | Search + auto-read top results |
+| `/ccguide:cheatsheet [section]` | `/ccguide:cheatsheet hooks` | Full cheatsheet or filtered |
+| `/ccguide:digest ` | `/ccguide:digest week` | Guide + CC releases digest |
+| `/ccguide:example ` | `/ccguide:example code-reviewer` | Fetch a template |
+| `/ccguide:examples [category]` | `/ccguide:examples agents` | List templates by category |
+| `/ccguide:release [version]` | `/ccguide:release 2.1.59` | CC CLI release details |
+| `/ccguide:changelog [count]` | `/ccguide:changelog 10` | Recent guide CHANGELOG |
+| `/ccguide:topics` | `/ccguide:topics` | Browse all 25 categories |
+
+## Custom agent
+
+A `claude-code-guide` agent is included in `.claude/agents/claude-code-guide.md`. It uses Haiku (fast, cheap) and searches the guide automatically before answering Claude Code questions.
+
+Copy to your `~/.claude/agents/` to use it globally:
+
+```bash
+cp .claude/agents/claude-code-guide.md ~/.claude/agents/claude-code-guide.md
+```
+
+Then invoke with: `use claude-code-guide agent to answer: how do I configure hooks?`
+
+## Dev mode (local repo)
+
+If you've cloned the guide repo, set `GUIDE_ROOT` to read files locally instead of fetching from GitHub:
+
+```json
+{
+ "mcpServers": {
+ "claude-code-guide": {
+ "type": "stdio",
+ "command": "node",
+ "args": ["/path/to/claude-code-ultimate-guide/mcp-server/dist/index.js"],
+ "env": {
+ "GUIDE_ROOT": "/path/to/claude-code-ultimate-guide"
+ }
+ }
+ }
+}
+```
+
+With `GUIDE_ROOT` set:
+- YAML indexes loaded from the local repo (stays in sync with local changes)
+- File content read directly from disk (no GitHub fetch, no cache)
+
+## Bundled content
+
+The npm package includes (~130KB compressed total):
+- `content/reference.yaml` — 94KB structured index (~900 entries, ~882 indexed)
+- `content/claude-code-releases.yaml` — 27KB releases history (76 releases)
+- `content/llms.txt` — 8KB identity file
+
+Guide markdown files (3.5MB) are **not** bundled — they're fetched from GitHub on demand and cached at `~/.cache/claude-code-guide/{version}/`.
+
+## Cache
+
+File content is cached at `~/.cache/claude-code-guide/{package-version}/` with 24h TTL. If offline, stale cache is served as fallback. If no cache exists and offline, tools return inline summaries from the YAML index instead.
+
+## MCP Inspector
+
+Test locally with the official MCP Inspector:
+
+```bash
+cd mcp-server
+npm run build
+GUIDE_ROOT=.. npx @modelcontextprotocol/inspector node dist/index.js
+```
diff --git a/mcp-server/content/claude-code-releases.yaml b/mcp-server/content/claude-code-releases.yaml
new file mode 100644
index 0000000..0441be3
--- /dev/null
+++ b/mcp-server/content/claude-code-releases.yaml
@@ -0,0 +1,701 @@
+# Claude Code Official Releases (condensed)
+# Source: github.com/anthropics/claude-code/CHANGELOG.md
+# Purpose: Track Claude Code product releases for documentation sync
+# Maintained: Manual updates when new releases are announced
+
+latest: "2.1.59"
+updated: "2026-02-26"
+
+# ════════════════════════════════════════════════════════════════
+# RELEASES (newest first, condensed highlights only)
+# ════════════════════════════════════════════════════════════════
+releases:
+
+ # ─────────────────────────────────────────────────────────────
+ # 2.1.x Series (January-February 2026)
+ # ─────────────────────────────────────────────────────────────
+
+ - version: "2.1.59"
+ date: "2026-02-26"
+ highlights:
+ - "⭐ Auto-memory: Claude automatically saves useful context; manage with /memory"
+ - "⭐ /copy command: interactive picker for selecting individual code blocks or full response"
+ - "Smarter 'always allow' prefix suggestions for compound bash commands (per-subcommand prefixes)"
+ - "Fixed MCP OAuth token refresh race condition with multiple simultaneous instances"
+ - "Fixed config file corruption wiping authentication when multiple instances ran simultaneously"
+ breaking: []
+
+ - version: "2.1.58"
+ date: "2026-02-26"
+ highlights:
+ - "Remote Control expanded to more users"
+ breaking: []
+
+ - version: "2.1.56"
+ date: "2026-02-25"
+ highlights:
+ - "VSCode: Fixed another cause of 'command claude-vscode.editor.openLast not found' crashes"
+ breaking: []
+
+ - version: "2.1.55"
+ date: "2026-02-25"
+ highlights:
+ - "Fixed BashTool failing on Windows with EINVAL error"
+ breaking: []
+
+ - version: "2.1.53"
+ date: "2026-02-25"
+ highlights:
+ - "Stability fixes: panic on Windows, crashes on process spawn (Windows), WebAssembly crashes (Linux x64/Windows x64/ARM64)"
+ - "Fixed graceful shutdown leaving stale sessions with Remote Control; `--worktree` flag sometimes ignored on first launch"
+ - "Fixed UI flicker where user input disappeared briefly after submission; bulk agent kill (ctrl+f) single notification"
+ breaking: []
+
+ - version: "2.1.52"
+ date: "2026-02-24"
+ highlights:
+ - "VSCode: Fixed extension crash on Windows ('command claude-vscode.editor.openLast not found')"
+ breaking: []
+
+ - version: "2.1.51"
+ date: "2026-02-24"
+ highlights:
+ - "⭐ `claude remote-control` subcommand for external builds enabling local environment serving"
+ - "BashTool skips login shell by default when shell snapshot available (was `CLAUDE_BASH_NO_LOGIN=true`); tool results persist to disk at 50K chars (was 100K)"
+ - "SDK: `CLAUDE_CODE_ACCOUNT_UUID`, `CLAUDE_CODE_USER_EMAIL`, `CLAUDE_CODE_ORGANIZATION_UUID` env vars for account metadata"
+ - "/model picker shows human-readable labels (e.g., 'Sonnet 4.5') for pinned versions; custom npm registries for plugin installs"
+ breaking: []
+
+ - version: "2.1.50"
+ date: "2026-02-21"
+ highlights:
+ - "⭐ `WorktreeCreate` and `WorktreeRemove` hook events for custom VCS setup/teardown with agent worktree isolation"
+ - "`isolation: worktree` in agent definitions for declarative worktree isolation; `claude agents` CLI command to list configured agents"
+ - "Opus 4.6 (fast mode) now has full 1M context window; `CLAUDE_CODE_DISABLE_1M_CONTEXT` env var to disable it"
+ - "Major memory leak fixes + startup performance improvements for headless mode; `CLAUDE_CODE_SIMPLE` now fully minimal"
+ breaking: []
+
+ - version: "2.1.49"
+ date: "2026-02-20"
+ highlights:
+ - "⭐ `--worktree` / `-w` flag to start Claude in isolated git worktree; subagents support `isolation: 'worktree'`"
+ - "Agent definitions support `background: true` to always run as background task"
+ - "`ConfigChange` hook event for enterprise security auditing (fires when config files change during session)"
+ - "Simple mode now includes file edit tool; many bug fixes for background agents, permissions, sessions"
+ breaking: []
+
+ - version: "2.1.47"
+ date: "2026-02-19"
+ highlights:
+ - "VS Code plan preview auto-updates as Claude iterates, commenting enabled when plan is ready"
+ - "⭐ `ctrl+f` to kill all background agents (replaces double-ESC); background agents continue when ESC pressed"
+ - "Added `last_assistant_message` field to Stop/SubagentStop hook inputs"
+ - "70+ bug fixes: PDF compaction, Unicode curly quotes, parallel file edits, OSC 8 hyperlinks, Windows rendering, session persistence"
+ breaking: []
+
+ - version: "2.1.46"
+ date: "2026-02-19"
+ highlights:
+ - "Fixed orphaned Claude Code processes after terminal disconnect on macOS"
+ - "Added support for using claude.ai MCP connectors in Claude Code"
+ breaking: []
+
+ - version: "2.1.45"
+ date: "2026-02-17"
+ highlights:
+ - "⭐ Claude Sonnet 4.6 model support"
+ - "`spinnerTipsOverride` setting for customizable spinner tips (with `excludeDefault` option)"
+ - "SDK: `SDKRateLimitInfo` and `SDKRateLimitEvent` types for rate limit tracking"
+ - "Fixed Agent Teams on Bedrock/Vertex/Foundry; improved memory for large shell outputs"
+ breaking: []
+
+ - version: "2.1.44"
+ date: "2026-02-17"
+ highlights:
+ - "Fixed auth refresh errors"
+ breaking: []
+
+ - version: "2.1.43"
+ date: "2026-02-17"
+ highlights:
+ - "Fixed AWS auth refresh hanging indefinitely (3-minute timeout added)"
+ - "Fixed structured-outputs beta header sent unconditionally on Vertex/Bedrock"
+ - "Fixed spurious warnings for non-agent markdown files in `.claude/agents/`"
+ breaking: []
+
+ - version: "2.1.42"
+ date: "2026-02-14"
+ highlights:
+ - "Optimized startup via deferred Zod schema construction"
+ - "Improved prompt cache hit rate by moving date outside system prompt"
+ - "Opus 4.6 effort callout for eligible users"
+ - "Better error messaging for image dimension limits (suggests `/compact`)"
+ breaking: []
+
+ - version: "2.1.41"
+ date: "2026-02-13"
+ highlights:
+ - "Guard against launching Claude Code inside another Claude Code session"
+ - "`claude auth login/status/logout` CLI subcommands"
+ - "Windows ARM64 (win32-arm64) native binary support"
+ - "`speed` attribute in OTel events for fast mode visibility"
+ - "`/rename` auto-generates session name from conversation context"
+ - "Fixed Agent Teams wrong model for Bedrock/Vertex/Foundry"
+ - "Multiple stability fixes (FileReadTool FIFOs, MCP images, background tasks, stale permissions)"
+ breaking: []
+
+ - version: "2.1.39"
+ date: "2026-02-10"
+ highlights:
+ - "Improved terminal rendering performance"
+ - "Fixed fatal errors being swallowed instead of displayed"
+ - "Fixed process hanging after session close"
+ - "Fixed character loss at terminal screen boundary"
+ breaking: []
+
+ - version: "2.1.38"
+ date: "2026-02-10"
+ highlights:
+ - "Fixed VS Code terminal scroll-to-top regression"
+ - "Fixed Tab key queueing slash commands instead of autocompleting"
+ - "Security: Heredoc delimiter parsing to prevent command smuggling"
+ - "Security: Blocked writes to `.claude/skills` in sandbox mode"
+ breaking: []
+
+ - version: "2.1.37"
+ date: "2026-02-08"
+ highlights:
+ - "Fixed /fast not immediately available after enabling /extra-usage"
+ breaking: []
+
+ - version: "2.1.36"
+ date: "2026-02-08"
+ highlights:
+ - "⭐ Fast mode now available for Opus 4.6"
+ breaking: []
+
+ - version: "2.1.34"
+ date: "2026-02-07"
+ highlights:
+ - "Fixed crash when agent teams setting changed between renders"
+ - "Security fix: Sandbox-excluded commands could bypass Bash ask permission"
+ breaking:
+ - "Security fix: sandbox.excludedCommands / dangerouslyDisableSandbox bypass with autoAllowBashIfSandboxed"
+
+ - version: "2.1.33"
+ date: "2026-02-06"
+ highlights:
+ - "Agent teams fixes: tmux sessions, availability warnings"
+ - "`TeammateIdle` and `TaskCompleted` hook events for multi-agent workflows"
+ - "Agent frontmatter: `memory` field (user/project/local), `Task(agent_type)` sub-agent restriction"
+ - "VSCode: Remote sessions, branch/message count in session picker"
+ breaking: []
+
+ - version: "2.1.32"
+ date: "2026-02-05"
+ highlights:
+ - "⭐ Opus 4.6 is now available"
+ - "⭐ Agent teams preview (CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1)"
+ - "⭐ Automatic memory recording and recall"
+ - "'Summarize from here' for partial conversation summarization"
+ breaking: []
+
+ - version: "2.1.31"
+ date: "2026-02-03"
+ highlights:
+ - "Session resume hint on exit showing how to continue"
+ - "Fixed PDF errors locking sessions & bash sandbox errors"
+ - "LSP compatibility improvements & terminal rendering fixes"
+ breaking: []
+
+ - version: "2.1.30"
+ date: "2026-02-02"
+ highlights:
+ - "`pages` parameter for Read tool PDFs (e.g., `pages: '1-5'`)"
+ - "Pre-configured OAuth for MCP servers (Slack support)"
+ - "⭐ `/debug` command for session troubleshooting"
+ - "git log/show read-only flags support"
+ - "Task tool metrics (tokens, duration, tool uses)"
+ breaking: []
+
+ - version: "2.1.29"
+ date: "2026-01-31"
+ highlights:
+ - "Fixed startup performance with saved hook context"
+ - "Improved session recovery speed for long-duration sessions"
+ breaking: []
+
+ - version: "2.1.27"
+ date: "2026-01-29"
+ highlights:
+ - "`--from-pr` flag to resume sessions linked to GitHub PR number/URL"
+ - "Sessions auto-linked to PRs when created via `gh pr create`"
+ - "Windows: Fixed bash execution and console flashing issues"
+ - "VSCode: Fixed OAuth token expiration (401 errors)"
+ breaking: []
+
+ - version: "2.1.25"
+ date: "2026-01-30"
+ highlights:
+ - "Fixed beta header validation for Bedrock/Vertex gateway users"
+ breaking: []
+
+ - version: "2.1.23"
+ date: "2026-01-29"
+ highlights:
+ - "Customizable spinner verbs setting (spinnerVerbs)"
+ - "mTLS and corporate proxy connectivity fixes"
+ - "Improved terminal rendering performance"
+ breaking: []
+
+ - version: "2.1.22"
+ date: "2026-01-28"
+ highlights:
+ - "Improved task UI performance with virtualization"
+ - "Vim selection and deletion fixes"
+ - "LSP improvements: Kotlin support, UTF-16 ranges"
+ breaking: []
+
+ - version: "2.1.21"
+ date: "2026-01-28"
+ highlights:
+ - "Skills/commands can specify required/recommended Claude Code version"
+ - "New TaskCreate fields: category, checklist, parentId"
+ - "Automatic Claude Code update checking at session start"
+ - "Tasks appear in /context with 'Disable tasks' shortcut"
+ breaking: []
+
+ - version: "2.1.20"
+ date: "2026-01-27"
+ highlights:
+ - "TaskUpdate: status='deleted' for task removal"
+ - "PR review status indicator (colored dot + link)"
+ breaking: []
+
+ - version: "2.1.19"
+ date: "2026-01-25"
+ highlights:
+ - "New: CLAUDE_CODE_ENABLE_TASKS env var (set false for old task system)"
+ - "New: Shorthand $0, $1 for arguments in custom commands"
+ - "[VSCode] Session forking and rewind enabled for all users"
+ - "Fixed: Multiple session resuming/naming issues with git worktrees"
+ breaking:
+ - "Indexed argument syntax changed: $ARGUMENTS.0 → $ARGUMENTS[0] (bracket syntax)"
+
+ - version: "2.1.18"
+ date: "2026-01-24"
+ highlights:
+ - "⭐ Customizable keyboard shortcuts with /keybindings command"
+ - "Per-context keybindings, chord sequences, workflow personalization"
+ breaking: []
+
+ - version: "2.1.17"
+ date: "2026-01-23"
+ highlights:
+ - "Fix: Crashes on processors without AVX instruction support"
+ breaking: []
+
+ - version: "2.1.16"
+ date: "2026-01-22"
+ highlights:
+ - "⭐ New task management system with dependency tracking"
+ - "[VSCode] Native plugin management support"
+ - "[VSCode] OAuth users can browse/resume remote sessions"
+ - "Fixed: OOM crashes when resuming sessions with heavy subagent usage"
+ breaking: []
+
+ - version: "2.1.15"
+ date: "2026-01-22"
+ highlights:
+ - "⚠️ Deprecation notice for npm installations (use `claude install`)"
+ - "UI rendering performance improved with React Compiler"
+ - "Fixed: MCP stdio server timeout not killing child process"
+ breaking:
+ - "npm installations deprecated - migrate to native installer"
+
+ - version: "2.1.14"
+ date: "2026-01-21"
+ highlights:
+ - "History-based autocomplete in bash mode (! + Tab)"
+ - "Search in installed plugins list"
+ - "Git commit SHA pinning for plugins"
+ - "Multiple fixes: context window, memory, autocomplete"
+ breaking: []
+
+ - version: "2.1.12"
+ date: "2026-01-18"
+ highlights:
+ - "Bug fix: Message rendering"
+ breaking: []
+
+ - version: "2.1.11"
+ date: "2026-01-17"
+ highlights:
+ - "Fix: Excessive MCP connection requests for HTTP/SSE transports"
+ breaking: []
+
+ - version: "2.1.10"
+ date: "2026-01-17"
+ highlights:
+ - "New `Setup` hook event (--init, --init-only, --maintenance flags)"
+ - "Keyboard shortcut 'c' to copy OAuth URL"
+ - "File suggestions show as removable attachments"
+ - "[VSCode] Plugin install count + trust warnings"
+ breaking: []
+
+ - version: "2.1.9"
+ date: "2026-01-16"
+ highlights:
+ - "`auto:N` syntax for MCP tool search threshold"
+ - "`plansDirectory` setting for custom plan file locations"
+ - "Session URL attribution to commits/PRs from web sessions"
+ - "PreToolUse hooks can return `additionalContext`"
+ - "${CLAUDE_SESSION_ID} string substitution for skills"
+ breaking: []
+
+ - version: "2.1.7"
+ date: "2026-01-15"
+ highlights:
+ - "`showTurnDuration` setting to hide turn duration messages"
+ - "MCP tool search auto mode enabled by default"
+ - "Inline display of agent final response in task notifications"
+ breaking:
+ - "OAuth/API Console URLs: console.anthropic.com → platform.claude.com"
+ - "Security fix: Wildcard permission rules could match compound commands"
+
+ - version: "2.1.6"
+ date: "2026-01-14"
+ highlights:
+ - "Search functionality in /config command"
+ - "Date range filtering in /stats (r to cycle)"
+ - "Auto-discovery of skills from nested .claude/skills directories"
+ - "Updates section in /doctor showing auto-update channel"
+ breaking:
+ - "Security fix: Permission bypass via shell line continuation"
+
+ - version: "2.1.5"
+ date: "2026-01-13"
+ highlights:
+ - "`CLAUDE_CODE_TMPDIR` env var for custom temp directory"
+ breaking: []
+
+ - version: "2.1.4"
+ date: "2026-01-12"
+ highlights:
+ - "`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` env var"
+ breaking: []
+
+ - version: "2.1.3"
+ date: "2026-01-11"
+ highlights:
+ - "Merged slash commands and skills (simplified mental model)"
+ - "Release channel toggle (stable/latest) in /config"
+ - "/doctor warnings for unreachable permission rules"
+ breaking: []
+
+ - version: "2.1.2"
+ date: "2026-01-10"
+ highlights:
+ - "Windows Package Manager (winget) support"
+ - "Clickable hyperlinks for file paths (OSC 8 terminals)"
+ - "Shift+Tab shortcut in plan mode for auto-accept edits"
+ - "Large bash outputs saved to disk instead of truncated"
+ breaking:
+ - "Security fix: Command injection in bash command processing"
+ - "Deprecated: C:\\ProgramData\\ClaudeCode managed settings path"
+
+ - version: "2.1.0"
+ date: "2026-01-08"
+ highlights:
+ - "⭐ MAJOR: Automatic skill hot-reload"
+ - "⭐ MAJOR: Shift+Enter works OOTB (iTerm2, WezTerm, Ghostty, Kitty)"
+ - "⭐ MAJOR: New Vim motions (;, y, p, text objects, >>, <<, J)"
+ - "Unified Ctrl+B for backgrounding all tasks"
+ - "/plan command shortcut"
+ - "Slash command autocomplete anywhere in input"
+ - "`language` setting for response language"
+ - "Skills context: fork support"
+ - "Hooks support in agent/skill frontmatter"
+ - "MCP list_changed notifications support"
+ - "/teleport and /remote-env commands"
+ - "Tab support for disabling specific agents"
+ - "--tools flag in interactive mode"
+ - "YAML-style lists in frontmatter allowed-tools"
+ breaking:
+ - "OAuth URLs: console.anthropic.com → platform.claude.com"
+ - "Removed permission prompt for entering plan mode"
+ - "[SDK] Minimum zod peer dependency: ^4.0.0"
+
+ # ─────────────────────────────────────────────────────────────
+ # 2.0.x Series (December 2025 - January 2026)
+ # ─────────────────────────────────────────────────────────────
+
+ - version: "2.0.76"
+ date: "2026-01-05"
+ highlights:
+ - "Fix: macOS code-sign warning with Claude in Chrome"
+ breaking: []
+
+ - version: "2.0.74"
+ date: "2026-01-04"
+ highlights:
+ - "⭐ LSP (Language Server Protocol) tool for code intelligence"
+ - "/terminal-setup for Kitty, Alacritty, Zed, Warp"
+ - "Ctrl+T in /theme to toggle syntax highlighting"
+ - "Grouped skills/agents by source in /context"
+ breaking: []
+
+ - version: "2.0.73"
+ date: "2026-01-03"
+ highlights:
+ - "Clickable [Image #N] links"
+ - "Alt-Y yank-pop to cycle kill ring history"
+ - "Search filtering in plugin discover screen"
+ - "[VSCode] Tab icon badges (permissions, unread)"
+ breaking: []
+
+ - version: "2.0.72"
+ date: "2026-01-02"
+ highlights:
+ - "⭐ Claude in Chrome (Beta) - browser control from Claude Code"
+ - "Reduced terminal flickering"
+ - "QR code for mobile app"
+ - "Thinking toggle: Tab → Alt+T"
+ breaking: []
+
+ - version: "2.0.71"
+ date: "2026-01-01"
+ highlights:
+ - "/config toggle for prompt suggestions"
+ - "/settings alias for /config"
+ - "New Rust-based syntax highlighting engine"
+ breaking: []
+
+ - version: "2.0.70"
+ date: "2025-12-30"
+ highlights:
+ - "Enter key accepts/submits prompt suggestions immediately"
+ - "Wildcard syntax mcp__server__* for MCP tool permissions"
+ - "Auto-update toggle for plugin marketplaces"
+ - "3x memory usage improvement for large conversations"
+ breaking:
+ - "Removed # shortcut for quick memory entry"
+
+ - version: "2.0.68"
+ date: "2025-12-28"
+ highlights:
+ - "IME support for Chinese, Japanese, Korean"
+ - "Enterprise managed settings support"
+ - "Improved plan mode exit UX"
+ breaking: []
+
+ - version: "2.0.67"
+ date: "2025-12-26"
+ highlights:
+ - "⭐ Thinking mode enabled by default for Opus 4.5"
+ - "Thinking config moved to /config"
+ - "Search in /permissions with / shortcut"
+ breaking: []
+
+ - version: "2.0.65"
+ date: "2025-12-24"
+ highlights:
+ - "Alt+P to switch models while writing prompt"
+ - "Context window info in status line"
+ - "`fileSuggestion` setting for custom @ search"
+ - "CLAUDE_CODE_SHELL env var"
+ breaking: []
+
+ - version: "2.0.64"
+ date: "2025-12-22"
+ highlights:
+ - "⭐ Instant auto-compacting"
+ - "⭐ Async agents and bash commands with wake-up messages"
+ - "/stats with usage graphs, streaks, favorite model"
+ - "Named sessions: /rename, /resume "
+ - "Support for .claude/rules/ directory"
+ - "Image dimension metadata for coordinate mappings"
+ breaking:
+ - "Unshipped AgentOutputTool/BashOutputTool → TaskOutputTool"
+
+ - version: "2.0.62"
+ date: "2025-12-20"
+ highlights:
+ - "`attribution` setting for commit/PR bylines"
+ - "(Recommended) indicator in multiple-choice questions"
+ breaking:
+ - "Deprecated: includeCoAuthoredBy (use attribution)"
+
+ - version: "2.0.60"
+ date: "2025-12-18"
+ highlights:
+ - "⭐ Background agents (work while you work)"
+ - "--disable-slash-commands CLI flag"
+ - "Model name in Co-Authored-By commits"
+ - "/mcp enable|disable [server-name]"
+ breaking: []
+
+ - version: "2.0.58"
+ date: "2025-12-16"
+ highlights:
+ - "⭐ Opus 4.5 available for Pro users"
+ breaking:
+ - "[Windows] Managed settings prefer C:\\Program Files\\ClaudeCode"
+
+ - version: "2.0.57"
+ date: "2025-12-15"
+ highlights:
+ - "Feedback input when rejecting plans"
+ - "[VSCode] Streaming message support"
+ breaking: []
+
+ - version: "2.0.55"
+ date: "2025-12-13"
+ highlights:
+ - "Improved AskUserQuestion auto-submit"
+ - "Better fuzzy matching for @ file suggestions"
+ breaking:
+ - "Proxy DNS opt-in: CLAUDE_CODE_PROXY_RESOLVES_HOSTS=true"
+
+ - version: "2.0.51"
+ date: "2025-12-10"
+ highlights:
+ - "⭐ MAJOR: Opus 4.5 released"
+ - "⭐ MAJOR: Claude Code for Desktop"
+ - "Updated usage limits for Opus 4.5"
+ - "Plan Mode builds more precise plans"
+ breaking: []
+
+ - version: "2.0.45"
+ date: "2025-12-05"
+ highlights:
+ - "⭐ Microsoft Foundry support"
+ - "PermissionRequest hook for auto-approve/deny"
+ - "& prefix for background tasks to web"
+ breaking: []
+
+ - version: "2.0.43"
+ date: "2025-12-03"
+ highlights:
+ - "`permissionMode` field for custom agents"
+ - "`skills` frontmatter for auto-loading subagent skills"
+ - "SubagentStart hook event"
+ breaking: []
+
+ - version: "2.0.41"
+ date: "2025-12-01"
+ highlights:
+ - "Model parameter for prompt-based stop hooks"
+ - "Plugins: sharing and installing output styles"
+ - "Allow more safe git commands without approval"
+ - "Teleporting from web auto-sets upstream branch"
+ breaking: []
+
+ - version: "2.0.37"
+ date: "2025-11-28"
+ highlights:
+ - "Matcher values for Notification hook events"
+ - "Output Styles: keep-coding-instructions option"
+ breaking: []
+
+ - version: "2.0.35"
+ date: "2025-11-26"
+ highlights:
+ - "Improved fuzzy search for commands"
+ - "CLAUDE_CODE_EXIT_AFTER_STOP_DELAY env var"
+ breaking:
+ - "Migrated ignorePatterns to deny permissions"
+
+ - version: "2.0.32"
+ date: "2025-11-23"
+ highlights:
+ - "Output styles un-deprecated (community feedback)"
+ - "`companyAnnouncements` setting"
+ breaking: []
+
+ - version: "2.0.30"
+ date: "2025-11-20"
+ highlights:
+ - "`allowUnsandboxedCommands` sandbox setting"
+ - "`disallowedTools` for custom agent definitions"
+ - "Prompt-based stop hooks"
+ - "SSE MCP servers on native build"
+ breaking:
+ - "Deprecated: Output styles (later un-deprecated in 2.0.32)"
+ - "Removed: Custom ripgrep configuration"
+
+ - version: "2.0.28"
+ date: "2025-11-18"
+ highlights:
+ - "⭐ Plan mode: introduced Plan subagent"
+ - "Subagents: resume capability"
+ - "Subagents: dynamic model selection"
+ - "--max-budget-usd flag (SDK)"
+ - "Git-based plugins branch/tag support (#branch)"
+ breaking: []
+
+ - version: "2.0.27"
+ date: "2025-11-15"
+ highlights:
+ - "New UI for permission prompts"
+ - "Branch filtering and search in session resume"
+ breaking: []
+
+ - version: "2.0.25"
+ date: "2025-11-12"
+ highlights: []
+ breaking:
+ - "Removed legacy SDK entrypoint → @anthropic-ai/claude-agent-sdk"
+
+ - version: "2.0.24"
+ date: "2025-11-10"
+ highlights:
+ - "Claude Code Web: Web → CLI teleport"
+ - "Sandbox mode for BashTool (Linux & Mac)"
+ - "Bedrock: awsAuthRefresh output display"
+ breaking: []
+
+# ════════════════════════════════════════════════════════════════
+# SUMMARY - Key Breaking Changes by Area
+# ════════════════════════════════════════════════════════════════
+breaking_summary:
+ urls:
+ - "OAuth/API Console: console.anthropic.com → platform.claude.com (v2.1.0, v2.1.7)"
+ windows:
+ - "Managed settings: C:\\ProgramData\\ClaudeCode → C:\\Program Files\\ClaudeCode (v2.0.58, deprecated v2.1.2)"
+ sdk:
+ - "Removed legacy SDK entrypoint → @anthropic-ai/claude-agent-sdk (v2.0.25)"
+ - "Minimum zod peer dependency: ^4.0.0 (v2.1.0)"
+ shortcuts:
+ - "Removed # shortcut for quick memory (v2.0.70)"
+ security:
+ - "Command injection fix in bash processing (v2.1.2)"
+ - "Wildcard permission rules compound commands fix (v2.1.7)"
+ - "Shell line continuation permission bypass fix (v2.1.6)"
+ - "Sandbox-excluded commands bypass with autoAllowBashIfSandboxed (v2.1.34)"
+ - "Heredoc delimiter command smuggling prevention (v2.1.38)"
+ installation:
+ - "npm installations deprecated - use native installer (v2.1.15)"
+ behavior:
+ - "ultrathink/think keywords now cosmetic only — thinking default with Opus 4.5 (v2.0.67)"
+ syntax:
+ - "Indexed argument syntax changed: $ARGUMENTS.0 → $ARGUMENTS[0] (v2.1.19)"
+
+# ════════════════════════════════════════════════════════════════
+# MILESTONE FEATURES (quick reference)
+# ════════════════════════════════════════════════════════════════
+milestones:
+ "2.1.36": "Fast mode for Opus 4.6"
+ "2.1.32": "Opus 4.6, Agent teams preview, Automatic memory"
+ "2.1.18": "Customizable keyboard shortcuts with /keybindings"
+ "2.1.16": "New task management system with dependency tracking"
+ "2.1.0": "Skill hot-reload, Shift+Enter OOTB, Vim motions, /plan command"
+ "2.0.74": "LSP tool for code intelligence"
+ "2.0.72": "Claude in Chrome (browser control)"
+ "2.0.67": "Thinking mode default for Opus 4.5"
+ "2.0.64": "Instant auto-compact, async agents, named sessions"
+ "2.0.60": "Background agents"
+ "2.0.51": "Opus 4.5, Claude Code for Desktop"
+ "2.0.45": "Microsoft Foundry, PermissionRequest hook"
+ "2.0.28": "Plan subagent, subagent resume/model selection"
+ "2.0.24": "Web teleport, Sandbox mode"
diff --git a/mcp-server/content/llms.txt b/mcp-server/content/llms.txt
new file mode 100644
index 0000000..edc3042
--- /dev/null
+++ b/mcp-server/content/llms.txt
@@ -0,0 +1,166 @@
+# The Ultimate Claude Code Guide
+
+> A comprehensive, self-contained guide to mastering Claude Code - Anthropic's official CLI for AI-assisted development.
+
+## What This Repository Contains
+
+This repository provides everything needed to go from Claude Code beginner to power user:
+
+1. **Complete Guide** (`guide/ultimate-guide.md`) - 9,600+ lines covering all aspects of Claude Code
+2. **Cheatsheet** (`guide/cheatsheet.md`) - 1-page printable daily reference
+3. **Architecture Internals** (`guide/architecture.md`) - How Claude Code works under the hood (master loop, tools, context)
+4. **Audit Prompt** (`tools/audit-prompt.md`) - Self-contained prompt to analyze your Claude Code setup against best practices
+
+## Target Audience
+
+- **Beginners**: Installation, first workflow, essential commands (15 min to productivity)
+- **Intermediate**: Memory files, agents, skills, hooks configuration
+- **Power Users**: MCP servers, Trinity pattern, CI/CD integration, autonomous workflows
+
+## Key Topics Covered
+
+### Core Concepts
+- Context Management (the most critical concept - context windows, compaction, zones)
+- Plan Mode (safe read-only exploration before making changes)
+- Memory Files (CLAUDE.md for persistent context across sessions)
+- Rewind (undo mechanism for file changes)
+
+### Customization
+- **Agents**: Custom AI personas with specific tools and instructions
+- **Skills**: Reusable knowledge modules for complex domains
+- **Commands**: Custom slash commands for frequent workflows
+- **Hooks**: Event-driven automation (PreToolUse, PostToolUse, UserPromptSubmit)
+
+### Advanced Features
+- **MCP Servers**: Model Context Protocol for extended capabilities
+ - Serena (codebase indexation + session memory)
+ - Context7 (library documentation lookup)
+ - Sequential (structured multi-step reasoning)
+ - Playwright (browser automation)
+- **Trinity Pattern**: Combining Plan Mode + Extended Thinking + MCP for complex tasks
+- **CI/CD Integration**: Headless mode, GitHub Actions, Verify Gate pattern
+
+### Best Practices
+- Single Source of Truth pattern for conventions
+- Shell Scripts vs AI Agents decision framework
+- Tight feedback loops for rapid iteration
+- Continuous improvement mindset
+
+## File Structure
+
+```
+claude-code-ultimate-guide/
+├── README.md # Overview and quick start
+├── CONTRIBUTING.md # Contribution guidelines
+├── CHANGELOG.md # Version history
+├── LICENSE # CC BY-SA 4.0
+├── guide/ # Core documentation
+│ ├── ultimate-guide.md # Complete guide (main content)
+│ ├── cheatsheet.md # 1-page reference
+│ ├── architecture.md # How Claude Code works internally
+│ └── adoption-approaches.md # Implementation strategy
+├── tools/ # Interactive utilities
+│ ├── audit-prompt.md # Setup audit tool
+│ ├── onboarding-prompt.md # Personalized onboarding
+│ └── mobile-access.md # Mobile access setup
+├── machine-readable/ # LLM/AI consumption
+│ ├── reference.yaml # Machine-optimized index
+│ └── llms.txt # This file (for AI indexation)
+├── exports/ # Generated outputs
+│ ├── notebooklm.pdf # Visual overview
+│ └── kimi.pdf # Full text export
+├── examples/ # Ready-to-use templates
+│ ├── agents/ # Custom AI personas
+│ ├── skills/ # Knowledge modules
+│ ├── commands/ # Slash commands
+│ ├── hooks/ # Event automation (bash + PowerShell)
+│ ├── config/ # Configuration files
+│ └── memory/ # CLAUDE.md templates
+└── quiz/ # Interactive knowledge quiz
+```
+
+## Guide Structure (10 Sections + Architecture)
+
+**Architecture Deep Dive** (`guide/architecture.md`):
+- Master Loop: `while(tool_call)` - no DAGs, no classifiers, no RAG
+- 8 Core Tools: Bash, Read, Edit, Write, Grep, Glob, Task, TodoWrite
+- Context: ~200K tokens, auto-compact at 75-92%
+- Sub-agents: isolated context, max depth=1
+- Philosophy: "less scaffolding, more model"
+
+**Main Guide Sections** (`guide/ultimate-guide.md`):
+1. **Quick Start** - Installation, first workflow, essential commands
+2. **Core Concepts** - Context management, Plan Mode, Rewind, Mental Model
+3. **Memory & Settings** - CLAUDE.md files, .claude/ folder, precedence rules
+4. **Agents** - Custom AI personas, Tool SEO, orchestration patterns
+5. **Skills** - Reusable knowledge modules
+6. **Commands** - Custom slash commands, variable interpolation
+7. **Hooks** - Event-driven automation (security, formatting, logging)
+8. **MCP Servers** - Serena, Context7, Sequential, Playwright, Postgres
+9. **Advanced Patterns** - Trinity, CI/CD, feedback loops, vibe coding
+10. **Reference** - Commands, shortcuts, troubleshooting, checklists
+
+## Key Commands Reference
+
+| Command | Purpose |
+|---------|---------|
+| `/help` | Show all available commands |
+| `/status` | Check context usage and session state |
+| `/compact` | Compress context (use when >70%) |
+| `/clear` | Fresh start (reset conversation) |
+| `/plan` | Enter safe read-only planning mode |
+| `/rewind` | Undo recent changes |
+
+## Context Management Rules
+
+- **Green Zone (0-50%)**: Work freely
+- **Yellow Zone (50-70%)**: Be selective with context loading
+- **Red Zone (70-90%)**: Use `/compact` immediately
+- **Critical (90%+)**: Use `/clear` to reset
+
+## Platform Support
+
+- **macOS/Linux**: Full support with bash/zsh examples
+- **Windows**: PowerShell and batch file alternatives provided (note: Windows commands are AI-generated and not tested by the author)
+
+## Related Resources
+
+- Official: https://docs.anthropic.com/en/docs/claude-code
+- Official llms.txt (index): https://code.claude.com/docs/llms.txt
+- Official llms-full.txt (complete): https://code.claude.com/docs/llms-full.txt
+- DeepWiki: https://deepwiki.com/FlorianBruniaux/claude-code-ultimate-guide
+- Inspiration: https://claudelog.com/
+- Whitepapers (FR + EN): https://www.florian.bruniaux.com/guides — 9 focused whitepapers on Claude Code (foundations, prompting, customization, security, architecture, team, privacy, reference, agent teams)
+
+## Author
+
+Florian BRUNIAUX - Founding Engineer at Méthode Aristote
+- GitHub: https://github.com/FlorianBruniaux
+- LinkedIn: https://www.linkedin.com/in/florian-bruniaux-43408b83/
+
+## License
+
+CC BY-SA 4.0 - Free to share and adapt with attribution.
+
+## How to Use This Guide
+
+1. **New to Claude Code?** Start with README.md Quick Start section
+2. **Choose your path** See Learning Paths in README for audience-specific guides
+3. **Want comprehensive learning?** Read guide/ultimate-guide.md
+4. **Need daily reference?** Print guide/cheatsheet.md
+5. **Want to audit your setup?** Use tools/audit-prompt.md
+6. **Need templates?** Browse examples/ folder for ready-to-use configs
+
+## Machine-Optimized Reference
+
+For fast LLM parsing, see `machine-readable/reference.yaml` (~2K tokens) - structured YAML with:
+- Decision tree for task routing
+- Prompting formula (WHAT/WHERE/HOW/VERIFY)
+- Commands, shortcuts, CLI flags
+- Context management zones and symptoms
+- MCP servers, extended thinking, cost optimization
+- Anti-patterns and troubleshooting
+
+## Keywords
+
+Claude Code, Anthropic, CLI, AI-assisted development, coding assistant, context management, MCP servers, agents, skills, hooks, commands, Plan Mode, CLAUDE.md, memory files, CI/CD integration, autonomous workflows, developer productivity, AI coding tools
diff --git a/mcp-server/content/reference.yaml b/mcp-server/content/reference.yaml
new file mode 100644
index 0000000..18d2225
--- /dev/null
+++ b/mcp-server/content/reference.yaml
@@ -0,0 +1,1625 @@
+# claude-code-reference.yaml
+# Quick lookup for Claude Code - comprehensive index
+# Source: guide/ultimate-guide.md
+# Purpose: Condensed index for LLMs to quickly answer user questions about Claude Code
+
+version: "3.29.0"
+updated: "2026-02-26"
+
+# ════════════════════════════════════════════════════════════════
+# DEEP DIVE - Line numbers in guide/ultimate-guide.md
+# Usage: Read file at line N for detailed documentation on topic
+# For architecture internals, see guide/architecture.md
+# ════════════════════════════════════════════════════════════════
+deep_dive:
+ # Visual Diagrams Series (40 Mermaid diagrams)
+ mermaid_diagrams:
+ path: "guide/diagrams/"
+ description: "41 interactive Mermaid diagrams: model selection, agent lifecycle, memory hierarchy, security threats, multi-agent patterns, AI fluency paths"
+ files: 10
+ total_diagrams: 40
+ # AI-Assisted Development Workflows (from MetalBear/arXiv research)
+ exploration_workflow: "guide/workflows/exploration-workflow.md"
+ script_generation: "guide/workflows/iterative-refinement.md:200"
+ anti_anchoring_prompts: "examples/semantic-anchors/anchor-catalog.md:248"
+ session_limits: "guide/architecture.md:442"
+ claudemd_sizing: 3054
+ scope_success_rates: "guide/adoption-approaches.md:26"
+ # Claude Code Releases
+ claude_code_releases: "guide/claude-code-releases.md"
+ claude_code_releases_yaml: "machine-readable/claude-code-releases.yaml"
+ # Code Review Automation (Pat Cullen, Jan 2026)
+ review_pr_advanced: "examples/commands/review-pr.md:81"
+ review_anti_hallucination: "examples/agents/code-reviewer.md:77"
+ review_auto_fix_loop: "guide/workflows/iterative-refinement.md:353"
+ # Review Plan Command (Garry Tan-inspired, Feb 2026)
+ review_plan_command: "examples/commands/review-plan.md"
+ # GitHub Actions: Prompt-Based Code Review (Feb 2026)
+ github_actions_code_review_workflow: "examples/github-actions/claude-code-review.yml"
+ github_actions_code_review_prompt: "examples/github-actions/prompts/code-review.md"
+ github_actions_code_review_pattern: "externalized prompt + anti-hallucination protocol + /claude-review on-demand trigger"
+ github_actions_code_review_tools: "Read, Glob, Grep + GitHub PR inspection (read-only)"
+ github_actions_code_review_auth: "OAuth token (Claude Max plan, 0$ API) or ANTHROPIC_API_KEY"
+ github_actions_cost_per_review: "0$ with OAuth/Max plan; ~0.05-0.15$ with API key (Sonnet, ~5K tokens diff)"
+ # Rules Templates (auto-loaded .claude/rules/)
+ rules_templates_directory: "examples/rules/"
+ rules_architecture_review: "examples/rules/architecture-review.md"
+ rules_code_quality_review: "examples/rules/code-quality-review.md"
+ rules_test_review: "examples/rules/test-review.md"
+ rules_performance_review: "examples/rules/performance-review.md"
+ # Team Configuration at Scale (Profile-Based Module Assembly)
+ team_ai_instructions_section: "guide/ultimate-guide.md#35-team-configuration-at-scale"
+ team_ai_instructions_workflow: "guide/workflows/team-ai-instructions.md"
+ team_ai_instructions_profile_template: "examples/team-config/profile-template.yaml"
+ team_ai_instructions_skeleton: "examples/team-config/claude-skeleton.md"
+ team_ai_instructions_sync_script: "examples/team-config/sync-script.ts"
+ team_ai_instructions_pattern: "profiles YAML + shared modules + skeleton + assembler script"
+ team_ai_instructions_problem: "N devs × M tools × P OS = fragmented AI instructions"
+ team_ai_instructions_token_savings: "59% context token reduction (measured, 5-dev team)"
+ team_ai_instructions_threshold: "Team 5+ devs with multiple AI tools"
+ # Known Issues & Critical Bugs (verified community reports)
+ known_issues: "guide/known-issues.md"
+ known_issues_github_bug: "guide/known-issues.md:7" # GitHub auto-creation bug
+ known_issues_token_consumption: "guide/known-issues.md:105" # Excessive token usage
+ known_issues_model_quality_aug2025: "guide/known-issues.md:197" # Resolved: Aug 2025 degradation
+ # Template Installation
+ install_templates_script: "scripts/install-templates.sh"
+ # Session management
+ session_search: "guide/observability.md:38"
+ session_search_script: "examples/scripts/session-search.sh"
+ cc_sessions_script: "examples/scripts/cc-sessions.py"
+ session_resume_limitations: "guide/observability.md:126"
+ session_cross_folder_migration: "guide/observability.md:126"
+ session_migration_manual: "guide/observability.md:126"
+ session_migration_risks: "guide/observability.md:126"
+ session_migration_community_tool: "guide/observability.md:52"
+ session_migration_issue: "https://github.com/anthropics/claude-code/issues/1516"
+ session_migration_weller_skill: "https://github.com/jimweller/dotfiles/tree/main/dotfiles/claude-code/skills/claude-migrate-session"
+ # Activity monitoring
+ activity_monitoring: "guide/observability.md:467" # Tool call audit via JSONL
+ activity_monitoring_queries: "guide/observability.md:467" # jq queries for audit
+ activity_monitoring_alerts: "guide/observability.md:467" # Sensitive pattern detection
+ external_monitoring_tools: "guide/observability.md:527" # ccusage, claude-code-otel, Akto, MLflow, ccboard
+ proxying_claude_code: "guide/observability.md:699" # Proxyman, mitmproxy, ANTHROPIC_API_URL
+ ccboard_activity_plan: "docs/resource-evaluations/ccboard-activity-module-plan.md"
+ # Cost optimization - Local execution bridge
+ bridge_script: "examples/scripts/bridge.py"
+ bridge_schema: "examples/scripts/bridge-plan-schema.json"
+ bridge_guide: "guide/ultimate-guide.md:20003"
+ # Cost optimization - RTK (Rust Token Killer)
+ rtk_upstream: "https://github.com/rtk-ai/rtk"
+ rtk_website: "https://www.rtk-ai.app/"
+ rtk_evaluation: "docs/resource-evaluations/rtk-evaluation.md"
+ rtk_guide: "guide/ultimate-guide.md:14553"
+ rtk_third_party: "guide/third-party-tools.md:7"
+ rtk_claude_md: "examples/claude-md/rtk-optimized.md"
+ rtk_skill: "examples/skills/rtk-optimizer/SKILL.md"
+ rtk_hook: "examples/hooks/bash/rtk-auto-wrapper.sh"
+ rtk_purpose: "Command output filtering before LLM context (60-90% avg reduction)"
+ rtk_version_tested: "v0.16.0"
+ rtk_score: "5/5"
+ rtk_installation: "cargo install rtk or brew install rtk-ai/tap/rtk"
+ # Google Antigravity (Agent-First IDE)
+ antigravity_guide: "guide/ai-ecosystem.md:1366"
+ antigravity_evaluation: "docs/resource-evaluations/google-antigravity-evaluation.md"
+ antigravity_proxy: "https://www.npmjs.com/package/antigravity-claude-proxy"
+ antigravity_codelabs: "https://codelabs.developers.google.com/getting-started-google-antigravity"
+ antigravity_vs_claude: "Claude Code = terminal-first predictability; Antigravity = agent-first autonomy"
+ # PDF Generation
+ pdf_generation: "guide/workflows/pdf-generation.md"
+ pdf_generator_skill: "examples/skills/pdf-generator.md"
+ # Talk Preparation Pipeline (6-stage: extract → research → concepts → position → script → revision)
+ talk_pipeline_workflow: "guide/workflows/talk-pipeline.md"
+ talk_pipeline_skills: "examples/skills/talk-pipeline/"
+ talk_pipeline_orchestrator: "examples/skills/talk-pipeline/orchestrator/SKILL.md"
+ talk_pipeline_stage1: "examples/skills/talk-pipeline/stage-1-extract/SKILL.md"
+ talk_pipeline_stage2: "examples/skills/talk-pipeline/stage-2-research/SKILL.md"
+ talk_pipeline_stage3: "examples/skills/talk-pipeline/stage-3-concepts/SKILL.md"
+ talk_pipeline_stage4: "examples/skills/talk-pipeline/stage-4-position/SKILL.md"
+ talk_pipeline_stage5: "examples/skills/talk-pipeline/stage-5-script/SKILL.md"
+ talk_pipeline_stage6: "examples/skills/talk-pipeline/stage-6-revision/SKILL.md"
+ talk_pipeline_kimi_template: "examples/skills/talk-pipeline/stage-5-script/templates/kimi-prompt-template.md"
+ talk_pipeline_feedback_template: "examples/skills/talk-pipeline/stage-4-position/templates/feedback-draft.md"
+ talk_pipeline_modes: "REX (git archaeology) | Concept (skip stage 2)"
+ talk_pipeline_outputs: "13-14 files REX mode, 10 files Concept mode"
+ talk_pipeline_patterns: "skill chaining + file-based state + tool permission scoping + human-in-the-loop gate + AI-to-AI handoff (Claude → Kimi)"
+ talk_pipeline_checkpoint: "Stage 4 CHECKPOINT: user selects angle + title before script starts"
+ talk_pipeline_kimi: "kimi.com (free) — copy-paste Stage 5 prompt for AI slide generation"
+ # reMarkable 2 + AI (guide/remarkable-ai.md)
+ remarkable_ai_guide: "guide/remarkable-ai.md"
+ remarkable_mcp_server: "guide/remarkable-ai.md#1-remarkable-mcp--le-game-changer"
+ remarkable_mcp_repo: "https://github.com/SamMorrowDrums/remarkable-mcp"
+ remarkable_ghostwriter: "guide/remarkable-ai.md#2-ghostwriter--interface-vision-llm"
+ remarkable_obsidian_sync: "guide/remarkable-ai.md#3-sync-remarkable--obsidian"
+ remarkable_ocr_pipeline: "guide/remarkable-ai.md#4-ocr--ai-pipeline-custom"
+ remarkable_ssh_tools: "guide/remarkable-ai.md#5-accès-ssh-et-outils-communautaires"
+ remarkable_meeting_workflow: "guide/remarkable-ai.md#10-meeting-notes--ai-summary"
+ remarkable_workflows_to_build: "guide/remarkable-ai.md#14-workflows-ai-augmentés-à-construire"
+ remarkable_getting_started: "guide/remarkable-ai.md#15-par-où-commencer"
+ remarkable_community: "https://github.com/reHackable/awesome-reMarkable"
+ # Whitepapers (FR + EN) — 9 focused whitepapers on Claude Code
+ whitepapers_url: "https://www.florian.bruniaux.com/guides"
+ whitepapers_fr: "whitepapers/fr/" # FR sources (Quarto .qmd)
+ whitepapers_en: "whitepapers/en/" # EN sources (Quarto .qmd)
+ whitepapers_topics: "foundations, prompting, customization, security, architecture, team, privacy, reference, agent-teams"
+ # Learning with AI (guide/learning-with-ai.md)
+ learning_quick_check: "guide/learning-with-ai.md:38"
+ learning_uval_protocol: "guide/learning-with-ai.md:218"
+ learning_claude_config: "guide/learning-with-ai.md:458"
+ learning_breaking_dependency: "guide/learning-with-ai.md:575"
+ learning_embracing_ai: "guide/learning-with-ai.md:623"
+ learning_30day_plan: "guide/learning-with-ai.md:815"
+ learning_red_flags: "guide/learning-with-ai.md:612"
+ # Productivity Research RCTs
+ productivity_rct_metr: "guide/learning-with-ai.md:925" # METR 2025: experienced devs 19% slower on large codebases despite perceiving 20% faster
+ productivity_rct_echoes: "guide/learning-with-ai.md:926" # Borg 2025: 30.7% faster (median), ~55.9% habitual users, no maintainability impact downstream
+ productivity_maintainability_empirical: "guide/learning-with-ai.md:926" # Empirical data on "AI code is unmaintainable" claim — blind RCT shows no significant difference
+ trust_calibration_maintainability_nuance: "guide/ultimate-guide.md:1097" # Nuance: defect rates ≠ maintenance burden (Borg et al. 2025)
+ learning_mode_template: "examples/claude-md/learning-mode.md"
+ learn_quiz_command: "examples/commands/learn/quiz.md"
+ learn_teach_command: "examples/commands/learn/teach.md"
+ learn_alternatives_command: "examples/commands/learn/alternatives.md"
+ learning_capture_hook: "examples/hooks/bash/learning-capture.sh"
+ # Anti-patterns
+ vibe_coding_trap: "guide/learning-with-ai.md:87"
+ vibe_coding_context_overload: 13097
+ vibe_coding_context_overload_source: "Jens Rusitschka, 'Vibe Coding, Level 2' (Jan 2026)"
+ vibe_coding_phased_strategy: 13097
+ # AI Traceability & Attribution (guide/ai-traceability.md) - Added 2026-01-24
+ ai_traceability_guide: "guide/ai-traceability.md"
+ ai_traceability_why: "guide/ai-traceability.md:29"
+ ai_traceability_disclosure_spectrum: "guide/ai-traceability.md:64"
+ ai_traceability_co_authored_by: "guide/ai-traceability.md:98"
+ ai_traceability_assisted_by: "guide/ai-traceability.md:120"
+ ai_traceability_git_ai: "guide/ai-traceability.md:170"
+ ai_traceability_llvm_policy: "guide/ai-traceability.md:201"
+ ai_traceability_ghostty_policy: "guide/ai-traceability.md:236"
+ ai_traceability_fedora_policy: "guide/ai-traceability.md:261"
+ ai_traceability_promptpwnd: "guide/ai-traceability.md:501"
+ ai_traceability_implementation: "guide/ai-traceability.md:566"
+ ai_traceability_templates: "guide/ai-traceability.md:648"
+ # AI Disclosure Templates
+ ai_disclosure_contributing: "examples/config/CONTRIBUTING-ai-disclosure.md"
+ ai_disclosure_pr_template: "examples/config/PULL_REQUEST_TEMPLATE-ai.md"
+ # TTS Integration (Agent Vibes) - Added 2026-01-22
+ tts_integration_guide: "examples/integrations/agent-vibes/README.md"
+ tts_installation: "examples/integrations/agent-vibes/installation.md"
+ tts_voice_catalog: "examples/integrations/agent-vibes/voice-catalog.md"
+ tts_troubleshooting: "examples/integrations/agent-vibes/troubleshooting.md"
+ tts_workflow: "guide/workflows/tts-setup.md"
+ tts_ai_ecosystem: "guide/ai-ecosystem.md:1124"
+ tts_hook_example: "examples/hooks/bash/tts-selective.sh"
+ tts_claude_md_template: "examples/claude-md/tts-enabled.md"
+ # Sandbox Isolation for Coding Agents (guide/sandbox-isolation.md) - Added 2026-01-31
+ sandbox_isolation_guide: "guide/sandbox-isolation.md"
+ sandbox_isolation_decision_tree: "guide/sandbox-isolation.md:7"
+ sandbox_docker_sandboxes: "guide/sandbox-isolation.md:67"
+ sandbox_docker_network: "guide/sandbox-isolation.md:121"
+ sandbox_docker_templates: "guide/sandbox-isolation.md:165"
+ sandbox_docker_docs: "https://docs.docker.com/ai/sandboxes/"
+ sandbox_docker_claude_config: "https://docs.docker.com/ai/sandboxes/claude-code/"
+ sandbox_docker_network_docs: "https://docs.docker.com/ai/sandboxes/network-policies/"
+ sandbox_docker_templates_docs: "https://docs.docker.com/ai/sandboxes/templates/"
+ sandbox_flyio_sprites: "https://sprites.dev"
+ sandbox_cloudflare_sdk: "https://developers.cloudflare.com/sandbox/tutorials/claude-code/"
+ sandbox_vercel: "https://vercel.com/docs/vercel-sandbox/"
+ sandbox_e2b: "https://e2b.dev"
+ sandbox_native_cc: "guide/architecture.md:606"
+ # Native Claude Code Sandbox (Official docs, v2.1.0+) - Added 2026-02-02
+ sandbox_native_guide: "guide/sandbox-native.md"
+ sandbox_native_why: "guide/sandbox-native.md:47" # Why Native Sandboxing
+ sandbox_native_os_primitives: "guide/sandbox-native.md:68" # Seatbelt vs bubblewrap
+ sandbox_native_filesystem: "guide/sandbox-native.md:178" # Filesystem isolation
+ sandbox_native_network: "guide/sandbox-native.md:221" # Network proxy architecture
+ sandbox_native_modes: "guide/sandbox-native.md:7" # Auto-allow vs Regular
+ sandbox_native_escape_hatch: "guide/sandbox-native.md:341" # dangerouslyDisableSandbox
+ sandbox_native_security_limits: "guide/sandbox-native.md:396" # Domain fronting, Unix sockets
+ sandbox_native_opensource: "guide/sandbox-native.md:481" # Open-source runtime
+ sandbox_native_platforms: "guide/sandbox-native.md:505" # Platform support
+ sandbox_native_decision_tree: "guide/sandbox-native.md:517" # Native vs Docker
+ sandbox_native_config_examples: "guide/sandbox-native.md:564" # Configuration examples
+ sandbox_native_best_practices: "guide/sandbox-native.md:637" # Best practices
+ sandbox_native_troubleshooting: "guide/sandbox-native.md:650" # Troubleshooting
+ sandbox_runtime_oss: "https://github.com/anthropic-experimental/sandbox-runtime"
+ sandbox_runtime_npm: "https://www.npmjs.com/package/@anthropic-ai/sandbox-runtime"
+ sandbox_official_docs: "https://code.claude.com/docs/en/sandboxing"
+ sandbox_comparison_native_docker: "guide/sandbox-isolation.md:238" # Section 4 Native CC
+ sandbox_native_evaluation: "docs/resource-evaluations/native-sandbox-official-docs.md"
+ sandbox_native_score: "5/5"
+ # Templates (Added 2026-02-02)
+ sandbox_native_config_template: "examples/config/sandbox-native.json"
+ sandbox_status_command: "examples/commands/sandbox-status.md"
+ sandbox_validation_hook: "examples/hooks/bash/sandbox-validation.sh"
+ # Docker Sandboxes (existing)
+ sandbox_evaluation: "docs/resource-evaluations/docker-sandboxes-isolation.md"
+ sandbox_safe_autonomy: "guide/sandbox-isolation.md:496" # Safe Autonomy Workflows
+ sandbox_anti_patterns: "guide/sandbox-isolation.md:546" # Anti-Patterns
+ sandbox_comparison_matrix: "guide/sandbox-isolation.md:477" # Comparison Matrix
+ sandbox_score: "4/5"
+ # Third-Party Tools (guide/third-party-tools.md) - Added 2026-02-01
+ third_party_tools_guide: "guide/third-party-tools.md"
+ third_party_tools_cost_tracking: "guide/third-party-tools.md:42"
+ third_party_tools_rtk: "guide/third-party-tools.md:7"
+ third_party_tools_session_mgmt: "guide/third-party-tools.md:126"
+ third_party_tools_config_mgmt: "guide/third-party-tools.md:214"
+ third_party_tools_alternative_uis: "guide/third-party-tools.md:259"
+ third_party_tools_known_gaps: "guide/third-party-tools.md:375"
+ third_party_tools_recommendations: "guide/third-party-tools.md:391"
+ third_party_ccusage: "https://www.npmjs.com/package/ccusage"
+ third_party_ccusage_site: "https://ccusage.com"
+ third_party_ccburn: "https://github.com/JuanjoFuchs/ccburn"
+ third_party_claude_code_viewer: "https://www.npmjs.com/package/@kimuson/claude-code-viewer"
+ third_party_claude_code_config: "https://github.com/joeyism/claude-code-config"
+ third_party_aiblueprint: "https://github.com/Melvynx/aiblueprint"
+ third_party_claude_chic: "https://pypi.org/project/claudechic/"
+ third_party_toad: "https://github.com/batrachianai/toad"
+ third_party_conductor: "https://docs.conductor.build"
+ # Configuration Management & Backup (Added 2026-02-02)
+ config_management_guide: "guide/ultimate-guide.md:4217" # Section 3.1 Memory Files
+ config_hierarchy: "guide/ultimate-guide.md:4336" # Global → Project → Local precedence
+ config_git_strategy_project: "guide/ultimate-guide.md:4634" # What Goes Where
+ config_git_strategy_global: "guide/ultimate-guide.md:4634" # Version control ~/.claude/
+ config_backup_strategies: "guide/ultimate-guide.md:4634" # Git, cloud sync, cron
+ config_multi_machine_sync: "guide/ultimate-guide.md:4634" # Laptop + desktop workflows
+ config_security_considerations: "guide/ultimate-guide.md:4419" # CLAUDE.md Injection warning
+ config_disaster_recovery: "guide/ultimate-guide.md:4634" # Restore from backup
+ config_community_solutions: "guide/ultimate-guide.md:4634" # brianlovin + Ratinaud
+ config_github_issue: "https://github.com/anthropics/claude-code/issues/16204" # Migration guidance request
+ config_brianlovin_repo: "https://github.com/brianlovin/claude-config" # Community example with sync.sh
+ config_ratinaud_approach: "https://www.linkedin.com/posts/martinratinaud_claudecode-devtools-buildinpublic-activity-7424055660247629824-hBsL" # 504 sessions tested
+ config_ratinaud_evaluation: "docs/resource-evaluations/ratinaud-config-management-evaluation.md" # Full evaluation
+ # MCP Secrets Management (Added 2026-02-02)
+ mcp_secrets_management: "guide/ultimate-guide.md:10589" # Section 8.3.1
+ mcp_secrets_principles: "guide/ultimate-guide.md:10589" # Security principles
+ mcp_secrets_os_keychain: "guide/ultimate-guide.md:10589" # Approach 1: OS Keychain
+ mcp_secrets_env_file: "guide/ultimate-guide.md:10589" # Approach 2: .env + .gitignore
+ mcp_secrets_vaults: "guide/ultimate-guide.md:10589" # Approach 3: HashiCorp Vault, AWS, 1Password
+ mcp_secrets_rotation: "guide/ultimate-guide.md:10589" # Rotation workflow
+ mcp_secrets_pre_commit: "guide/ultimate-guide.md:8417" # Security Hooks section
+ mcp_secrets_verification: "guide/ultimate-guide.md:10589" # Verification checklist
+ mcp_secrets_best_practices: "guide/ultimate-guide.md:10589" # Summary table
+ # Templates & Scripts (Configuration Management)
+ sync_claude_config_script: "examples/scripts/sync-claude-config.sh" # Full automation script
+ pre_commit_secrets_hook: "examples/hooks/bash/pre-commit-secrets.sh" # Git hook for secret detection
+ settings_local_example: "examples/config/settings.local.json.example" # Machine-specific overrides template
+ # Tool-qualified deny format (Added 2026-02-26)
+ permissions_deny_tool_qualified: "guide/ultimate-guide.md:5008" # Permission Patterns table + full example
+ # Terminal personalization (Added 2026-02-27)
+ spinner_personalization: "guide/ultimate-guide.md:4978" # spinnerVerbs + spinnerTipsOverride settings
+ permissions_deny_tool_qualified_syntax: "Read(file_path:*.env*) | Edit(file_path:*.pem) | Write(file_path:*.key) | Bash(command:*rm -rf*)"
+ permissions_deny_tool_qualified_vs_simple: "file_path: glob matches full path arg; simple '*.env' matches filename only"
+ permissions_deny_known_limitation: "background indexing may expose via system reminders before checks — GitHub #4160"
+ permissions_deny_defense_in_depth: "store secrets outside project dir for guaranteed protection"
+ # Visual Reference (ASCII diagrams)
+ visual_reference: "guide/visual-reference.md"
+ # Architecture internals (guide/architecture.md)
+ architecture_visual_overview: "guide/architecture.md:51"
+ architecture_visual_source: "https://www.linkedin.com/posts/mohamed-ali-ben-salem-2b777b9a_en-ce-moment-je-vois-passer-des-posts-du-activity-7420592149110362112-eY5a"
+ architecture_master_loop: "guide/architecture.md:82"
+ architecture_tools: "guide/architecture.md:219"
+ architecture_context: "guide/architecture.md:312"
+ architecture_subagents: "guide/architecture.md:471"
+ architecture_permissions: "guide/architecture.md:541"
+ architecture_mcp: "guide/architecture.md:746"
+ architecture_mcp_visual: "guide/images/mcp-architecture-diagram.svg"
+ architecture_philosophy: "guide/architecture.md:1205"
+ # Official LLM-Optimized Documentation - Added 2026-02-25
+ official_llms_index: "https://code.claude.com/docs/llms.txt" # Index ~65 pages, ~15-20K tokens — use first for discovery
+ official_llms_full: "https://code.claude.com/docs/llms-full.txt" # Full doc ~98KB, ~25-30K tokens — source de vérité officielle
+ # System Prompts (Official Sources) - Added 2026-01-26
+ system_prompts_official: "https://platform.claude.com/docs/en/release-notes/system-prompts"
+ system_prompts_willison_analysis: "https://simonwillison.net/2025/May/25/claude-4-system-prompt/"
+ system_prompts_prompthub: "https://www.prompthub.us/blog/an-analysis-of-the-claude-4-system-prompt"
+ system_prompts_architecture: "guide/architecture.md:360"
+ # MCP Apps Extension (SEP-1865) - Added 2026-01-27
+ mcp_apps_architecture: "guide/architecture.md:753"
+ mcp_apps_evolution: "guide/ultimate-guide.md:9252"
+ mcp_apps_spec: "https://github.com/modelcontextprotocol/ext-apps"
+ mcp_apps_blog_mcp: "https://blog.modelcontextprotocol.io/posts/2026-01-26-mcp-apps/"
+ mcp_apps_blog_claude: "https://claude.com/blog/interactive-tools-in-claude"
+ mcp_apps_sdk: "https://www.npmjs.com/package/@modelcontextprotocol/ext-apps"
+ mcp_apps_announcement_date: "2026-01-26"
+ mcp_apps_cli_relevance: "Indirect (ecosystem understanding, MCP server dev, hybrid workflows)"
+ # Main guide (guide/ultimate-guide.md) - Updated 2026-01-27
+ installation: 221
+ first_workflow: 305
+ essential_commands: 47
+ trust_calibration: 1039
+ working_with_images: 450
+ wireframing_tools: 520
+ figma_mcp: 569
+ image_optimization: 594
+ permission_modes: 818
+ interaction_loop: 1364
+ context_management: 1335
+ context_triage: 1520
+ session_vs_memory: 1553
+ fresh_context_pattern: 1597
+ subscription_limits: 1933
+ subscription_token_budgets: 1948
+ subscription_opus_ratio: 1946
+ subscription_monitoring: 2113
+ plan_mode: 576
+ rewind: 2566
+ mental_model: 2815
+ xml_prompting: 3016
+ prompting_provocation: 3469
+ prompting_provocation_source: "https://paddo.dev/blog/claude-code-team-tips/"
+ semantic_anchors: 3503
+ semantic_anchors_catalog: "examples/semantic-anchors/anchor-catalog.md"
+ memory_files: 4205
+ # Auto-Memories (v2.1.32+) - Added 2026-02-09
+ auto_memories: 4439
+ auto_memories_vs_claudemd: 4439
+ # Fast Mode (v2.1.36+) - Added 2026-02-09
+ fast_mode_command: 720 # /fast in commands table
+ fast_mode_api: 720 # API breaking changes section
+ fast_mode_pricing: 1788 # Pricing table
+ fast_mode_behavior: "2.5x faster, 6x price, same Opus 4.6 model"
+ # Sonnet 4.6 + 1M Context (Feb 2026) - Added 2026-02-18
+ sonnet_4_6_default: 1887 # Pricing table, Sonnet 4.6 now default
+ context_200k_vs_1m: 1793 # Decision guide: 200K vs 1M context window
+ context_200k_vs_1m_perf: "Opus 4.6: 93% @ 256K, 76% @ 1M (MRCR v2). Sonnet 4.6 scores not yet published."
+ context_200k_vs_1m_cost: "Sonnet 4.6: ~$0.23 bug fix, ~$0.75 module refactor, ~$2.25 full 1M session"
+ context_1m_beta_requirement: "API only, requires anthropic-beta header. Opus: pricing doubles >200K."
+ # Debug Command (v2.1.30+) - Added 2026-02-09
+ debug_command: 47 # Essential Commands table
+ debug_purpose: "Systematic troubleshooting and error investigation"
+ # Model Selection & Thinking Guide (Section 2.5) - Added 2026-02-21
+ model_selection_guide: 2704 # Section 2.5 — canonical table, effort levels, agent patterns
+ model_selection_anchor: "#25-model-selection--thinking-guide"
+ # Configuration Decision Guide (Section 2.7) - Added 2026-02-22
+ configuration_decision_guide: 2872 # Section 2.7 — mechanism comparison, decision tree, 56% warning
+ configuration_decision_guide_anchor: "#27-configuration-decision-guide"
+ mechanism_comparison_table: 2960 # Semantic roles + mechanism comparison tables
+ fifty_six_percent_warning: 2955 # Section 2.7 Configuration Decision Guide
+ planner_agent: "examples/agents/planner.md"
+ implementer_agent: "examples/agents/implementer.md"
+ architecture_reviewer_agent: "examples/agents/architecture-reviewer.md"
+ # Opus 4.6 Features (Feb 2026) - Added 2026-02-09, line numbers updated 2026-02-21
+ opus_4_6_adaptive_thinking: 11622
+ opus_4_6_effort_parameter: 11636
+ opus_4_6_pricing: 1788
+ opus_4_6_api_breaking_changes: 11734
+ opus_4_6_assistant_prefill_removed: 11737
+ # Summarize from Here (v2.1.32+) - Added 2026-02-09
+ summarize_from_here: 1506 # Context Recovery Strategies section
+ # Agent Teams Hook Events (v2.1.32+) - Added 2026-02-09
+ hook_teammate_idle: 7934
+ hook_task_completed: 7935
+ # Agent Memory Field (v2.1.32+) - Added 2026-02-09
+ agent_memory_frontmatter: 5636 # Agent Template section (memory field in frontmatter)
+ # Xcode Integration (Feb 2026) - Added 2026-02-09
+ xcode_integration: 12556
+ claude_agent_sdk: 12558
+ # Task Management System (v2.1.16+) - Added 2026-01-26
+ task_management_system: 3726
+ task_management_comparison: 3732
+ tasks_api_overview: 973
+ tasks_api_tools: 3746
+ tasks_api_capabilities: 3752
+ tasks_api_configuration: 3759
+ tasks_api_schema: 3773
+ tasks_api_when_to_use: 3790
+ tasks_api_limitations: 3796
+ tasks_api_field_visibility: "TaskList: id/subject/status/owner/blockedBy only. TaskGet: all fields."
+ tasks_api_cost_overhead: "Reviewing N task descriptions = 1 + N API calls"
+ tasks_api_workarounds: 3819
+ todowrite_legacy: 3837
+ todowrite_when_to_use: 3846
+ todowrite_migration_flag: 3855
+ task_best_practices: 3862
+ task_hierarchy_design: 3726
+ task_dependency_management: 3726
+ task_status_transitions: 3756
+ task_metadata_conventions: 3757
+ task_complete_workflow: 3947
+ task_sources: 3835
+ # Task Management Workflow (guide/workflows/task-management.md)
+ workflows_task_management: "guide/workflows/task-management.md"
+ task_workflow_overview: "guide/workflows/task-management.md:15"
+ task_workflow_planning: "guide/workflows/task-management.md:52"
+ task_workflow_execution: "guide/workflows/task-management.md:137"
+ task_workflow_session_mgmt: "guide/workflows/task-management.md:215"
+ task_workflow_tdd_integration: "guide/workflows/task-management.md:312"
+ task_workflow_plan_integration: "guide/workflows/task-management.md:367"
+ task_workflow_migration: "guide/workflows/task-management.md:439"
+ task_workflow_patterns: "guide/workflows/task-management.md:525"
+ task_workflow_troubleshooting: "guide/workflows/task-management.md:667"
+ task_workflow_advanced: "guide/workflows/task-management.md:741"
+ claude_folder: 4595
+ settings: 4879
+ precedence_rules: 5103
+ agents: 5546
+ agent_template: 5636
+ agent_examples: 5836
+ skills: 6246
+ skill_template: 6384
+ skill_examples: 6452
+ design_patterns_skill: 6630
+ design_patterns_skill_location: "examples/skills/design-patterns/"
+ design_patterns_skill_modes: "Detection, Suggestion, Evaluation"
+ design_patterns_skill_patterns: "23 GoF patterns (Creational 5, Structural 7, Behavioral 11)"
+ design_patterns_skill_stacks: "React, Angular, NestJS, Vue, Express, RxJS, Redux, ORMs"
+ community_skills_cybersec: 6780
+ community_skills_iac: 6863
+ # Automatic skill generation (meta-skill)
+ claudeception: "https://github.com/blader/Claudeception"
+ claudeception_guide: 6915
+ # Skill Lifecycle: Automatic improvement (added 2026-01-24)
+ skill_lifecycle: 6246
+ claude_reflect_system: 6246
+ claude_reflect_system_repo: "https://github.com/haddock-development/claude-reflect-system"
+ claude_reflect_system_agent_skills: "https://agent-skills.md/skills/haddock-development/claude-reflect-system/reflect"
+ skill_improvement_pattern: 6630
+ skill_improvement_how_it_works: 6630
+ skill_improvement_safety: 6373
+ skill_improvement_security_warnings: 6373
+ skill_improvement_comparison: 6250
+ skill_improvement_workflow: 6328
+ # Design Intelligence Skill (added 2026-02-23)
+ ui_ux_pro_max: "https://github.com/nextlevelbuilder/ui-ux-pro-max-skill"
+ ui_ux_pro_max_site: "https://ui-ux-pro-max-skill.nextlevelbuilder.io"
+ ui_ux_pro_max_guide: 7092
+ ui_ux_pro_max_stars: 33700
+ ui_ux_pro_max_styles: 67
+ ui_ux_pro_max_palettes: 96
+ # Agent Skills Open Standard (added 2026-02-01)
+ agentskills_spec: "https://agentskills.io"
+ agentskills_spec_repo: "https://github.com/agentskills/agentskills"
+ agentskills_spec_stars: "8.2K"
+ agentskills_platforms: "26+ (Claude Code, Cursor, VS Code, GitHub, Codex, Gemini CLI, Goose, Roo Code, Spring AI, Databricks...)"
+ agentskills_ref_cli: "https://github.com/agentskills/agentskills/tree/main/skills-ref"
+ agentskills_ref_cli_usage: "skills-ref validate | skills-ref to-prompt "
+ anthropics_skills_repo: "https://github.com/anthropics/skills"
+ anthropics_skills_stars: "60K+"
+ anthropics_skills_categories: "Documents (docx/pdf/pptx/xlsx), Creative & Design, Development, Enterprise"
+ anthropics_skills_install: "/plugin marketplace add anthropics/skills"
+ anthropics_plugins_official_repo: "https://github.com/anthropics/claude-plugins-official"
+ anthropics_plugins_official_installs: "3.1K"
+ anthropics_plugins_official_skills: "claude-md-improver, claude-automation-recommender, playground, plugin dev meta-skills"
+ anthropics_plugins_official_install: "npx add-skill anthropics/claude-plugins-official"
+ agentskills_threat_model: "https://safedep.io/agent-skills-threat-model"
+ agentskills_threat_model_finding: "8-14% of public skills have vulnerabilities (prompt injection, data exfiltration, privilege escalation)"
+ agentskills_blog: "https://anthropic.com/engineering/equipping-agents-for-the-real-world-with-agent-skills"
+ agentskills_guide_section: "guide/ultimate-guide.md:6383"
+ agentskills_evaluation: "docs/resource-evaluations/agentskills-io-specification.md"
+ agentskills_score: "4/5"
+ # claude-code-best-practice repo evaluations (Added 2026-02-26)
+ ccbp_repo_evaluation: "docs/resource-evaluations/069-claude-code-best-practice-repo-eval.md"
+ ccbp_repo_score: "4/5"
+ ccbp_repo_source: "https://github.com/shanraisshan/claude-code-best-practice"
+ ccbp_repo_critical_finding: "bug at guide/ultimate-guide.md:5646 — official agent fields misclassified as community patterns (fixed)"
+ ccbp_dotclaude_evaluation: "docs/resource-evaluations/070-claude-code-best-practice-dot-claude-eval.md"
+ ccbp_dotclaude_score: "4/5"
+ ccbp_dotclaude_patterns: "self-evolving agent, Command→Agent→Skills architecture, allowed-tools wildcard scoping"
+ # Skills Marketplace (added 2026-01-23)
+ skills_marketplace: 7212
+ skills_marketplace_url: "https://skills.sh/"
+ skills_marketplace_github: "https://github.com/vercel-labs/agent-skills"
+ skills_marketplace_install: "npx add-skill "
+ skills_marketplace_top_skills:
+ - "vercel-react-best-practices: 35K+ installs"
+ - "web-design-guidelines: 26.6K installs"
+ - "supabase-postgres-best-practices: 1K+ installs"
+ - "better-auth-best-practices: 2K+ installs"
+ - "test-driven-development: 721 installs"
+ skills_marketplace_status: "Community (Vercel Labs), launched Jan 21, 2026"
+ skills_marketplace_changelog: "https://vercel.com/changelog/introducing-skills-the-open-agent-skills-ecosystem"
+ # Plugin System & Community Marketplaces (updated 2026-01-24)
+ plugins_system: 11048
+ plugins_commands: 11062
+ plugins_marketplace: 11100
+ plugins_community_marketplaces: 11358 # New section with ecosystem stats
+ plugins_recommended: "examples/plugins/"
+ plugins_se_cove: "examples/plugins/se-cove.md"
+ plugins_official_docs: "https://code.claude.com/docs/en/plugins"
+ plugins_official_reference: "https://code.claude.com/docs/en/plugins-reference"
+ plugins_official_marketplaces: "https://code.claude.com/docs/en/plugin-marketplaces"
+ # Community plugin resources
+ plugins_wshobson_agents:
+ url: "https://github.com/wshobson/agents"
+ stats: "67 plugins, 99 agents, 107 skills"
+ updated: "2026-01-24"
+ plugins_registry_claude_plugins_dev:
+ url: "https://claude-plugins.dev"
+ stats: "11,989 plugins, 63,065 skills indexed"
+ plugins_registry_claudemarketplaces:
+ url: "https://claudemarketplaces.com"
+ purpose: "Auto-scan GitHub for .claude-plugin/marketplace.json"
+ plugins_popular:
+ - "Context7: ~72k installs (library docs lookup)"
+ - "Ralph Wiggum: ~57k installs (code review)"
+ - "Figma MCP: ~18k installs (design-to-code)"
+ - "Linear MCP: ~9.5k installs (issue tracking)"
+ plugins_awesome_list: "https://github.com/hesreallyhim/awesome-claude-code"
+ plugins_awesome_list_stars: "20k+"
+ chain_of_verification: "guide/methodologies.md:230"
+ chain_of_verification_paper: "https://arxiv.org/abs/2309.11495"
+ chain_of_verification_acl: "https://aclanthology.org/2024.findings-acl.212/"
+ # Verification Loops & Eval Harness (added 2026-01-23)
+ verification_loops: "guide/methodologies.md:245"
+ verification_loops_source: "https://www.anthropic.com/engineering/claude-code-best-practices"
+ eval_harness: "guide/methodologies.md:289"
+ eval_harness_source: "https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents"
+ # GSD (Get Shit Done) methodology (added 2026-01-25)
+ gsd_methodology: "guide/methodologies.md:53"
+ gsd_evaluation: "docs/resource-evaluations/gsd-evaluation.md"
+ gsd_source: "https://github.com/glittercowboy/get-shit-done"
+ gsd_note: "Overlap with existing patterns (Ralph Loop, Gas Town, BMAD)"
+ # Resource Evaluations (added 2026-01-26, updated 2026-02-07)
+ resource_evaluations_directory: "docs/resource-evaluations/"
+ resource_evaluations_count: 84
+ resource_evaluations_methodology: "docs/resource-evaluations/README.md"
+ resource_evaluations_watchlist: "docs/resource-evaluations/watch-list.md"
+ resource_evaluations_appendix: "guide/ultimate-guide.md:20886"
+ resource_evaluations_readme_section: "README.md:307"
+ resource_evaluations_git_mcp: "docs/resource-evaluations/git-mcp-server-evaluation.md"
+ resource_evaluations_anaconda_croce: "docs/resource-evaluations/anaconda-croce-evaluation.md"
+ resource_evaluations_grenier_quality: "docs/resource-evaluations/grenier-agent-skill-quality.md"
+ resource_evaluations_grenier_score: "3/5"
+ resource_evaluations_grenier_gap: "No automated quality checks for agents/skills (29.5% deploy without evaluation per LangChain 2026)"
+ resource_evaluations_grenier_integration: "Created /audit-agents-skills command + skill + criteria.yaml"
+ # Agent/Skill Quality Audit (added 2026-02-07)
+ audit_agents_skills_command: "examples/commands/audit-agents-skills.md"
+ audit_agents_skills_skill: "examples/skills/audit-agents-skills/SKILL.md"
+ audit_agents_skills_criteria: "examples/skills/audit-agents-skills/scoring/criteria.yaml"
+ audit_agents_skills_framework: "16 criteria (Identity 3x, Prompt 2x, Validation 1x, Design 2x)"
+ audit_agents_skills_scoring: "32 points max (agents/skills), 20 points (commands)"
+ audit_agents_skills_grades: "A-F scale, 80% production threshold"
+ audit_agents_skills_modes: "Quick (top-5), Full (all 16), Comparative (vs templates)"
+ audit_agents_skills_output: "Markdown + JSON for CI/CD integration"
+ audit_agents_skills_industry_context: "29.5% deploy without evaluation (LangChain 2026), 18% cite agent bugs as top challenge"
+ audit_agents_skills_guide_refs: "guide/ultimate-guide.md:4951 (after Agent Validation Checklist), guide/ultimate-guide.md:5495 (after Skill Validation)"
+ # Practitioner Insights (external validation)
+ practitioner_insights: "guide/ai-ecosystem.md:2170"
+ practitioner_dave_van_veen: "guide/ai-ecosystem.md:2174"
+ practitioner_matteo_collina: "guide/ai-ecosystem.md:2203"
+ # Outcome Engineering (o16g) - Emerging manifesto (2026-02-13)
+ outcome_engineering_o16g: "guide/ai-ecosystem.md:2366"
+ outcome_engineering_url: "https://o16g.com/"
+ outcome_engineering_author: "Cory Ondrejka (CTO Onebrief, co-creator Second Life, ex-VP Google/Meta)"
+ outcome_engineering_status: "Emerging - on watch list for community adoption"
+ practitioner_collina_source: "https://adventures.nodeland.dev/archive/the-human-in-the-loop/"
+ practitioner_steinberger: "guide/ai-ecosystem.md:2242"
+ practitioner_steinberger_source: "https://steipete.me/posts/2025/shipping-at-inference-speed"
+ practitioner_addy_osmani: "guide/ai-ecosystem.md:2269"
+ practitioner_osmani_source: "https://addyo.substack.com/p/the-80-problem-in-agentic-coding"
+ practitioner_alan: "guide/ai-ecosystem.md:2299"
+ practitioner_alan_source: "https://www.linkedin.com/pulse/le-principe-de-la-tour-eiffel-et-ralph-wiggum-maxime-le-bras-psmxe/"
+ verification_paradox: "guide/production-safety.md:639"
+ verification_paradox_source: "https://www.linkedin.com/pulse/le-principe-de-la-tour-eiffel-et-ralph-wiggum-maxime-le-bras-psmxe/"
+ eighty_percent_problem: "guide/ai-ecosystem.md:2269"
+ comprehension_debt_secondary: "guide/ai-ecosystem.md:2269" # See also: vibe_coding_trap (primary)
+ # DevOps/SRE Guide (guide/devops-sre.md)
+ devops_sre_guide: "guide/devops-sre.md"
+ devops_fire_framework: "guide/devops-sre.md:46"
+ devops_k8s_troubleshooting: "guide/devops-sre.md:129"
+ devops_k8s_prompts: "guide/devops-sre.md:151"
+ devops_incident_response: "guide/devops-sre.md:333"
+ devops_iac_patterns: "guide/devops-sre.md:504"
+ devops_guardrails: "guide/devops-sre.md:687"
+ devops_limitations: "guide/devops-sre.md:297"
+ devops_quick_reference: "guide/devops-sre.md:794"
+ devops_agent: "examples/agents/devops-sre.md"
+ devops_claude_md: "examples/claude-md/devops-sre.md"
+ # Product Designer (design-to-code workflow)
+ product_designer_workflow: "guide/workflows/design-to-code.md"
+ product_designer_claudemd: "examples/claude-md/product-designer.md"
+ design_system_handoff: "guide/workflows/design-to-code.md:263"
+ figma_make_integration: "guide/workflows/design-to-code.md:85"
+ pencil_canvas: "guide/ultimate-guide.md:528"
+ pencil_workflow: "guide/workflows/design-to-code.md:453"
+ pencil_vs_figma: "guide/workflows/design-to-code.md:476"
+ commands: 47
+ command_template: 7592
+ hooks: 8077
+ hook_templates: 8155
+ security_hooks: 8161
+ security_gate_hook_line: 8481
+ security_gate_hook_source: "https://paddo.dev/blog/claude-code-team-tips/"
+ mcp_servers: 9204
+ serena_indexation: 9373
+ serena_mcp: 9373
+ doobidoo_memory_mcp: 10142
+ mcp_memory_stack_patterns: 10325
+ mcp_config: 10556
+ mcp_security: 11402
+ cicd: 11827
+ ide_integration: 12528
+ feedback_loops: 12613
+ batch_operations: 13243
+ pitfalls: 13366
+ git_best_practices: 13831
+ cost_optimization: 1784
+ session_teleportation: 15178
+ remote_control: 18833
+ multi_instance_workflows: 15283
+ boris_cherny_case_study: 15332
+ boris_cherny_team_patterns: 5492
+ # Dual-Instance Planning Pattern (Jon Williams, Feb 2026)
+ dual_instance_planning: 15385
+ dual_instance_workflow: "guide/workflows/dual-instance-planning.md"
+ dual_instance_overview: 15385
+ dual_instance_setup: "guide/workflows/dual-instance-planning.md:71"
+ dual_instance_complete_workflow: "guide/workflows/dual-instance-planning.md:145"
+ dual_instance_plan_template: "guide/workflows/dual-instance-planning.md:522"
+ dual_instance_cost_analysis: "guide/workflows/dual-instance-planning.md:614"
+ dual_instance_comparison: 15385 # Boris vs Jon comparison table
+ dual_instance_source: "https://www.linkedin.com/posts/thatjonwilliams_ive-been-using-cursor-for-six-months-now-activity-7424481861802033153-k8bu"
+ dual_instance_author: "Jon Williams (Product Designer, UK)"
+ dual_instance_date: "2026-02-03"
+ dual_instance_pattern: "Vertical separation (planner vs implementer) - orthogonal to Boris horizontal scaling"
+ dual_instance_cost: "$100-200/month (vs $500-1K Boris pattern)"
+ dual_instance_audience: "Solo devs, spec-heavy work, quality > speed"
+ # Boris Tane Pattern (Annotation Cycle, Feb 2026)
+ annotation_cycle_pattern: "guide/workflows/plan-driven.md#the-annotation-cycle"
+ custom_markdown_plans: "guide/workflows/plan-driven.md#why-custom-plans-over-plan"
+ boris_tane_source: "https://boristane.com/blog/how-i-use-claude-code/"
+ boris_tane_author: "Boris Tane (Engineering Lead, Cloudflare)"
+ # External resource: Claude Code team tips (paddo.dev, Feb 2026)
+ team_tips_paddo: "https://paddo.dev/blog/claude-code-team-tips/"
+ team_tips_paddo_source: "Boris Cherny thread (x.com/bcherny/status/2017742741636321619)"
+ team_tips_paddo_evaluation: "docs/resource-evaluations/paddo-team-tips-eval.md"
+ team_tips_paddo_score: "4/5"
+ anthropic_study_metrics: 11555
+ # Contribution Metrics (Jan 2026 - platform feature, not CLI release)
+ contribution_metrics: 15970
+ contribution_metrics_source: "https://claude.com/blog/contribution-metrics"
+ contribution_metrics_date: "2026-01-29"
+ contribution_metrics_availability: "Public beta - Team and Enterprise plans"
+ contribution_metrics_stats: "+67% PRs merged/engineer/day, 70-90% AI-assisted code (Anthropic internal)"
+ # Git Worktree Commands (Feb 2026)
+ git_worktree_command: "examples/commands/git-worktree.md"
+ git_worktree_status_command: "examples/commands/git-worktree-status.md"
+ git_worktree_remove_command: "examples/commands/git-worktree-remove.md"
+ git_worktree_clean_command: "examples/commands/git-worktree-clean.md"
+ git_worktrees_multi_instance: 14013
+ advanced_worktree_tooling: 15763
+ worktree_tooling_self_assessment: 15763
+ anthropic_internal_study: 15934
+ multi_instance_costs: 15283
+ orchestration_frameworks: 16029
+ headless_pm_framework: 11841
+ multi_instance_implementation: 15283
+ multi_instance_monitoring: 15283
+ multi_instance_decision_matrix: 15283
+ # External orchestration systems
+ external_orchestrators:
+ gas_town:
+ repo: "https://github.com/steveyegge/gastown"
+ author: "Steve Yegge"
+ description: "Multi-agent workspace manager using Claude Code instances"
+ status: "Experimental (Jan 2026)"
+ guide_section: "guide/ai-ecosystem.md:850"
+ multiclaude:
+ repo: "https://github.com/dlorenc/multiclaude"
+ author: "dlorenc"
+ description: "Self-hosted multi-agent Claude Code spawner (tmux + git worktrees)"
+ status: "Active development (Jan 2026, 383 stars)"
+ guide_section: "guide/ai-ecosystem.md:850"
+ agent_chat:
+ repo: "https://github.com/justinabrahms/agent-chat"
+ author: "Justin Abrahms"
+ description: "Real-time monitoring UI for Gas Town and multiclaude (SSE + SQLite)"
+ status: "Early preview (Jan 2026, v0.2.0)"
+ guide_section: "guide/ai-ecosystem.md:850"
+ # External research & alignment tools
+ external_research:
+ claude_constitution:
+ url: "https://www.anthropic.com/constitution"
+ pdf: "https://www-cdn.anthropic.com/9214f02e82c4489fb6cf45441d448a1ecd1a3aca/claudes-constitution.pdf"
+ announcement: "https://www.anthropic.com/news/claude-new-constitution"
+ description: "Claude's Constitutional AI framework - value hierarchy (safety > ethics > compliance > utility)"
+ license: "CC0 1.0 (public domain)"
+ published: "2026-01-21"
+ guide_section: "guide/data-privacy.md:296"
+ petri_v2:
+ repo: "https://github.com/safety-research/petri"
+ blog: "https://alignment.anthropic.com/2026/petri-v2/"
+ description: "Open-source AI behavior audit tool (Anthropic Alignment Science)"
+ features:
+ - "70 scenarios: collusion, ethics conflicts, info sensitivity"
+ - "Eval-awareness mitigations"
+ - "Benchmarks: Claude Opus 4.5, GPT-5.2, Gemini 3 Pro, Grok 4"
+ published: "2026-01-21"
+ guide_section: "README.md:338"
+ # Section 9.18 - Codebase Design for Agent Productivity
+ codebase_design_agents: 16311
+ codebase_design_source: "https://marmelab.com/blog/2026/01/21/agent-experience.html"
+ codebase_design_author: "François Zaninotto (Marmelab)"
+ codebase_design_llms_txt: 16797 # llms.txt standard for AI-optimized documentation
+ codebase_design_llms_txt_spec: "https://llmstxt.org/"
+ codebase_design_llms_txt_example: "machine-readable/llms.txt"
+ # Section 9.19 - Permutation Frameworks
+ permutation_frameworks: 18314
+ # Section 9.20 - Agent Teams (v2.1.32+ experimental)
+ agent_teams: "guide/workflows/agent-teams.md"
+ agent_teams_quick_start: "guide/workflows/agent-teams-quick-start.md" # Practical 8-10 min guide with copy-paste patterns
+ agent_teams_overview: 18498 # Section 9.20 in ultimate-guide.md
+ agent_teams_architecture: "guide/workflows/agent-teams.md:137"
+ agent_teams_setup: "guide/workflows/agent-teams.md:250"
+ agent_teams_use_cases: "guide/workflows/agent-teams.md:346"
+ agent_teams_fountain_case_study: "guide/workflows/agent-teams.md:358"
+ agent_teams_cred_case_study: "guide/workflows/agent-teams.md:391"
+ agent_teams_c_compiler_case_study: "guide/workflows/agent-teams.md:308"
+ agent_teams_paul_rayner_workflows: "guide/workflows/agent-teams.md:450"
+ agent_teams_workflow_impact: "guide/workflows/agent-teams.md:552"
+ agent_teams_limitations: "guide/workflows/agent-teams.md:644"
+ agent_teams_decision_tree: "guide/workflows/agent-teams.md:804"
+ agent_teams_best_practices: "guide/workflows/agent-teams.md:928"
+ agent_teams_troubleshooting: "guide/workflows/agent-teams.md:1092"
+ agent_teams_experimental_flag: "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=true"
+ agent_teams_model_requirement: "Opus 4.6 minimum"
+ agent_teams_sources:
+ - "https://www.anthropic.com/news/claude-opus-4-6"
+ - "https://www.anthropic.com/engineering/building-c-compiler"
+ - "https://resources.anthropic.com/hubfs/2026%20Agentic%20Coding%20Trends%20Report.pdf"
+ - "https://dev.to/thegdsks/claude-opus-46-for-developers-agent-teams-1m-context-and-what-actually-matters-4h8c"
+ - "https://www.linkedin.com/posts/thepaulrayner_this-is-wild-i-just-upgraded-claude-code-activity-7425635159678414850-MNyv"
+ # Anthropic 2026 Trends (diffused across sections, not standalone)
+ agentic_trends_2026_report: "https://resources.anthropic.com/hubfs/2026%20Agentic%20Coding%20Trends%20Report.pdf"
+ agentic_trends_2026_evaluation: "docs/resource-evaluations/anthropic-2026-agentic-coding-trends.md"
+ agentic_trends_integration_strategy: "Diffusion transversale (industry data in 9.17, 9.20, 9.11, 9 intro)"
+ agentic_trends_research_data:
+ ai_usage: "60% of work (Anthropic internal study)"
+ full_delegation: "0-20% tasks (collaboration > delegation)"
+ productivity_gain: "67% more PRs merged/engineer/day"
+ new_work: "27% tasks wouldn't be done without AI"
+ agentic_trends_case_studies:
+ fountain: "50% faster screening (hierarchical multi-agent)"
+ rakuten: "7h autonomous vLLM (12.5M lines, 99.9% accuracy)"
+ cred: "2x execution speed, quality maintained (fintech)"
+ telus: "500K hours saved, 13K solutions, 30% faster"
+ legora: "Legal platform, lawyers automate without coding"
+ zapier: "89% adoption, 800+ internal agents"
+ augment_code: "4-8 months project → 2 weeks"
+ agentic_trends_benchmarks:
+ multi_instance_cost: "$500-1K/month (Boris pattern validation)"
+ agent_teams_timeline: "3-6 months adoption (enterprise)"
+ productivity_multiplier: "3x (capabilities × orchestration × experience)"
+ timeline_compression: "weeks → days (feature implementation)"
+ onboarding_speedup: "2-4 weeks → 4-8 hours (new codebase)"
+ agentic_trends_anti_patterns:
+ over_delegation: ">5 agents = coordination overhead"
+ premature_automation: "Automate before mastering manual"
+ tool_sprawl: ">10 MCP servers = maintenance burden"
+ no_roi_tracking: "Can't optimize what you don't measure"
+ # AI Fluency Research (Anthropic, Feb 2026) - Added 2026-02-23
+ ai_fluency_index: "https://www.anthropic.com/research/AI-fluency-index"
+ ai_fluency_evaluation: "docs/resource-evaluations/2026-02-23-anthropic-ai-fluency-index.md"
+ ai_fluency_score: "4/5"
+ ai_fluency_sample: "9,830 conversations, 7-day window, January 2026"
+ ai_fluency_iteration_stat: "5.6× more likely to question reasoning (iterative vs non-iterative users)"
+ ai_fluency_fluency_ratio: "2.67 vs 1.33 behaviors (iterative vs non-iterative)"
+ ai_fluency_collaboration_terms: "Only 30% of users set collaboration terms explicitly"
+ ai_fluency_artifact_paradox: "Artifact production → −5.2pp missing context, −3.7pp fact-check, −3.1pp questioning reasoning"
+ ai_fluency_plan_review_section: "guide/ultimate-guide.md:2542" # Rev the Engine callout
+ ai_fluency_claudemd_section: "guide/ultimate-guide.md:4421" # CLAUDE.md Best Practices callout
+ ai_fluency_artifact_section: "guide/ultimate-guide.md:13485" # Artifact Paradox callout (Common Pitfalls)
+ ai_fluency_authors: "Swanson, Bent, Huang, Ludwig, Dakan, Feller (Anthropic)"
+ ai_fluency_published: "2026-02-23"
+ ai_fluency_future: "Claude Code platform analysis (mentioned in paper's future directions)"
+ ai_fluency_diagram: "guide/diagrams/06-development-workflows.md#ai-fluency--high-vs-low-fluency-paths"
+ ai_fluency_diagram_type: "flowchart — Artifact Paradox: 70% vs 30% user paths, behavioral drop data, iteration outcomes"
+ # Advanced Plan Mode Patterns
+ rev_the_engine: 2490
+ mechanic_stacking: 2538
+ # Sub-Agent Patterns (Refactored 2026-02-09)
+ agent_anti_patterns: 4032 # Critical: Roles vs Context Control (Dex Horty principle)
+ scope_focused_agents: 4079 # Formerly "Split-Role Sub-Agents", refactored for context isolation
+ teammatetool_experimental: 3976 # Multi-agent orchestration parent section
+ # Task Management Diagnostic
+ task_lists_diagnostic: 3884
+ # Mental Model
+ main_thread_orchestrator: 2886
+ # CLAUDE.md Patterns
+ continuous_context_update: 4297
+ # Hook Patterns
+ smart_hook_dispatching: 8689
+ # Workflows
+ skeleton_projects_workflow: "guide/workflows/skeleton-projects.md"
+ # Spec-First Development (Addy Osmani, Jan 2026)
+ spec_first_workflow: "guide/workflows/spec-first.md"
+ spec_modular_design: "guide/workflows/spec-first.md:363"
+ spec_operational_boundaries: "guide/workflows/spec-first.md:461"
+ spec_command_template: "guide/workflows/spec-first.md:573"
+ spec_anti_monolithic: "guide/workflows/spec-first.md:717"
+ spec_osmani_source: "https://addyosmani.com/blog/good-spec/"
+ spec_osmani_evaluation: "docs/resource-evaluations/addy-osmani-good-spec.md"
+ spec_osmani_score: "4/5"
+ spec_task_granularity: "guide/workflows/spec-first.md:62" # Vertical slices + PRD checklist (Allan Hill, Feb 2026)
+ spec_prd_checklist: "guide/workflows/spec-first.md:68" # 6-dimension PRD quality checklist
+ atdd_with_agents: "guide/methodologies.md:161" # ATDD + Gherkin for agentic workflows
+ commands_table: 47
+ shortcuts_table: 368
+ troubleshooting: 11311
+ cheatsheet: 19597
+ daily_workflow: 19673
+ # AI Ecosystem (Section 11, ~line 10525)
+ ai_ecosystem: 20004
+ ai_ecosystem_complementarity: 20004
+ ai_ecosystem_tool_matrix: 20031
+ ai_ecosystem_workflows: 20166
+ ai_ecosystem_integration: 20294
+ ai_ecosystem_detailed: "guide/ai-ecosystem.md"
+ ai_ecosystem_goose: "guide/ai-ecosystem.md:2074"
+ ai_ecosystem_goose_comparison: "guide/ai-ecosystem.md:2090"
+ ai_ecosystem_context_packing: "guide/ai-ecosystem.md:2533"
+ ai_ecosystem_multi_ide_sync: "guide/ai-ecosystem.md:1282"
+ agents_md_support_status: "guide/ai-ecosystem.md:1348"
+ ai_ecosystem_build_vs_use: "guide/ai-ecosystem.md:2399" # Section 11.3 - When to Build vs Use (ADK, LangChain, Vercel AI SDK)
+ # Architecture Diagrams as Context (advanced pattern) - Added 2026-01-25
+ architecture_diagrams_input: "guide/ai-ecosystem.md:2567"
+ architecture_diagrams_mcp_tools:
+ - "Archy MCP: https://www.pulsemcp.com/servers/phxdev1-archy"
+ - "Mermaid MCP: 61.4K users"
+ - "Blueprint MCP (ArcadeAI)"
+ llm_oop_research: "https://dl.acm.org/doi/10.1145/3639474.3640052"
+ architecture_diagrams_source: "https://www.linkedin.com/posts/tigraff_uml-claude-wibecoding-activity-7420595633826258944-gGO5"
+ ai_ecosystem_voice_to_text: "guide/ai-ecosystem.md:1066"
+ ai_ecosystem_alternative_providers: "guide/ai-ecosystem.md:2639"
+ voice_refine_skill: "examples/skills/voice-refine/SKILL.md"
+ # Cowork documentation (v1.0 - migrated to dedicated repo)
+ cowork_reference: "machine-readable/cowork-reference.yaml" # Dedicated YAML index (kept local)
+ cowork_hub: "https://github.com/FlorianBruniaux/claude-cowork-guide/blob/main/README.md"
+ cowork_summary: "guide/cowork.md" # Summary remains in this repo
+ cowork_overview: "https://github.com/FlorianBruniaux/claude-cowork-guide/blob/main/guide/00-overview.md"
+ cowork_getting_started: "https://github.com/FlorianBruniaux/claude-cowork-guide/blob/main/guide/01-getting-started.md"
+ cowork_capabilities: "https://github.com/FlorianBruniaux/claude-cowork-guide/blob/main/guide/02-capabilities.md"
+ cowork_security: "https://github.com/FlorianBruniaux/claude-cowork-guide/blob/main/guide/03-security.md"
+ cowork_troubleshooting: "https://github.com/FlorianBruniaux/claude-cowork-guide/blob/main/guide/04-troubleshooting.md"
+ cowork_cheatsheet: "https://github.com/FlorianBruniaux/claude-cowork-guide/blob/main/reference/cheatsheet.md"
+ cowork_comparison: "https://github.com/FlorianBruniaux/claude-cowork-guide/blob/main/reference/comparison.md"
+ cowork_faq: "https://github.com/FlorianBruniaux/claude-cowork-guide/blob/main/reference/faq.md"
+ cowork_prompts: "https://github.com/FlorianBruniaux/claude-cowork-guide/tree/main/prompts"
+ cowork_workflows: "https://github.com/FlorianBruniaux/claude-cowork-guide/tree/main/workflows"
+ cowork_section: "guide/ai-ecosystem.md:1809"
+ cowork_ultimate_guide: 20348
+ # Experimental Features
+ teammatetool: 3976
+ teammatetool_status: "Experimental, progressive rollout, feature-flagged"
+ teammatetool_capabilities: "Multi-agent coordination, team messaging, swarm patterns"
+ teammatetool_sources:
+ - "https://gist.github.com/kieranklaassen/4f2aba89594a4aea4ad64d753984b2ea"
+ - "https://github.com/anthropics/claude-code/issues/3013"
+ - "https://github.com/mikekelly/claude-sneakpeek"
+ # Appendix
+ appendix_a_file_locations: 20574
+ appendix_b_faq: 20750
+ faq_clawdbot_vs_claudecode: 20764
+ faq_product_managers: 20821
+ appendix_c_resource_evaluation: 20886
+ appendix_d_myths_vs_reality: 20929
+ myths_hidden_features: 20933
+ myths_tasks_api_autonomous: 20965
+ myths_100x_faster: 20997
+ myths_reliable_sources: 20983
+ # Quiz System (264 questions, 15 categories)
+ quiz_overview: "quiz/README.md"
+ quiz_file: "quiz/questions.json"
+ quiz_count: 264
+ quiz_categories: 15
+ quiz_beginner: "quiz/categories/basics,commands,shortcuts,reference"
+ quiz_beginner_count: 60
+ quiz_intermediate: "quiz/categories/workflows,context,agents,hooks"
+ quiz_intermediate_count: 100
+ quiz_advanced: "quiz/categories/mcp,production,advanced,learning,ecosystem"
+ quiz_advanced_count: 97
+ quiz_estimated_time_beginner: "15-20 min"
+ quiz_estimated_time_intermediate: "25-30 min"
+ quiz_estimated_time_advanced: "30-40 min"
+ # Onboarding matrix required keys (added for v2.0.0 adaptive architecture)
+ rules: 89 # Golden Rules section
+ workflow: 58 # Workflow (9 steps)
+ fix: 11948 # Troubleshooting section
+ architecture: 919 # Architecture internals
+ production_safety: "guide/production-safety.md" # Production safety rules
+ security_hardening: "guide/security-hardening.md" # Security best practices
+ security_cve_summary: "guide/security-hardening.md:15" # Decision Matrix + CVEs
+ security_supply_chain_stats: "guide/security-hardening.md:137" # Agent Skills Supply Chain Risks
+ security_mcp_scan_tool: "guide/security-hardening.md:32" # MCP Vetting Workflow
+ security_malicious_extensions: "guide/security-hardening.md:252" # .claude/ attack surface (§1.5)
+ security_kill_switch: "guide/security-hardening.md:630" # AI Kill Switch & Containment Architecture (§3.5)
+ security_claude_folder_audit: "guide/security-hardening.md:228" # Repository Pre-Scan (§1.4)
+ security_toxicskills_evaluation: "docs/resource-evaluations/snyk-toxicskills-evaluation.md"
+ security_check_command: "examples/commands/security-check.md" # Quick config check vs known threats
+ security_audit_command: "examples/commands/security-audit.md" # Full 6-phase security audit (score /100)
+ security_threat_db: "examples/commands/resources/threat-db.yaml" # Threat intelligence database (authors, skills, CVEs, patterns)
+ security_update_threat_db: "examples/commands/update-threat-db.md" # /update-threat-db — research & update threat database
+ security_cc_scanner: "guide/security-hardening.md:780" # Claude Code Security (research preview) — Anthropic native vuln scanner, adversarial validation, patch suggestions
+ security_patcher_agent: "examples/agents/security-patcher.md" # Agent: applies patches from security-auditor findings, human approval gate, Write/Edit tools
+ security_gate_hook: "examples/hooks/bash/security-gate.sh" # PreToolUse hook: blocks 7 vuln patterns at write time (SQLi, XSS, hardcoded secrets, eval, weak hash, cmd injection, path traversal)
+ security_pr_review_workflow: "guide/security-hardening.md:712" # PR security review workflow — 3-agent pipeline, git hook integration
+ agent_validation_checklist: 5744 # Agent validation section in ultimate-guide.md
+ git_mcp_guide: "guide/mcp-servers-ecosystem.md:113" # Git MCP server documentation
+
+# ════════════════════════════════════════════════════════════════
+# DECISION TREE (most important - en premier)
+# ════════════════════════════════════════════════════════════════
+decide:
+ simple_task: "just ask Claude"
+ complex_task: "/plan first, then use Tasks API (v2.1.16+) or TodoWrite"
+ complex_task_multi_session: "use Tasks API with CLAUDE_CODE_TASK_LIST_ID"
+ context_high: "/compact (>70%) or /clear (>90%)"
+ repeating: "create agent or command"
+ need_docs: "Context7 MCP"
+ deep_debug: "use Opus (thinking enabled by default) - Alt+T to toggle"
+
+# ════════════════════════════════════════════════════════════════
+# PROMPTING FORMULA (see deep_dive.xml_prompting for details)
+# ════════════════════════════════════════════════════════════════
+prompt_formula:
+ WHAT: "concrete deliverable"
+ WHERE: "file paths"
+ HOW: "constraints, approach"
+ VERIFY: "success criteria"
+ example: |
+ Add input validation to login form.
+ WHERE: src/components/LoginForm.tsx
+ HOW: Use Zod, inline errors
+ VERIFY: Empty email shows error
+
+# ════════════════════════════════════════════════════════════════
+# WORKFLOW (9 steps) - see deep_dive.first_workflow
+# ════════════════════════════════════════════════════════════════
+workflow:
+ 1: "claude"
+ 2: "/status"
+ 3: "Shift+Tab×2 for plan mode (if risky)"
+ 4: "describe task (WHAT/WHERE/HOW/VERIFY)"
+ 5: "review diff"
+ 6: "y/n"
+ 7: "run tests"
+ 8: "commit"
+ 9: "/compact when >70%"
+
+# ════════════════════════════════════════════════════════════════
+# CRITICAL COMMANDS - see deep_dive.essential_commands
+# ════════════════════════════════════════════════════════════════
+commands:
+ /compact: "compress context - USE AT >70%"
+ /clear: "reset conversation - USE AT >90%"
+ /status: "show context % and cost"
+ /plan: "read-only mode (safe exploration)"
+ /execute: "exit plan mode"
+ /rewind: "undo changes"
+ /model: "switch: sonnet|opus|opusplan"
+ /mcp: "show MCP server status"
+ /context: "detailed token breakdown"
+ /teleport: "bring web session to local CLI"
+ /tasks: "monitor background tasks"
+ /remote-env: "configure cloud environment"
+ /remote-control: "start remote control session (Research Preview, Pro/Max only)"
+ /rc: "alias for /remote-control"
+ /mobile: "get Claude mobile app download links (iOS + Android)"
+
+# ════════════════════════════════════════════════════════════════
+# SHORTCUTS - see deep_dive.shortcuts_table
+# ════════════════════════════════════════════════════════════════
+shortcuts:
+ Shift+Tab: "cycle: default → auto-accept → plan"
+ Esc×2: "rewind/undo"
+ Ctrl+C: "interrupt"
+ Ctrl+R: "search command history"
+ Ctrl+B: "background all tasks"
+ "@file": "reference file"
+ "!cmd": "shell command"
+
+# ════════════════════════════════════════════════════════════════
+# CLI FLAGS - see deep_dive.commands_table
+# ════════════════════════════════════════════════════════════════
+cli:
+ "-c": "continue last session"
+ "-r ": "resume specific session"
+ "--teleport": "bring web session to local CLI"
+ "remote-control": "subcommand: start remote control session"
+ "-p": "non-interactive (pipe mode)"
+ "--model X": "select model"
+ "--dangerously-skip-permissions": "auto-accept ALL (danger)"
+ "--debug": "verbose output"
+ "--add-dir": "grant tool access to directories outside CWD"
+
+# ════════════════════════════════════════════════════════════════
+# CONTEXT MANAGEMENT - see deep_dive.context_management
+# ════════════════════════════════════════════════════════════════
+context:
+ zones:
+ green: "0-50% → work freely"
+ yellow: "50-70% → be selective"
+ orange: "70-90% → /compact NOW"
+ red: "90%+ → /clear required"
+ fresh_context: "Reset per task for long autonomous sessions - see Section 2.2 Fresh Context Pattern"
+ symptoms:
+ short_responses: "/compact"
+ forgetting_instructions: "/clear"
+ inconsistent: "context bleeding → /clear"
+ slow: "/compact or /clear"
+
+# ════════════════════════════════════════════════════════════════
+# MEMORY FILES - see deep_dive.memory_files
+# ════════════════════════════════════════════════════════════════
+memory:
+ global: "~/.claude/CLAUDE.md (not committed)"
+ project_team: "./CLAUDE.md (committed)"
+ project_personal: "./.claude/CLAUDE.md (not committed)"
+ priority: "project > global"
+
+# ════════════════════════════════════════════════════════════════
+# .claude/ STRUCTURE - see deep_dive.claude_folder
+# ════════════════════════════════════════════════════════════════
+folder_structure:
+ CLAUDE.md: "local instructions"
+ settings.json: "hooks config (committed)"
+ settings.local.json: "permissions (not committed)"
+ agents/: "custom AI personas"
+ commands/: "slash commands"
+ hooks/: "event scripts"
+ skills/: "knowledge modules"
+ rules/: "auto-loaded rules"
+
+# ════════════════════════════════════════════════════════════════
+# PERMISSION MODES - see deep_dive.permission_modes
+# ════════════════════════════════════════════════════════════════
+permissions:
+ default: "editing=ask, execution=ask"
+ auto_accept: "editing=auto, execution=ask"
+ plan_mode: "editing=blocked, execution=blocked"
+ switch: "Shift+Tab"
+
+# ════════════════════════════════════════════════════════════════
+# MCP SERVERS - see deep_dive.mcp_servers
+# ════════════════════════════════════════════════════════════════
+mcp:
+ serena: "symbol search + session memory (write_memory/read_memory) + project indexation"
+ claude_mem: "automatic session capture + AI compression + progressive disclosure + Web dashboard (localhost:37777)"
+ claude_mem_repo: "https://github.com/thedotmack/claude-mem"
+ claude_mem_guide: "guide/ultimate-guide.md:1585"
+ claude_mem_plugin: "examples/plugins/claude-mem.md"
+ claude_mem_installation: "/plugin marketplace add thedotmack/claude-mem"
+ claude_mem_stars: "26.5k"
+ claude_mem_license: "AGPL-3.0 + PolyForm Noncommercial"
+ claude_mem_cost: "$0.15 per 100 observations (API compression)"
+ claude_mem_storage: "10-20 MB/month (light), 100-200 MB/month (heavy)"
+ claude_mem_dashboard: "http://localhost:37777"
+ claude_mem_vs_serena: "claude-mem=auto capture, Serena=manual memory"
+ claude_mem_progressive_disclosure: "3-layer retrieval: search→timeline→observations (10x token reduction)"
+ claude_mem_evaluation: "docs/resource-evaluations/claude-mem-evaluation.md"
+ claude_mem_score: "4/5 (High Value)"
+ doobidoo_memory: "semantic memory search + Knowledge Graph dashboard + 13+ clients (⚠️ under testing)"
+ doobidoo_install: "pip install mcp-memory-service && python -m mcp_memory_service.scripts.installation.install --quick"
+ doobidoo_dashboard: "http://localhost:8000"
+ doobidoo_vs_serena: "Serena=key-value (requires known key), doobidoo=semantic search (finds by meaning)"
+ doobidoo_backends: "sqlite_vec (local), cloudflare (multi-device), hybrid (local+cloud sync)"
+ doobidoo_tools: "store_memory, retrieve_memory, search_by_tag, delete_memory, list_memories, check_database_health, memory_graph"
+ doobidoo_data_location: "~/.mcp-memory-service/memories.db"
+ mcp_memory_stack: "4 layers: doobidoo (decisions) → Serena (symbols) → grepai (code search) → Context7 (docs)"
+ mcp_complementarity_patterns: "onboarding, ADR, debug persistence, multi-IDE coordination"
+ serena_indexation: "uvx --from git+https://github.com/oraios/serena serena project index [--force-full|--incremental] [--parallel N]"
+ serena_cache: ".serena/cache/typescript/ (add to .gitignore)"
+ context7: "library docs lookup"
+ sequential: "structured multi-step reasoning"
+ playwright: "browser automation / E2E"
+ figma: "design file access, tokens, structure (official)"
+ git_mcp: "version control automation (official Anthropic) - 12 tools for commits, branches, diffs, logs"
+ git_mcp_guide: "guide/mcp-servers-ecosystem.md:102"
+ git_mcp_tools: "git_status, git_log, git_diff, git_commit, git_add, git_reset, git_branch, git_create_branch, git_checkout, git_show, git_diff_unstaged, git_diff_staged"
+ git_mcp_install: "uvx mcp-server-git --repository /path/to/repo"
+ git_mcp_decision_matrix: "guide/mcp-servers-ecosystem.md:212" # Git MCP vs GitHub MCP vs Bash tool
+ git_mcp_repo: "https://github.com/modelcontextprotocol/servers/tree/main/src/git"
+ git_mcp_score: "8.5/10"
+ git_mcp_status: "Early development (API subject to change)"
+ git_mcp_advanced_filtering: "ISO 8601 dates, relative dates (2 weeks ago), absolute dates"
+ git_mcp_use_cases: "automated commits, log analysis, branch management, token-efficient diffs, multi-repo"
+ ast_grep: "optional plugin for AST-based code search (explicit invocation required)"
+ ast_grep_guide: "guide/ultimate-guide.md:9845"
+ ast_grep_skill: "examples/skills/ast-grep-patterns.md"
+ ast_grep_install: "npx skills add ast-grep/agent-skill"
+ ast_grep_when: "structural patterns (>50k lines, migrations, AST rules)"
+ ast_grep_not_for: "simple string search, small projects (<10k lines)"
+ search_decision_tree: "grep (text) | ast-grep (structure) | Serena (symbols) | grepai (semantic)"
+ search_tools_comparison: "guide/ultimate-guide.md:9845"
+ search_tools_mastery_workflow: "guide/workflows/search-tools-mastery.md"
+ grep_vs_rag_history: "guide/architecture.md:232"
+ ripgrep_native: "Grep tool (Claude Code built-in, ~20ms)"
+ grepai_semantic: "Semantic search + call graph (Ollama-based, ~500ms)"
+ grepai_benchmark:
+ source: "https://yoandev.co/grepai-benchmark"
+ guide_section: "guide/workflows/search-tools-mastery.md:240"
+ date: "2026-01-20"
+ summary: "-55% tool calls, -97% tokens vs grep (Excalidraw 155k TS)"
+ caveat: "Benchmark by tool maintainer, single-project validation"
+ serena_symbols: "Symbol-aware + session memory (~100ms)"
+ astgrep_structural: "AST patterns for large refactoring (~200ms)"
+ search_combined_workflow: "guide/workflows/search-tools-mastery.md:205"
+ check: "/mcp"
+ config: "~/.claude.json (mcpServers field) or .mcp.json (project root)"
+ tool_search: "lazy loading MCP tools (v2.1.7+) - 85% token reduction - auto:N threshold config"
+ tool_search_config: "ENABLE_TOOL_SEARCH=auto|auto:N|true|false"
+ tool_search_deep_dive: "guide/architecture.md:284"
+
+# ════════════════════════════════════════════════════════════════
+# ARCHITECTURE INTERNALS - see guide/architecture.md
+# ════════════════════════════════════════════════════════════════
+architecture:
+ master_loop: "while(tool_call) - no DAG, no classifier, no RAG"
+ core_tools: "Bash, Read, Edit, Write, Grep, Glob, Task, TodoWrite"
+ context_budget: "~200K tokens, auto-compact at 75-92%"
+ subagents: "Task tool spawns isolated agents (depth=1 max)"
+ teammatetool: "Experimental multi-agent coordination (v3294)"
+ philosophy: "less scaffolding, more model - trust Claude's reasoning"
+ mcp_protocol: "JSON-RPC 2.0, treated as native tools"
+ permissions: "interactive prompts + allow/deny rules + hooks"
+ deep_dive: "guide/architecture.md"
+
+# ════════════════════════════════════════════════════════════════
+# COST OPTIMIZATION - see deep_dive.cost_optimization
+# ════════════════════════════════════════════════════════════════
+cost:
+ haiku: "simple fixes, reviews ($)"
+ sonnet: "most development ($$)"
+ opus: "architecture, complex bugs ($$$)"
+ opusplan: "plan=opus + execute=sonnet ($$)"
+ tip: "--add-dir grants tool access to additional directories (permissions, not context loading)"
+ rtk: "Command output filtering (72.6% avg reduction) - rtk git log/status/diff"
+
+# ════════════════════════════════════════════════════════════════
+# TOOL SELECTION
+# ════════════════════════════════════════════════════════════════
+tools:
+ file_search: "Glob (not find)"
+ content_search: "Grep (not grep bash)"
+ file_read: "Read (not cat)"
+ file_edit: "Edit (not sed)"
+ multi_file: "MultiEdit"
+ deep_analysis: "Sequential MCP"
+ library_docs: "Context7 MCP"
+ browser: "Playwright MCP"
+
+# ════════════════════════════════════════════════════════════════
+# ANTI-PATTERNS - see deep_dive.pitfalls
+# ════════════════════════════════════════════════════════════════
+dont:
+ - "vague prompts → be specific"
+ - "accept without reading → read every diff"
+ - "ignore >70% context → /compact"
+ - "skip permissions in prod → never"
+ - "bloated CLAUDE.md → keep concise (<200 lines)"
+ - "only negative constraints → provide alternatives"
+
+# ════════════════════════════════════════════════════════════════
+# TROUBLESHOOTING - see deep_dive.troubleshooting
+# ════════════════════════════════════════════════════════════════
+fix:
+ "command not found": "npm i -g @anthropic-ai/claude-code"
+ "context too high": "/compact or /clear"
+ "slow responses": "/compact"
+ "MCP not working": "claude mcp list, check config"
+ "permission denied": "check settings.local.json"
+ "hook blocking": "check exit code (0=ok, 2=block)"
+
+# ════════════════════════════════════════════════════════════════
+# DEBUG COMMANDS
+# ════════════════════════════════════════════════════════════════
+debug:
+ version: "claude --version"
+ update: "claude update"
+ diagnostic: "claude doctor"
+ verbose: "claude --debug"
+ mcp_debug: "claude --mcp-debug"
+
+# ════════════════════════════════════════════════════════════════
+# AGENT TEMPLATE - see deep_dive.agent_template
+# ════════════════════════════════════════════════════════════════
+agent_template: |
+ ---
+ name: agent-name
+ description: Use when [trigger]
+ model: sonnet|opus|haiku
+ tools: Read, Write, Edit, Bash
+ ---
+ # Instructions here
+
+# Agent frontmatter — all official fields (verified 2026-02-26 against code.claude.com/docs/en/sub-agents)
+agent_frontmatter_official_fields:
+ name: "display name + /slash-command trigger"
+ description: "trigger description (required for auto-discovery)"
+ model: "sonnet (default) | opus | haiku | inherit"
+ tools: "comma-separated list: Read, Write, Edit, Bash, Grep, Glob, Task(agent_type)..."
+ disallowedTools: "tools to block (array)"
+ permissionMode: "default | acceptEdits | dontAsk | bypassPermissions | plan"
+ maxTurns: "integer — limit agent turns"
+ skills: "skills to preload at startup (full content injected)"
+ mcpServers: "MCP server configs"
+ hooks: "lifecycle hooks (same format as settings.json hooks)"
+ memory: "user | project | local — persistent memory scope"
+ background: "true = always run as background task"
+ isolation: "worktree = temporary git worktree isolation"
+ color: "CLI output color"
+agent_frontmatter_memory_scopes:
+ user: "~/.claude/memory/.md — cross-project"
+ project: ".claude/memory/.md — shared with team"
+ local: ".claude/memory/.local.md — gitignored"
+agent_frontmatter_guide_line: 5639 # Official fields table in ultimate-guide.md
+
+# ════════════════════════════════════════════════════════════════
+# HOOK EVENTS - see deep_dive.hooks
+# ════════════════════════════════════════════════════════════════
+hook_events:
+ PreToolUse: "before tool (exit 2 to block)"
+ PostToolUse: "after tool"
+ UserPromptSubmit: "before prompt sent"
+ Notification: "alerts"
+
+# Hook Execution Model (v2.1.0+)
+hooks_execution_model: 7969 # Section in ultimate-guide.md
+hooks_async_support: "v2.1.0+ - add 'async: true' for non-blocking execution"
+hooks_async_use_cases: "logging, notifications, formatting, metrics (no feedback needed)"
+hooks_sync_use_cases: "validation, type checking, security (feedback required)"
+hooks_decision_matrix: 6091 # Decision matrix table
+hooks_async_limitations: "no exit code feedback, no additionalContext, no blocking"
+hooks_async_bug_fix: "v2.1.23 - fixed cancellation in headless streaming"
+
+# ════════════════════════════════════════════════════════════════
+# GOLDEN RULES
+# ════════════════════════════════════════════════════════════════
+rules:
+ 1: "Always review diffs before accepting"
+ 2: "Use /compact before >70%"
+ 3: "Be specific (WHAT/WHERE/HOW/VERIFY)"
+ 4: "Plan Mode first for complex/risky"
+ 5: "Create CLAUDE.md for every project"
+ 6: "Commit frequently after each task"
+
+# ════════════════════════════════════════════════════════════════
+# ECOSYSTEM - Related resources & positioning
+# ════════════════════════════════════════════════════════════════
+ecosystem:
+ this_guide:
+ focus: "Education - Learn & master"
+ unique: ["architecture docs", "TDD/SDD methodologies", "264-question quiz", "YAML index"]
+ complementary:
+ claude_code_templates:
+ url: "github.com/davila7/claude-code-templates"
+ focus: "Distribution - Install & use (CLI)"
+ stars: "17k+"
+ awesome_claude_code:
+ url: "github.com/hesreallyhim/awesome-claude-code"
+ focus: "Curation - Discover & link"
+ awesome_claude_skills:
+ url: "github.com/BehiSecc/awesome-claude-skills"
+ maintainer: "BehiSecc"
+ focus: "Skills taxonomy - 62 skills across 12 categories"
+ categories: ["Development", "Design", "Documentation", "Testing", "DevOps", "Security", "Data", "AI/ML", "Productivity", "Content", "Integration", "Fun"]
+ positioning: "Complementary to awesome-claude-code (skills-only vs full ecosystem)"
+ evaluation: "docs/resource-evaluations/awesome-claude-skills-github.md"
+ score: "3/5 (Moderate - Useful complement)"
+ note: "Distinct from ComposioHQ/awesome-claude-skills (different maintainer, taxonomy approach)"
+ claude_code_everything:
+ url: "github.com/wesammustafa/Claude-Code-Everything"
+ focus: "Visual walkthrough - Screenshots, BMAD method"
+ everything_claude_code:
+ url: "github.com/affaan-m/everything-claude-code"
+ author: "Affaan Mustafa (Anthropic hackathon winner - Zenith project)"
+ focus: "Production configs - Battle-tested from 10+ months intensive use"
+ stars: "45k+"
+ verified: "2026-02-15"
+ created: "2026-01-18"
+ unique: ["hookify (conversational hooks)", "pass@k metrics", "Plugin ecosystem", "Sandboxed subagents", "Strategic compaction skills"]
+ evaluation: "docs/resource-evaluations/015-everything-claude-code-github-repo.md"
+ score: "5/5 (CRITICAL)"
+ positioning: "Complementary to Ultimate Guide (production configs vs educational content)"
+ note: "Consolidates existing patterns; author hackathon win was for Zenith project, not this repo"
+ caveat: "Node.js hooks not officially recommended by Anthropic (shell preferred)"
+ coding_agents_matrix:
+ url: "coding-agents-matrix.dev"
+ github: "github.com/PackmindHub/coding-agents-matrix"
+ maintainer: "Packmind (Cédric Teyton, Arthur Magne)"
+ license: "Apache-2.0"
+ focus: "Interactive comparison of 23 AI coding agents across 11 criteria"
+ updated: "2026-01-19"
+ tech_stack: "React, Vite, Tailwind CSS"
+ features:
+ - "11 technical criteria (CLI, MCP, Skills, Commands, Subagents, Plan Mode, AGENTS.md, BYO LLM, Custom Rules, Dedicated IDE, IDE Extension)"
+ - "Sortable columns and multi-filter (AND logic)"
+ - "Community-driven updates (GitHub issue templates)"
+ - "Open source data structure (JSON-based)"
+ agents_snapshot: 23 # As of 2026-01-19 (evolves over time)
+ positioning: "Discovery tool - Use Matrix to find/compare agents, use this guide to master Claude Code"
+ note: "External resource - verify data freshness as agents/criteria evolve"
+ context_evaluator:
+ url: "context-evaluator.ai"
+ github: "github.com/PackmindHub/context-evaluator"
+ maintainer: "Packmind (Cédric Teyton)"
+ license: "Apache-2.0"
+ focus: "Scanner for CLAUDE.md/AGENTS.md/copilot-instructions.md — 17 evaluators (13 error detectors + 4 suggestion generators)"
+ updated: "2026-02-23"
+ tech_stack: "Bun, React, Tailwind CSS, TypeScript"
+ supports: ["Claude Code", "Cursor", "GitHub Copilot", "OpenCode", "OpenAI Codex"]
+ interface: ["CLI", "Web UI"]
+ guide_section: "ai-ecosystem.md#related-resources"
+ note: "v0.3.0, experimental (8 stars as of 2026-02-25) — mention only, no dedicated section"
+ practitioner_insights:
+ dave_van_veen:
+ url: "davevanveen.com/blog/agentic_coding/"
+ author: "Dave Van Veen (PhD Stanford, Principal AI Scientist @ HOPPR)"
+ focus: "Production-grade agentic coding guardrails (TDD, worktrees, manual commits)"
+ academic: "Co-author 'Agentic Systems in Radiology' (ArXiv 2025)"
+ alignment: "Validates patterns already documented in this guide"
+ guide_section: "guide/ai-ecosystem.md:1209"
+ install_templates: "scripts/install-templates.sh"
+ cowork:
+ description: "Claude Code for non-developers (desktop app)"
+ status: "Research preview - Max/macOS only (Jan 2026)"
+ blog: "https://claude.com/blog/cowork-research-preview"
+ github: "https://github.com/FlorianBruniaux/claude-cowork-guide"
+ guide_summary: "guide/cowork.md" # Summary in this repo
+ guide_full: "https://github.com/FlorianBruniaux/claude-cowork-guide/blob/main/README.md"
+ getting_started: "https://github.com/FlorianBruniaux/claude-cowork-guide/blob/main/guide/01-getting-started.md"
+ capabilities: "https://github.com/FlorianBruniaux/claude-cowork-guide/blob/main/guide/02-capabilities.md"
+ security: "https://github.com/FlorianBruniaux/claude-cowork-guide/blob/main/guide/03-security.md"
+ troubleshooting: "https://github.com/FlorianBruniaux/claude-cowork-guide/blob/main/guide/04-troubleshooting.md"
+ cheatsheet: "https://github.com/FlorianBruniaux/claude-cowork-guide/blob/main/reference/cheatsheet.md"
+ comparison: "https://github.com/FlorianBruniaux/claude-cowork-guide/blob/main/reference/comparison.md"
+ faq: "https://github.com/FlorianBruniaux/claude-cowork-guide/blob/main/reference/faq.md"
+ prompts: "https://github.com/FlorianBruniaux/claude-cowork-guide/tree/main/prompts"
+ workflows: "https://github.com/FlorianBruniaux/claude-cowork-guide/tree/main/workflows"
+ landing_sites:
+ description: "Marketing sites for guide discovery and navigation"
+ architecture: "4-repo ecosystem: 2 sources (docs) + 2 landings (vitrine)"
+ code_landing:
+ local: "/Users/florianbruniaux/Sites/perso/claude-code-ultimate-guide-landing/"
+ purpose: "Marketing site for Claude Code guide"
+ audience: "Developers discovering the guide"
+ features: ["badges (version, templates, lines)", "quiz (264 questions)", "FAQ", "cross-links to Cowork"]
+ sync_with: "Guide Code (version, templates count, guide lines)"
+ cowork_landing:
+ local: "/Users/florianbruniaux/Sites/perso/claude-cowork-guide-landing/"
+ purpose: "Marketing site for Cowork guide"
+ audience: "Knowledge workers discovering Cowork"
+ features: ["prompts showcase", "workflows preview", "cross-links to Code"]
+ sync_with: "Cowork guide (version, prompts count)"
+ sync_triggers:
+ - "Version bump → Update corresponding landing"
+ - "Templates/prompts added → Update counts"
+ - "Cross-links modified → Update all 4 repos"
+ history:
+ - date: "2026-01-20"
+ event: "Code Landing sync v3.29.0, 66 templates, cross-links"
+ commit: "5b5ce62"
+ - date: "2026-01-20"
+ event: "Cowork Landing fix (paths, README, UI badges)"
+ commits: "cab83f5, af497b7, 539912b"
+
+# ════════════════════════════════════════════════════════════════
+# ONBOARDING MATRIX METADATA
+# ════════════════════════════════════════════════════════════════
+onboarding_matrix_meta:
+ version: "2.0.0"
+ last_updated: "2026-02-05"
+ aligned_with_guide: "3.29.0"
+ changelog:
+ - version: "2.0.0"
+ date: "2026-02-05"
+ changes: "Adaptive architecture (core+adaptive topics), v3.21-3.22 coverage (git_mcp, sandbox_native, config_hierarchy, mcp_secrets, dual_instance), security-first (sandbox in beginner_5min), time budgets validated, learn_security goal added"
+ - version: "1.0.0"
+ date: "2025-12-01"
+ changes: "Initial static matrix"
+ maintenance:
+ review_trigger: "Every CRITICAL (5/5) or HIGH VALUE (4/5) feature addition in resource evaluations"
+ automation: "scripts/detect-new-onboarding-topics.sh (run monthly)"
+ responsible: "Guide maintainer (quarterly review)"
+
+# ════════════════════════════════════════════════════════════════
+# ONBOARDING MATRIX - Maps user profile → content sections
+# Used by tools/onboarding-prompt.md for personalized learning paths
+# Format: Each profile has core (always shown) + adaptive (context-based) topics
+# ════════════════════════════════════════════════════════════════
+onboarding_matrix:
+ # Adaptive architecture: Each profile has core (always) + adaptive (context-based) topics
+ # Adaptive triggers: keywords in user messages → relevant v3.21-3.22 topics
+ # Time budgets: Validated (6-8 min/topic average, respects topics_max limits)
+
+ get_started:
+ beginner_5min:
+ core: [rules, sandbox_native_guide, commands]
+ time_budget: "5 min"
+ topics_max: 3
+ note: "SECURITY FIRST - sandbox before commands (v3.29.0 critical fix)"
+
+ beginner_15min:
+ core: [rules, sandbox_native_guide, workflow, essential_commands]
+ time_budget: "15 min"
+ topics_max: 4
+ note: "Core workflow with security foundation"
+
+ beginner_30min:
+ core: [rules, sandbox_native_guide, workflow, context_management]
+ adaptive:
+ - trigger: "permission|allow|deny|mode"
+ topics: [permission_modes]
+ - default: essential_commands
+ time_budget: "30 min"
+ topics_max: 5
+
+ optimize:
+ intermediate_15min:
+ core: [context_management, context_triage, plan_mode]
+ time_budget: "15 min"
+ topics_max: 3
+
+ intermediate_30min:
+ core: [context_management, plan_mode, cost_optimization]
+ adaptive:
+ - trigger: "memory|persist|session|remember"
+ topics: [memory_files]
+ - default: batch_operations
+ time_budget: "30 min"
+ topics_max: 5
+
+ power_30min:
+ core: [context_triage, cost_optimization]
+ adaptive:
+ - trigger: "team|sync|backup|config|multi-machine|laptop|desktop"
+ topics: [config_hierarchy]
+ - trigger: "git|version control|commits|branches|repository"
+ topics: [git_mcp_guide]
+ - trigger: "secrets|API keys|credentials|env|tokens|password"
+ topics: [mcp_secrets_management]
+ - default: batch_operations
+ time_budget: "30 min"
+ topics_max: 4
+ note: "Adaptive: picks up to 2 from adaptive based on user context (v3.21-3.22)"
+
+ power_60min:
+ core: [context_triage, cost_optimization, config_hierarchy]
+ adaptive:
+ - trigger: "git"
+ topics: [git_mcp_guide]
+ - trigger: "secrets"
+ topics: [mcp_secrets_management]
+ - trigger: "security|sandbox|isolation"
+ topics: [sandbox_native_guide]
+ - default: [batch_operations, rtk_guide]
+ time_budget: "60 min"
+ topics_max: 7
+ note: "Comprehensive optimization with all v3.21-3.22 topics"
+
+ build_agents:
+ intermediate_30min:
+ core: [agents, agent_template, agent_examples]
+ time_budget: "30 min"
+ topics_max: 3
+
+ power_30min:
+ core: [agents, skills, commands]
+ adaptive:
+ - trigger: "template|structure|format"
+ topics: [skill_template]
+ - default: hooks
+ time_budget: "30 min"
+ topics_max: 4
+
+ power_60min:
+ core: [agents, skills, commands, hooks]
+ adaptive:
+ - trigger: "quality|review|planner|dual|two instances|spec"
+ topics: [dual_instance_planning]
+ - trigger: "validation|checklist|production|deploy"
+ topics: [agent_validation_checklist]
+ - default: agent_validation_checklist
+ time_budget: "60 min"
+ topics_max: 6
+ note: "Dual-instance pattern for quality workflows (v3.29.0)"
+
+ learn_security:
+ intermediate_30min:
+ core: [sandbox_native_guide, mcp_secrets_management]
+ adaptive:
+ - trigger: "production|deploy|hardening|best practices"
+ topics: [security_hardening]
+ - default: permission_modes
+ time_budget: "30 min"
+ topics_max: 4
+ note: "NEW goal (v3.29.0) - Security-focused learning path"
+
+ power_60min:
+ core: [sandbox_native_guide, mcp_secrets_management, security_hardening]
+ adaptive:
+ - trigger: "production|safe|rules|reliability"
+ topics: [production_safety]
+ - trigger: "docker|isolation|microvm|container"
+ topics: [sandbox_isolation_guide]
+ - default: production_safety
+ time_budget: "60 min"
+ topics_max: 5
+
+ fix_problem:
+ any_any:
+ core: [troubleshooting, fix, context.symptoms]
+ time_budget: "N/A"
+ topics_max: 3
+ note: "Direct troubleshooting, no profiling"
+
+ learn_everything:
+ beginner_60min:
+ core: [rules, sandbox_native_guide, workflow, essential_commands, context_management, plan_mode]
+ time_budget: "60 min"
+ topics_max: 6
+ note: "Security foundation + core workflow (v3.29.0 sandbox added)"
+
+ intermediate_120min:
+ core: [plan_mode, agents, skills, config_hierarchy, git_mcp_guide, hooks, mcp_servers]
+ time_budget: "120 min"
+ topics_max: 7
+ note: "Agents + v3.21-3.22 topics (config/git)"
+
+ power_120min:
+ core: [architecture, dual_instance_planning, mcp_secrets_management, cost_optimization, cicd]
+ adaptive:
+ - trigger: "security"
+ topics: [security_hardening, sandbox_native_guide]
+ - default: [rtk_guide, bridge_guide]
+ time_budget: "120 min"
+ topics_max: 9
+ note: "Advanced patterns + all v3.21-3.22 features"
+
+# ════════════════════════════════════════════════════════════════
+# ONBOARDING QUESTIONS - Structure for interactive profiling
+# ════════════════════════════════════════════════════════════════
+onboarding_questions:
+ mandatory:
+ goal:
+ ask: "What's your goal right now?"
+ options:
+ get_started: "🚀 Get started quickly"
+ optimize: "📈 Optimize my workflow"
+ build_agents: "🏗️ Build custom agents/skills"
+ learn_security: "🛡️ Learn security best practices"
+ fix_problem: "🐛 Fix a problem"
+ learn_everything: "📚 Learn everything"
+
+ level:
+ ask: "Experience with Claude Code?"
+ options:
+ beginner: "🟢 Beginner (never used / just installed)"
+ intermediate: "🟡 Intermediate (daily use)"
+ power: "🔴 Power User (know basics, want advanced)"
+
+ tone:
+ ask: "How do you prefer me to communicate?"
+ options:
+ pedagogical: "🎓 Pedagogical - Detailed explanations, understand why"
+ direct: "⚡ Direct - Straight to the point"
+ coaching: "🧭 Coaching - Guide me with questions"
+ adaptive: "🔄 Adaptive - Mix based on complexity"
+
+ optional:
+ time:
+ ask: "How much time do you have?"
+ options:
+ 5min: "⚡ 5-10 min"
+ 15min: "⏱️ 15-30 min"
+ 30min: "🎯 30-60 min"
+ 60min: "📚 1+ hour"
+ 120min: "📖 2+ hours"
+ default: "30min"
+
+ style:
+ ask: "How do you prefer to learn?"
+ options:
+ explain: "📖 Explanations (tell me why)"
+ examples: "💻 Examples (show me code)"
+ reference: "🎯 Quick reference (just the facts)"
+ handson: "🏋️ Hands-on (let me try)"
+ trigger: "Only ask if time >= 15min"
+
+ # Logic for progressive questioning
+ question_flow:
+ fix_problem: "goal only → skip to troubleshooting"
+ get_started: "goal → tone → level"
+ optimize: "goal → tone → level → time → style (if time >= 15min)"
+ build_agents: "goal → tone → level → time → style (if time >= 15min)"
+ learn_security: "goal → tone → level → time"
+ learn_everything: "goal → tone → level → time → style"
+
diff --git a/mcp-server/package-lock.json b/mcp-server/package-lock.json
new file mode 100644
index 0000000..4a5084d
--- /dev/null
+++ b/mcp-server/package-lock.json
@@ -0,0 +1,2604 @@
+{
+ "name": "claude-code-ultimate-guide-mcp",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "claude-code-ultimate-guide-mcp",
+ "version": "1.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "@modelcontextprotocol/sdk": "^1.6.0",
+ "yaml": "^2.4.0"
+ },
+ "bin": {
+ "claude-code-guide-mcp": "dist/index.js"
+ },
+ "devDependencies": {
+ "@types/node": "^22.0.0",
+ "tsup": "^8.0.0",
+ "typescript": "^5.4.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz",
+ "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz",
+ "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz",
+ "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz",
+ "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz",
+ "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz",
+ "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz",
+ "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz",
+ "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz",
+ "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz",
+ "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz",
+ "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz",
+ "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz",
+ "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz",
+ "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz",
+ "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz",
+ "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz",
+ "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz",
+ "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz",
+ "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz",
+ "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz",
+ "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz",
+ "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz",
+ "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz",
+ "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz",
+ "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz",
+ "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@hono/node-server": {
+ "version": "1.19.9",
+ "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz",
+ "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.14.1"
+ },
+ "peerDependencies": {
+ "hono": "^4"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@modelcontextprotocol/sdk": {
+ "version": "1.27.1",
+ "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.27.1.tgz",
+ "integrity": "sha512-sr6GbP+4edBwFndLbM60gf07z0FQ79gaExpnsjMGePXqFcSSb7t6iscpjk9DhFhwd+mTEQrzNafGP8/iGGFYaA==",
+ "license": "MIT",
+ "dependencies": {
+ "@hono/node-server": "^1.19.9",
+ "ajv": "^8.17.1",
+ "ajv-formats": "^3.0.1",
+ "content-type": "^1.0.5",
+ "cors": "^2.8.5",
+ "cross-spawn": "^7.0.5",
+ "eventsource": "^3.0.2",
+ "eventsource-parser": "^3.0.0",
+ "express": "^5.2.1",
+ "express-rate-limit": "^8.2.1",
+ "hono": "^4.11.4",
+ "jose": "^6.1.3",
+ "json-schema-typed": "^8.0.2",
+ "pkce-challenge": "^5.0.0",
+ "raw-body": "^3.0.0",
+ "zod": "^3.25 || ^4.0",
+ "zod-to-json-schema": "^3.25.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@cfworker/json-schema": "^4.1.1",
+ "zod": "^3.25 || ^4.0"
+ },
+ "peerDependenciesMeta": {
+ "@cfworker/json-schema": {
+ "optional": true
+ },
+ "zod": {
+ "optional": false
+ }
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz",
+ "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz",
+ "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz",
+ "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz",
+ "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz",
+ "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz",
+ "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz",
+ "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz",
+ "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz",
+ "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz",
+ "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz",
+ "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz",
+ "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz",
+ "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz",
+ "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz",
+ "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz",
+ "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz",
+ "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz",
+ "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz",
+ "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openbsd-x64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz",
+ "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz",
+ "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz",
+ "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz",
+ "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz",
+ "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz",
+ "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "22.19.13",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.13.tgz",
+ "integrity": "sha512-akNQMv0wW5uyRpD2v2IEyRSZiR+BeGuoB6L310EgGObO44HSMNT8z1xzio28V8qOrgYaopIDNA18YgdXd+qTiw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.21.0"
+ }
+ },
+ "node_modules/accepts": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
+ "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-types": "^3.0.0",
+ "negotiator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
+ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
+ "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ajv-formats": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz",
+ "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/body-parser": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz",
+ "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==",
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "^3.1.2",
+ "content-type": "^1.0.5",
+ "debug": "^4.4.3",
+ "http-errors": "^2.0.0",
+ "iconv-lite": "^0.7.0",
+ "on-finished": "^2.4.1",
+ "qs": "^6.14.1",
+ "raw-body": "^3.0.1",
+ "type-is": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/bundle-require": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz",
+ "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "load-tsconfig": "^0.2.3"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "esbuild": ">=0.18"
+ }
+ },
+ "node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/cac": {
+ "version": "6.7.14",
+ "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
+ "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/call-bound": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "get-intrinsic": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
+ "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readdirp": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 14.16.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/confbox": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz",
+ "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/consola": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz",
+ "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.18.0 || >=16.10.0"
+ }
+ },
+ "node_modules/content-disposition": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz",
+ "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/content-type": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
+ "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie-signature": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",
+ "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.6.0"
+ }
+ },
+ "node_modules/cors": {
+ "version": "2.8.6",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz",
+ "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==",
+ "license": "MIT",
+ "dependencies": {
+ "object-assign": "^4",
+ "vary": "^1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+ "license": "MIT"
+ },
+ "node_modules/encodeurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz",
+ "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.27.3",
+ "@esbuild/android-arm": "0.27.3",
+ "@esbuild/android-arm64": "0.27.3",
+ "@esbuild/android-x64": "0.27.3",
+ "@esbuild/darwin-arm64": "0.27.3",
+ "@esbuild/darwin-x64": "0.27.3",
+ "@esbuild/freebsd-arm64": "0.27.3",
+ "@esbuild/freebsd-x64": "0.27.3",
+ "@esbuild/linux-arm": "0.27.3",
+ "@esbuild/linux-arm64": "0.27.3",
+ "@esbuild/linux-ia32": "0.27.3",
+ "@esbuild/linux-loong64": "0.27.3",
+ "@esbuild/linux-mips64el": "0.27.3",
+ "@esbuild/linux-ppc64": "0.27.3",
+ "@esbuild/linux-riscv64": "0.27.3",
+ "@esbuild/linux-s390x": "0.27.3",
+ "@esbuild/linux-x64": "0.27.3",
+ "@esbuild/netbsd-arm64": "0.27.3",
+ "@esbuild/netbsd-x64": "0.27.3",
+ "@esbuild/openbsd-arm64": "0.27.3",
+ "@esbuild/openbsd-x64": "0.27.3",
+ "@esbuild/openharmony-arm64": "0.27.3",
+ "@esbuild/sunos-x64": "0.27.3",
+ "@esbuild/win32-arm64": "0.27.3",
+ "@esbuild/win32-ia32": "0.27.3",
+ "@esbuild/win32-x64": "0.27.3"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+ "license": "MIT"
+ },
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/eventsource": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz",
+ "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==",
+ "license": "MIT",
+ "dependencies": {
+ "eventsource-parser": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/eventsource-parser": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz",
+ "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/express": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz",
+ "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==",
+ "license": "MIT",
+ "dependencies": {
+ "accepts": "^2.0.0",
+ "body-parser": "^2.2.1",
+ "content-disposition": "^1.0.0",
+ "content-type": "^1.0.5",
+ "cookie": "^0.7.1",
+ "cookie-signature": "^1.2.1",
+ "debug": "^4.4.0",
+ "depd": "^2.0.0",
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "etag": "^1.8.1",
+ "finalhandler": "^2.1.0",
+ "fresh": "^2.0.0",
+ "http-errors": "^2.0.0",
+ "merge-descriptors": "^2.0.0",
+ "mime-types": "^3.0.0",
+ "on-finished": "^2.4.1",
+ "once": "^1.4.0",
+ "parseurl": "^1.3.3",
+ "proxy-addr": "^2.0.7",
+ "qs": "^6.14.0",
+ "range-parser": "^1.2.1",
+ "router": "^2.2.0",
+ "send": "^1.1.0",
+ "serve-static": "^2.2.0",
+ "statuses": "^2.0.1",
+ "type-is": "^2.0.1",
+ "vary": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/express-rate-limit": {
+ "version": "8.2.1",
+ "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.2.1.tgz",
+ "integrity": "sha512-PCZEIEIxqwhzw4KF0n7QF4QqruVTcF73O5kFKUnGOyjbCCgizBBiFaYpd/fnBLUMPw/BWw9OsiN7GgrNYr7j6g==",
+ "license": "MIT",
+ "dependencies": {
+ "ip-address": "10.0.1"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/express-rate-limit"
+ },
+ "peerDependencies": {
+ "express": ">= 4.11"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "license": "MIT"
+ },
+ "node_modules/fast-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
+ "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/finalhandler": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz",
+ "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.4.0",
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "on-finished": "^2.4.1",
+ "parseurl": "^1.3.3",
+ "statuses": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/fix-dts-default-cjs-exports": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/fix-dts-default-cjs-exports/-/fix-dts-default-cjs-exports-1.0.1.tgz",
+ "integrity": "sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "magic-string": "^0.30.17",
+ "mlly": "^1.7.4",
+ "rollup": "^4.34.8"
+ }
+ },
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fresh": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz",
+ "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/hono": {
+ "version": "4.12.3",
+ "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.3.tgz",
+ "integrity": "sha512-SFsVSjp8sj5UumXOOFlkZOG6XS9SJDKw0TbwFeV+AJ8xlST8kxK5Z/5EYa111UY8732lK2S/xB653ceuaoGwpg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16.9.0"
+ }
+ },
+ "node_modules/http-errors": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
+ "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
+ "license": "MIT",
+ "dependencies": {
+ "depd": "~2.0.0",
+ "inherits": "~2.0.4",
+ "setprototypeof": "~1.2.0",
+ "statuses": "~2.0.2",
+ "toidentifier": "~1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz",
+ "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==",
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "license": "ISC"
+ },
+ "node_modules/ip-address": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz",
+ "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/is-promise": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
+ "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
+ "license": "MIT"
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "license": "ISC"
+ },
+ "node_modules/jose": {
+ "version": "6.1.3",
+ "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz",
+ "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/panva"
+ }
+ },
+ "node_modules/joycon": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
+ "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "license": "MIT"
+ },
+ "node_modules/json-schema-typed": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz",
+ "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==",
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/lilconfig": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
+ "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antonk52"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/load-tsconfig": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz",
+ "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/media-typer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz",
+ "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/merge-descriptors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz",
+ "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.54.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
+ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz",
+ "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "^1.54.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/mlly": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz",
+ "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^8.15.0",
+ "pathe": "^2.0.3",
+ "pkg-types": "^1.3.1",
+ "ufo": "^1.6.1"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "node_modules/negotiator": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
+ "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.4",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "license": "MIT",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-to-regexp": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz",
+ "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/pathe": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/pkce-challenge": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz",
+ "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/pkg-types": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz",
+ "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "confbox": "^0.1.8",
+ "mlly": "^1.7.4",
+ "pathe": "^2.0.1"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz",
+ "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "lilconfig": "^3.1.1"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "jiti": ">=1.21.0",
+ "postcss": ">=8.0.9",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ },
+ "postcss": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+ "license": "MIT",
+ "dependencies": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/qs": {
+ "version": "6.15.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz",
+ "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "side-channel": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/raw-body": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz",
+ "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==",
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "~3.1.2",
+ "http-errors": "~2.0.1",
+ "iconv-lite": "~0.7.0",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
+ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.18.0"
+ },
+ "funding": {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz",
+ "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.8"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.59.0",
+ "@rollup/rollup-android-arm64": "4.59.0",
+ "@rollup/rollup-darwin-arm64": "4.59.0",
+ "@rollup/rollup-darwin-x64": "4.59.0",
+ "@rollup/rollup-freebsd-arm64": "4.59.0",
+ "@rollup/rollup-freebsd-x64": "4.59.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.59.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.59.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.59.0",
+ "@rollup/rollup-linux-arm64-musl": "4.59.0",
+ "@rollup/rollup-linux-loong64-gnu": "4.59.0",
+ "@rollup/rollup-linux-loong64-musl": "4.59.0",
+ "@rollup/rollup-linux-ppc64-gnu": "4.59.0",
+ "@rollup/rollup-linux-ppc64-musl": "4.59.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.59.0",
+ "@rollup/rollup-linux-riscv64-musl": "4.59.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.59.0",
+ "@rollup/rollup-linux-x64-gnu": "4.59.0",
+ "@rollup/rollup-linux-x64-musl": "4.59.0",
+ "@rollup/rollup-openbsd-x64": "4.59.0",
+ "@rollup/rollup-openharmony-arm64": "4.59.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.59.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.59.0",
+ "@rollup/rollup-win32-x64-gnu": "4.59.0",
+ "@rollup/rollup-win32-x64-msvc": "4.59.0",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/router": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz",
+ "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.4.0",
+ "depd": "^2.0.0",
+ "is-promise": "^4.0.0",
+ "parseurl": "^1.3.3",
+ "path-to-regexp": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "license": "MIT"
+ },
+ "node_modules/send": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz",
+ "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.4.3",
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "etag": "^1.8.1",
+ "fresh": "^2.0.0",
+ "http-errors": "^2.0.1",
+ "mime-types": "^3.0.2",
+ "ms": "^2.1.3",
+ "on-finished": "^2.4.1",
+ "range-parser": "^1.2.1",
+ "statuses": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/serve-static": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz",
+ "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==",
+ "license": "MIT",
+ "dependencies": {
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "parseurl": "^1.3.3",
+ "send": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+ "license": "ISC"
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3",
+ "side-channel-list": "^1.0.0",
+ "side-channel-map": "^1.0.1",
+ "side-channel-weakmap": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-list": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-weakmap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3",
+ "side-channel-map": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
+ "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/statuses": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
+ "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/sucrase": {
+ "version": "3.35.1",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz",
+ "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "tinyglobby": "^0.2.11",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/tinyexec": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz",
+ "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/tree-kill": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "tree-kill": "cli.js"
+ }
+ },
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/tsup": {
+ "version": "8.5.1",
+ "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.5.1.tgz",
+ "integrity": "sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bundle-require": "^5.1.0",
+ "cac": "^6.7.14",
+ "chokidar": "^4.0.3",
+ "consola": "^3.4.0",
+ "debug": "^4.4.0",
+ "esbuild": "^0.27.0",
+ "fix-dts-default-cjs-exports": "^1.0.0",
+ "joycon": "^3.1.1",
+ "picocolors": "^1.1.1",
+ "postcss-load-config": "^6.0.1",
+ "resolve-from": "^5.0.0",
+ "rollup": "^4.34.8",
+ "source-map": "^0.7.6",
+ "sucrase": "^3.35.0",
+ "tinyexec": "^0.3.2",
+ "tinyglobby": "^0.2.11",
+ "tree-kill": "^1.2.2"
+ },
+ "bin": {
+ "tsup": "dist/cli-default.js",
+ "tsup-node": "dist/cli-node.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@microsoft/api-extractor": "^7.36.0",
+ "@swc/core": "^1",
+ "postcss": "^8.4.12",
+ "typescript": ">=4.5.0"
+ },
+ "peerDependenciesMeta": {
+ "@microsoft/api-extractor": {
+ "optional": true
+ },
+ "@swc/core": {
+ "optional": true
+ },
+ "postcss": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/type-is": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz",
+ "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==",
+ "license": "MIT",
+ "dependencies": {
+ "content-type": "^1.0.5",
+ "media-typer": "^1.1.0",
+ "mime-types": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/ufo": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz",
+ "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "license": "ISC"
+ },
+ "node_modules/yaml": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz",
+ "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==",
+ "license": "ISC",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/eemeli"
+ }
+ },
+ "node_modules/zod": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz",
+ "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ },
+ "node_modules/zod-to-json-schema": {
+ "version": "3.25.1",
+ "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz",
+ "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==",
+ "license": "ISC",
+ "peerDependencies": {
+ "zod": "^3.25 || ^4"
+ }
+ }
+ }
+}
diff --git a/mcp-server/package.json b/mcp-server/package.json
new file mode 100644
index 0000000..d36466d
--- /dev/null
+++ b/mcp-server/package.json
@@ -0,0 +1,42 @@
+{
+ "name": "claude-code-ultimate-guide-mcp",
+ "version": "1.0.0",
+ "description": "MCP server for the Claude Code Ultimate Guide — search, read, and explore 20K+ lines of documentation directly from Claude Code",
+ "keywords": ["mcp", "claude-code", "anthropic", "documentation", "guide"],
+ "author": "Florian Bruniaux",
+ "license": "MIT",
+ "homepage": "https://github.com/FlorianBruniaux/claude-code-ultimate-guide",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/FlorianBruniaux/claude-code-ultimate-guide.git",
+ "directory": "mcp-server"
+ },
+ "type": "module",
+ "main": "./dist/index.js",
+ "bin": {
+ "claude-code-guide-mcp": "./dist/index.js"
+ },
+ "files": [
+ "dist/**/*.js",
+ "dist/**/*.d.ts",
+ "content"
+ ],
+ "scripts": {
+ "build": "tsup",
+ "dev": "GUIDE_ROOT=.. node --watch dist/index.js",
+ "start": "node dist/index.js",
+ "prepublishOnly": "npm run build"
+ },
+ "dependencies": {
+ "@modelcontextprotocol/sdk": "^1.6.0",
+ "yaml": "^2.4.0"
+ },
+ "devDependencies": {
+ "@types/node": "^22.0.0",
+ "tsup": "^8.0.0",
+ "typescript": "^5.4.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+}
diff --git a/mcp-server/src/index.ts b/mcp-server/src/index.ts
new file mode 100644
index 0000000..717b4a6
--- /dev/null
+++ b/mcp-server/src/index.ts
@@ -0,0 +1,13 @@
+import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
+import { createServer } from './server.js';
+
+async function main(): Promise {
+ const server = createServer();
+ const transport = new StdioServerTransport();
+ await server.connect(transport);
+}
+
+main().catch((err) => {
+ process.stderr.write(`[claude-code-guide] Fatal error: ${err}\n`);
+ process.exit(1);
+});
diff --git a/mcp-server/src/lib/changelog-parser.ts b/mcp-server/src/lib/changelog-parser.ts
new file mode 100644
index 0000000..9cb1a5b
--- /dev/null
+++ b/mcp-server/src/lib/changelog-parser.ts
@@ -0,0 +1,36 @@
+export interface ChangelogEntry {
+ version: string;
+ date: string;
+ dateObj: Date;
+ content: string;
+}
+
+export function parseChangelog(raw: string): ChangelogEntry[] {
+ const entries: ChangelogEntry[] = [];
+ // Match headers like: ## [3.27.0] - 2026-02-20 or ## [Unreleased]
+ const headerRe = /^## \[([^\]]+)\](?:\s*-\s*(\d{4}-\d{2}-\d{2}))?/m;
+ const blocks = raw.split(/^(?=## \[)/m).filter((b) => b.trim());
+
+ for (const block of blocks) {
+ const match = block.match(headerRe);
+ if (!match) continue;
+ const version = match[1];
+ const dateStr = match[2] ?? '';
+ const dateObj = dateStr ? new Date(dateStr) : new Date(0);
+ entries.push({ version, date: dateStr, dateObj, content: block.trim() });
+ }
+
+ return entries;
+}
+
+export function filterByPeriod(
+ entries: ChangelogEntry[],
+ period: 'day' | 'week' | 'month',
+): ChangelogEntry[] {
+ const MS = { day: 86_400_000, week: 7 * 86_400_000, month: 30 * 86_400_000 };
+ const cutoff = Date.now() - MS[period];
+ return entries.filter(
+ // Include [Unreleased] (treat as today) + dated entries within the window
+ (e) => e.version === 'Unreleased' || e.dateObj.getTime() >= cutoff,
+ );
+}
diff --git a/mcp-server/src/lib/content.ts b/mcp-server/src/lib/content.ts
new file mode 100644
index 0000000..56f3719
--- /dev/null
+++ b/mcp-server/src/lib/content.ts
@@ -0,0 +1,278 @@
+import { readFileSync } from 'fs';
+import { resolve, join, sep } from 'path';
+import { parse as parseYaml } from 'yaml';
+import { fileURLToPath } from 'url';
+import { fetchFile } from './fetcher.js';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = resolve(__filename, '..');
+
+// Dual mode: GUIDE_ROOT env var = local dev, else bundled content
+const GUIDE_ROOT = process.env.GUIDE_ROOT
+ ? resolve(process.env.GUIDE_ROOT)
+ : null;
+
+const CONTENT_DIR = GUIDE_ROOT
+ ? resolve(GUIDE_ROOT, 'machine-readable')
+ : resolve(__dirname, '../../content');
+
+const ALLOWED_EXTENSIONS = new Set([
+ '.md', '.yaml', '.yml', '.sh', '.ts', '.js', '.json', '.py', '.txt',
+]);
+
+// ─── Types ───────────────────────────────────────────────────────────────────
+
+export type DeepDiveTarget =
+ | { type: 'line'; file: 'guide/ultimate-guide.md'; line: number }
+ | { type: 'file'; path: string; line?: number }
+ | { type: 'url'; url: string }
+ | { type: 'inline'; text: string }
+ | { type: 'structured'; data: unknown };
+
+export interface IndexEntry {
+ key: string;
+ section: string;
+ value: unknown;
+ searchableText: string;
+ target?: DeepDiveTarget;
+}
+
+export interface ReferenceData {
+ version: string;
+ entries: IndexEntry[];
+ raw: Record;
+}
+
+export interface ReleasesData {
+ latest: string;
+ updated: string;
+ releases: unknown[];
+ raw: Record;
+}
+
+export interface ThreatDbData {
+ version: string;
+ updated: string;
+ sources: unknown[];
+ malicious_authors: unknown[];
+ malicious_skills: unknown[];
+ cve_database: unknown[];
+ attack_techniques: unknown[];
+ minimum_safe_versions: Record;
+ raw: Record;
+}
+
+// ─── Path resolver ────────────────────────────────────────────────────────────
+
+export function resolveContentPath(relativePath: string): string | null {
+ const base = GUIDE_ROOT ?? resolve(__dirname, '../../..');
+
+ // Layer 1: resolve and check starts with base
+ const resolved = resolve(base, relativePath);
+ if (!resolved.startsWith(base + sep)) return null;
+
+ // Layer 2: extension whitelist
+ const ext = relativePath.slice(relativePath.lastIndexOf('.'));
+ if (!ALLOWED_EXTENSIONS.has(ext)) return null;
+
+ return resolved;
+}
+
+export function isDevMode(): boolean {
+ return GUIDE_ROOT !== null;
+}
+
+export function getGuideRoot(): string {
+ return GUIDE_ROOT ?? resolve(__dirname, '../../..');
+}
+
+// ─── YAML cache ───────────────────────────────────────────────────────────────
+
+let referenceCache: ReferenceData | null = null;
+let releasesCache: ReleasesData | null = null;
+let threatDbCache: ThreatDbData | null = null;
+
+export function loadReference(): ReferenceData {
+ if (referenceCache) return referenceCache;
+
+ const filePath = join(CONTENT_DIR, 'reference.yaml');
+ const raw = parseYaml(readFileSync(filePath, 'utf8')) as Record;
+
+ const entries: IndexEntry[] = [];
+ flattenReference(raw, '', entries);
+
+ referenceCache = {
+ version: (raw.version as string) ?? 'unknown',
+ entries,
+ raw,
+ };
+ return referenceCache;
+}
+
+export function loadReleases(): ReleasesData {
+ if (releasesCache) return releasesCache;
+
+ const filePath = join(CONTENT_DIR, 'claude-code-releases.yaml');
+ const raw = parseYaml(readFileSync(filePath, 'utf8')) as Record;
+
+ releasesCache = {
+ latest: (raw.latest as string) ?? 'unknown',
+ updated: (raw.updated as string) ?? 'unknown',
+ releases: (raw.releases as unknown[]) ?? [],
+ raw,
+ };
+ return releasesCache;
+}
+
+export async function loadThreatDb(): Promise {
+ if (threatDbCache) return threatDbCache;
+
+ const THREAT_DB_PATH = 'examples/commands/resources/threat-db.yaml';
+ let content: string;
+
+ if (GUIDE_ROOT) {
+ content = readFileSync(join(GUIDE_ROOT, THREAT_DB_PATH), 'utf8');
+ } else {
+ const fetched = await fetchFile(THREAT_DB_PATH);
+ if (!fetched) throw new Error('Failed to load threat-db.yaml');
+ content = fetched;
+ }
+
+ const raw = parseYaml(content) as Record;
+
+ threatDbCache = {
+ version: (raw.version as string) ?? 'unknown',
+ updated: (raw.updated as string) ?? 'unknown',
+ sources: (raw.sources as unknown[]) ?? [],
+ malicious_authors: (raw.malicious_authors as unknown[]) ?? [],
+ malicious_skills: (raw.malicious_skills as unknown[]) ?? [],
+ cve_database: (raw.cve_database as unknown[]) ?? [],
+ attack_techniques: (raw.attack_techniques as unknown[]) ?? [],
+ minimum_safe_versions: (raw.minimum_safe_versions as Record) ?? {},
+ raw,
+ };
+ return threatDbCache;
+}
+
+export function loadLlmsTxt(): string {
+ const filePath = join(CONTENT_DIR, 'llms.txt');
+ return readFileSync(filePath, 'utf8');
+}
+
+export function getReferenceYamlRaw(): string {
+ const filePath = join(CONTENT_DIR, 'reference.yaml');
+ return readFileSync(filePath, 'utf8');
+}
+
+export function getReleasesYamlRaw(): string {
+ const filePath = join(CONTENT_DIR, 'claude-code-releases.yaml');
+ return readFileSync(filePath, 'utf8');
+}
+
+// ─── Deep dive resolver ───────────────────────────────────────────────────────
+
+export function resolveDeepDive(value: unknown): DeepDiveTarget | undefined {
+ if (value === null || value === undefined) return undefined;
+
+ if (typeof value === 'number') {
+ return { type: 'line', file: 'guide/ultimate-guide.md', line: value };
+ }
+
+ if (typeof value === 'string') {
+ if (value.startsWith('http://') || value.startsWith('https://')) {
+ return { type: 'url', url: value };
+ }
+ // File path with optional :line suffix
+ const filePathMatch = value.match(/^(guide\/|examples\/|whitepapers\/|machine-readable\/)(.+?)(?::(\d+))?$/);
+ if (filePathMatch) {
+ return {
+ type: 'file',
+ path: filePathMatch[1] + filePathMatch[2],
+ line: filePathMatch[3] ? parseInt(filePathMatch[3], 10) : undefined,
+ };
+ }
+ return { type: 'inline', text: value };
+ }
+
+ if (typeof value === 'object') {
+ return { type: 'structured', data: value };
+ }
+
+ return { type: 'inline', text: String(value) };
+}
+
+// ─── Reference flattener ──────────────────────────────────────────────────────
+
+function flattenReference(
+ obj: Record,
+ prefix: string,
+ entries: IndexEntry[],
+): void {
+ for (const [key, value] of Object.entries(obj)) {
+ const fullKey = prefix ? `${prefix}_${key}` : key;
+
+ if (key === 'version' || key === 'generated' || key === 'description' || key === 'note') {
+ continue;
+ }
+
+ if (value === null || value === undefined) continue;
+
+ if (typeof value === 'object' && !Array.isArray(value)) {
+ const obj2 = value as Record;
+ // Check if it's a leaf-like object (has deep_dive or simple scalar values)
+ const hasDeepDive = 'deep_dive' in obj2;
+ const hasNestedObjects = Object.values(obj2).some(
+ (v) => typeof v === 'object' && v !== null && !Array.isArray(v) && !('deep_dive' in (v as Record)),
+ );
+
+ if (hasDeepDive || !hasNestedObjects) {
+ // Treat as leaf entry
+ const searchableText = buildSearchableText(fullKey, value);
+ const target = hasDeepDive
+ ? resolveDeepDive((obj2 as Record).deep_dive)
+ : resolveDeepDive(value);
+
+ entries.push({
+ key: fullKey,
+ section: prefix.split('_')[0] ?? fullKey,
+ value,
+ searchableText,
+ target,
+ });
+ } else {
+ flattenReference(obj2, fullKey, entries);
+ }
+ } else {
+ const searchableText = buildSearchableText(fullKey, value);
+ const target = resolveDeepDive(value);
+ entries.push({
+ key: fullKey,
+ section: prefix.split('_')[0] ?? fullKey,
+ value,
+ searchableText,
+ target,
+ });
+ }
+ }
+}
+
+function buildSearchableText(key: string, value: unknown): string {
+ const parts: string[] = [key.replace(/_/g, ' ')];
+
+ if (typeof value === 'string') {
+ parts.push(value);
+ } else if (typeof value === 'number') {
+ parts.push(String(value));
+ } else if (Array.isArray(value)) {
+ for (const item of value) {
+ if (typeof item === 'string') parts.push(item);
+ else if (typeof item === 'object' && item !== null) {
+ parts.push(JSON.stringify(item));
+ }
+ }
+ } else if (typeof value === 'object' && value !== null) {
+ parts.push(JSON.stringify(value));
+ }
+
+ return parts.join(' ').toLowerCase();
+}
diff --git a/mcp-server/src/lib/fetcher.ts b/mcp-server/src/lib/fetcher.ts
new file mode 100644
index 0000000..902ea6c
--- /dev/null
+++ b/mcp-server/src/lib/fetcher.ts
@@ -0,0 +1,69 @@
+import { existsSync, mkdirSync, readFileSync, writeFileSync, statSync } from 'fs';
+import { resolve, dirname } from 'path';
+import { homedir } from 'os';
+import { createHash } from 'crypto';
+
+const PACKAGE_VERSION = '1.0.0';
+const GITHUB_RAW_BASE =
+ 'https://raw.githubusercontent.com/FlorianBruniaux/claude-code-ultimate-guide/main';
+const CACHE_DIR = resolve(homedir(), '.cache', 'claude-code-guide', PACKAGE_VERSION);
+const CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24h
+
+function getCachePath(filePath: string): string {
+ // Use hash to avoid path issues, but keep extension for readability
+ const hash = createHash('md5').update(filePath).digest('hex').slice(0, 8);
+ const safe = filePath.replace(/[^a-zA-Z0-9._-]/g, '_');
+ return resolve(CACHE_DIR, `${hash}_${safe}`);
+}
+
+function isCacheValid(cachePath: string): boolean {
+ if (!existsSync(cachePath)) return false;
+ const stat = statSync(cachePath);
+ return Date.now() - stat.mtimeMs < CACHE_TTL_MS;
+}
+
+export async function fetchFile(filePath: string): Promise {
+ // Normalize path separators
+ const normalizedPath = filePath.replace(/\\/g, '/');
+ const cachePath = getCachePath(normalizedPath);
+
+ // Return cache if valid
+ if (isCacheValid(cachePath)) {
+ return readFileSync(cachePath, 'utf8');
+ }
+
+ // Fetch from GitHub
+ const url = `${GITHUB_RAW_BASE}/${normalizedPath}`;
+ try {
+ const response = await fetch(url, {
+ headers: { 'User-Agent': 'claude-code-ultimate-guide-mcp/1.0.0' },
+ signal: AbortSignal.timeout(10_000),
+ });
+
+ if (!response.ok) {
+ // Return stale cache if available (offline fallback)
+ if (existsSync(cachePath)) {
+ return readFileSync(cachePath, 'utf8');
+ }
+ return null;
+ }
+
+ const content = await response.text();
+
+ // Write to cache
+ mkdirSync(dirname(cachePath), { recursive: true });
+ writeFileSync(cachePath, content, 'utf8');
+
+ return content;
+ } catch {
+ // Offline fallback: return stale cache
+ if (existsSync(cachePath)) {
+ return readFileSync(cachePath, 'utf8');
+ }
+ return null;
+ }
+}
+
+export function getCacheDir(): string {
+ return CACHE_DIR;
+}
diff --git a/mcp-server/src/lib/search.ts b/mcp-server/src/lib/search.ts
new file mode 100644
index 0000000..8568ee2
--- /dev/null
+++ b/mcp-server/src/lib/search.ts
@@ -0,0 +1,184 @@
+import { loadReference, type IndexEntry } from './content.js';
+
+// ─── Stop words ───────────────────────────────────────────────────────────────
+
+const STOP_WORDS = new Set([
+ 'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been',
+ 'do', 'does', 'did', 'have', 'has', 'had', 'will', 'would',
+ 'can', 'could', 'should', 'may', 'might', 'shall',
+ 'i', 'you', 'he', 'she', 'it', 'we', 'they', 'my', 'your',
+ 'to', 'of', 'in', 'for', 'on', 'with', 'at', 'by', 'from',
+ 'how', 'what', 'when', 'where', 'which', 'who', 'why',
+ 'not', 'no', 'up', 'out', 'if', 'about', 'into', 'that', 'this',
+ 'and', 'or', 'but', 'so', 'yet', 'nor', 'use', 'using', 'used',
+ 'get', 'set', 'add', 'run', 'make', 'see', 'all', 'new',
+]);
+
+// ─── Synonymes domaine ────────────────────────────────────────────────────────
+
+const SYNONYMS: Record = {
+ env: ['environment', 'env_var', 'variable', 'envvar'],
+ config: ['configuration', 'settings', 'configure', 'setup'],
+ cmd: ['command', 'commands', 'slash'],
+ auth: ['authentication', 'permission', 'permissions', 'authorize'],
+ hook: ['hooks', 'event', 'pre_tool', 'post_tool', 'events'],
+ agent: ['agents', 'subagent', 'teammate', 'subagents'],
+ mcp: ['model_context_protocol', 'mcp_server', 'mcp_servers', 'protocol'],
+ skill: ['skills', 'skill_module', 'modules'],
+ debug: ['debugging', 'troubleshoot', 'troubleshooting', 'diagnose'],
+ cost: ['token', 'tokens', 'pricing', 'budget', 'optimization', 'cost'],
+ security: ['secure', 'hardening', 'vulnerability', 'cve', 'threat'],
+ sandbox: ['isolation', 'container', 'docker', 'isolated'],
+ slash: ['command', 'commands', 'custom_command'],
+ install: ['installation', 'setup', 'installing'],
+ memory: ['persistence', 'serena', 'context'],
+ test: ['testing', 'tdd', 'bdd', 'spec', 'specs'],
+ workflow: ['workflows', 'process', 'flow'],
+ template: ['templates', 'example', 'examples', 'boilerplate'],
+ model: ['claude', 'opus', 'sonnet', 'haiku', 'llm'],
+ key: ['keyboard', 'shortcut', 'keybinding', 'keybindings'],
+};
+
+// ─── Levenshtein distance (inline, ~20 lines) ─────────────────────────────────
+
+function levenshtein(a: string, b: string): number {
+ if (Math.abs(a.length - b.length) > 3) return 99; // fast bail
+ const m = a.length, n = b.length;
+ const dp: number[][] = Array.from({ length: m + 1 }, (_, i) =>
+ Array.from({ length: n + 1 }, (_, j) => (i === 0 ? j : j === 0 ? i : 0)),
+ );
+ for (let i = 1; i <= m; i++) {
+ for (let j = 1; j <= n; j++) {
+ dp[i][j] =
+ a[i - 1] === b[j - 1]
+ ? dp[i - 1][j - 1]
+ : 1 + Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]);
+ }
+ }
+ return dp[m][n];
+}
+
+// ─── Query processing ─────────────────────────────────────────────────────────
+
+export function tokenizeQuery(query: string): string[] {
+ const tokens = query
+ .toLowerCase()
+ .replace(/[^a-z0-9_\s-]/g, ' ')
+ .split(/\s+/)
+ .filter((t) => t.length > 1 && !STOP_WORDS.has(t));
+
+ // Expand synonyms
+ const expanded = new Set(tokens);
+ for (const token of tokens) {
+ const syns = SYNONYMS[token];
+ if (syns) {
+ for (const syn of syns) expanded.add(syn);
+ }
+ // Also check partial matches on synonym keys
+ for (const [key, syns2] of Object.entries(SYNONYMS)) {
+ if (key.startsWith(token) || token.startsWith(key)) {
+ expanded.add(key);
+ for (const s of syns2) expanded.add(s);
+ }
+ }
+ }
+
+ return Array.from(expanded);
+}
+
+// ─── Scoring ──────────────────────────────────────────────────────────────────
+
+export interface SearchResult {
+ key: string;
+ section: string;
+ score: number;
+ value: unknown;
+ target: ReturnType;
+ hint: string;
+}
+
+function scoreEntry(entry: IndexEntry, tokens: string[], originalTokens: string[]): number {
+ let score = 0;
+ const keyLower = entry.key.toLowerCase();
+ const keySegments = keyLower.split('_');
+
+ for (const token of tokens) {
+ if (token.length < 2) continue;
+
+ if (keyLower === token) {
+ score += 20;
+ } else if (keyLower.includes(token)) {
+ score += 10;
+ } else if (keySegments.some((seg) => seg.startsWith(token))) {
+ score += 7;
+ } else if (entry.searchableText.includes(token)) {
+ score += 5;
+ }
+ }
+
+ // Fuzzy only if no exact matches and token is long enough
+ if (score === 0) {
+ for (const token of originalTokens) {
+ if (token.length <= 4) continue;
+ for (const seg of keySegments) {
+ if (seg.length > 4 && levenshtein(token, seg) <= 2) {
+ score += 2;
+ break;
+ }
+ }
+ }
+ }
+
+ return score;
+}
+
+function buildHint(entry: IndexEntry): string {
+ const { target } = entry;
+ if (!target) return `Key: ${entry.key}`;
+
+ switch (target.type) {
+ case 'line':
+ return `guide/ultimate-guide.md:${target.line}`;
+ case 'file':
+ return target.line ? `${target.path}:${target.line}` : target.path;
+ case 'url':
+ return target.url;
+ case 'inline':
+ return target.text.length > 100 ? target.text.slice(0, 100) + '…' : target.text;
+ case 'structured':
+ return `[structured data] — ${entry.key}`;
+ }
+}
+
+// ─── Main search function ─────────────────────────────────────────────────────
+
+export function searchGuide(query: string, limit = 10): SearchResult[] {
+ const ref = loadReference();
+ const tokens = tokenizeQuery(query);
+ const originalTokens = query
+ .toLowerCase()
+ .split(/\s+/)
+ .filter((t) => t.length > 1 && !STOP_WORDS.has(t));
+
+ if (tokens.length === 0) return [];
+
+ const results: SearchResult[] = [];
+
+ for (const entry of ref.entries) {
+ const score = scoreEntry(entry, tokens, originalTokens);
+ if (score > 0) {
+ results.push({
+ key: entry.key,
+ section: entry.section,
+ score,
+ value: entry.value,
+ target: entry.target,
+ hint: buildHint(entry),
+ });
+ }
+ }
+
+ return results
+ .sort((a, b) => b.score - a.score)
+ .slice(0, Math.min(limit, 20));
+}
diff --git a/mcp-server/src/lib/section-reader.ts b/mcp-server/src/lib/section-reader.ts
new file mode 100644
index 0000000..33ba42c
--- /dev/null
+++ b/mcp-server/src/lib/section-reader.ts
@@ -0,0 +1,103 @@
+import { readFileSync, existsSync } from 'fs';
+import { resolveContentPath, isDevMode } from './content.js';
+import { fetchFile } from './fetcher.js';
+
+export interface SectionResult {
+ content: string;
+ startLine: number;
+ endLine: number;
+ totalLines: number;
+ hasMore: boolean;
+ nextOffset: number | null;
+}
+
+const MAX_LINES = 500;
+
+// ─── Heading level detector ───────────────────────────────────────────────────
+
+function getHeadingLevel(line: string): number | null {
+ const match = line.match(/^(#{1,6})\s/);
+ return match ? match[1].length : null;
+}
+
+// ─── Section extraction ───────────────────────────────────────────────────────
+
+export function extractSection(
+ lines: string[],
+ offset: number,
+ limit: number,
+): SectionResult {
+ const totalLines = lines.length;
+ const startLine = Math.max(1, Math.min(offset, totalLines));
+ const effectiveLimit = Math.min(limit, MAX_LINES);
+
+ // Find heading level of starting section (for boundary detection)
+ let sectionLevel: number | null = null;
+ for (let i = startLine - 1; i < Math.min(startLine + 5, totalLines); i++) {
+ const level = getHeadingLevel(lines[i]);
+ if (level !== null) {
+ sectionLevel = level;
+ break;
+ }
+ }
+
+ let inCodeFence = false;
+ let endLine = startLine - 1;
+ const collected: string[] = [];
+
+ for (let i = startLine - 1; i < totalLines && collected.length < effectiveLimit; i++) {
+ const line = lines[i];
+
+ // Track code fences
+ if (line.trimStart().startsWith('```')) {
+ inCodeFence = !inCodeFence;
+ }
+
+ // Check heading boundary (only outside code fences, only same/higher level)
+ if (!inCodeFence && i > startLine - 1 && sectionLevel !== null) {
+ const level = getHeadingLevel(line);
+ if (level !== null && level <= sectionLevel) {
+ break; // Stop at same or higher heading
+ }
+ }
+
+ collected.push(line);
+ endLine = i + 1;
+ }
+
+ const hasMore = endLine < totalLines && collected.length >= effectiveLimit;
+
+ return {
+ content: collected.join('\n'),
+ startLine,
+ endLine,
+ totalLines,
+ hasMore,
+ nextOffset: hasMore ? endLine + 1 : null,
+ };
+}
+
+// ─── Public API ───────────────────────────────────────────────────────────────
+
+export async function readSection(
+ filePath: string,
+ offset = 1,
+ limit = MAX_LINES,
+): Promise {
+ let content: string | null = null;
+
+ if (isDevMode()) {
+ // Dev mode: read from local filesystem
+ const resolved = resolveContentPath(filePath);
+ if (!resolved || !existsSync(resolved)) return null;
+ content = readFileSync(resolved, 'utf8');
+ } else {
+ // Production: fetch from GitHub (with cache)
+ content = await fetchFile(filePath);
+ }
+
+ if (content === null) return null;
+
+ const lines = content.split('\n');
+ return extractSection(lines, offset, limit);
+}
diff --git a/mcp-server/src/lib/urls.ts b/mcp-server/src/lib/urls.ts
new file mode 100644
index 0000000..5cc0bdf
--- /dev/null
+++ b/mcp-server/src/lib/urls.ts
@@ -0,0 +1,23 @@
+const GITHUB_BASE = 'https://github.com/FlorianBruniaux/claude-code-ultimate-guide/blob/main';
+const GUIDE_SITE_BASE = 'https://cc.bruniaux.com/guide';
+
+export function githubUrl(filePath: string, line?: number): string {
+ const base = `${GITHUB_BASE}/${filePath}`;
+ return line ? `${base}#L${line}` : base;
+}
+
+// Only ultimate-guide.md is rendered on the guide site
+export function guideSiteUrl(filePath: string, line?: number): string | null {
+ if (filePath !== 'guide/ultimate-guide.md') return null;
+ // Line numbers don't map to anchors directly — link to the reader root
+ // If a line is provided, append a hint as a hash comment (not a real anchor)
+ return line ? `${GUIDE_SITE_BASE}/#L${line}` : GUIDE_SITE_BASE;
+}
+
+export function formatLinks(filePath: string, line?: number): string {
+ const gh = githubUrl(filePath, line);
+ const site = guideSiteUrl(filePath, line);
+ const parts = [`GitHub: ${gh}`];
+ if (site) parts.push(`Guide: ${site}`);
+ return parts.join(' | ');
+}
diff --git a/mcp-server/src/prompts/index.ts b/mcp-server/src/prompts/index.ts
new file mode 100644
index 0000000..e76142f
--- /dev/null
+++ b/mcp-server/src/prompts/index.ts
@@ -0,0 +1,70 @@
+import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
+import { z } from 'zod';
+
+export function registerPrompts(server: McpServer): void {
+ server.prompt(
+ 'claude-code-expert',
+ 'Activate Claude Code expert mode with the optimal workflow for answering questions using the Ultimate Guide.',
+ {
+ question: z.string().optional().describe('Optional question to answer immediately'),
+ },
+ async ({ question }) => {
+ const systemPrompt = `You are an expert on Claude Code (Anthropic's CLI tool) with access to the Claude Code Ultimate Guide — a comprehensive 20,000+ line reference covering every feature, workflow, and best practice.
+
+## How to answer Claude Code questions
+
+**Step 1 — Fast path (targeted questions)**
+Use search_guide(query) with 1-3 keywords:
+- "hooks" not "how do I configure hooks"
+- "cost optimization" not "how to reduce token usage"
+- "custom agents" not "how to create agent files"
+
+If results have score > 10, follow the deep_dive links with read_section().
+
+**Step 2 — Fallback (broad questions or insufficient search results)**
+Read the resource claude-code-guide://reference — it's 94KB of structured YAML with ~900 indexed entries. Parse it directly to find what you need.
+
+**Step 3 — Templates**
+Use get_example(name) for production-ready code:
+- Agents: get_example("code-reviewer"), get_example("backend-architect")
+- Hooks: get_example("pre-commit"), get_example("notification")
+- Commands: get_example("release"), get_example("audit")
+- Skills: get_example("commit"), get_example("review-pr")
+
+## Rules
+- Always cite the source file and line number
+- Never invent Claude Code features — if you're not sure, say so
+- If a feature isn't in the guide, check claude-code-guide://releases for recent additions
+- Prefer concrete examples over abstract explanations
+- For version-specific questions, check the releases resource first
+- **Respond in the same language the user used** — if they ask in French, answer in French; if English, answer in English. Tool output is in English but your response should match the user's language.
+
+## Guide structure
+- guide/ultimate-guide.md — Main reference (20K+ lines)
+- guide/cheatsheet.md — Quick reference
+- guide/architecture.md — How Claude Code works internally
+- examples/agents/ — Custom agent templates
+- examples/commands/ — Slash command templates
+- examples/hooks/ — Event hook examples
+- examples/skills/ — Skill module templates
+- machine-readable/reference.yaml — Structured index (available via resource)`;
+
+ const messages = [
+ {
+ role: 'user' as const,
+ content: {
+ type: 'text' as const,
+ text: question
+ ? `${systemPrompt}\n\n---\n\nQuestion: ${question}`
+ : systemPrompt,
+ },
+ },
+ ];
+
+ return {
+ description: 'Claude Code expert mode activated',
+ messages,
+ };
+ },
+ );
+}
diff --git a/mcp-server/src/resources/index.ts b/mcp-server/src/resources/index.ts
new file mode 100644
index 0000000..699a391
--- /dev/null
+++ b/mcp-server/src/resources/index.ts
@@ -0,0 +1,70 @@
+import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
+import { getReferenceYamlRaw, getReleasesYamlRaw, loadLlmsTxt } from '../lib/content.js';
+
+export function registerResources(server: McpServer): void {
+ // Full reference YAML — the fallback when search isn't enough
+ server.resource(
+ 'reference',
+ 'claude-code-guide://reference',
+ {
+ description: 'Complete structured index of the Claude Code Ultimate Guide (94KB YAML, ~900 entries). Use as fallback when search_guide() results are insufficient.',
+ mimeType: 'text/yaml',
+ },
+ async () => {
+ const content = getReferenceYamlRaw();
+ return {
+ contents: [
+ {
+ uri: 'claude-code-guide://reference',
+ mimeType: 'text/yaml',
+ text: content,
+ },
+ ],
+ };
+ },
+ );
+
+ // Releases history
+ server.resource(
+ 'releases',
+ 'claude-code-guide://releases',
+ {
+ description: 'Claude Code official releases history — condensed highlights and breaking changes for each version.',
+ mimeType: 'text/yaml',
+ },
+ async () => {
+ const content = getReleasesYamlRaw();
+ return {
+ contents: [
+ {
+ uri: 'claude-code-guide://releases',
+ mimeType: 'text/yaml',
+ text: content,
+ },
+ ],
+ };
+ },
+ );
+
+ // Guide identity file
+ server.resource(
+ 'llms',
+ 'claude-code-guide://llms',
+ {
+ description: 'llms.txt — machine-readable identity and navigation file for the Claude Code Ultimate Guide.',
+ mimeType: 'text/plain',
+ },
+ async () => {
+ const content = loadLlmsTxt();
+ return {
+ contents: [
+ {
+ uri: 'claude-code-guide://llms',
+ mimeType: 'text/plain',
+ text: content,
+ },
+ ],
+ };
+ },
+ );
+}
diff --git a/mcp-server/src/server.ts b/mcp-server/src/server.ts
new file mode 100644
index 0000000..3a3b7a1
--- /dev/null
+++ b/mcp-server/src/server.ts
@@ -0,0 +1,56 @@
+import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
+import { registerSearchGuide } from './tools/search-guide.js';
+import { registerReadSection } from './tools/read-section.js';
+import { registerListTopics } from './tools/list-topics.js';
+import { registerGetExample } from './tools/get-example.js';
+import { registerChangelog } from './tools/changelog.js';
+import { registerCheatsheet } from './tools/cheatsheet.js';
+import { registerListExamples } from './tools/list-examples.js';
+import { registerReleases } from './tools/releases.js';
+import { registerCompareVersions } from './tools/compare-versions.js';
+import { registerGetThreat, registerListThreats } from './tools/threats.js';
+import { registerSearchExamples } from './tools/search-examples.js';
+import { registerResources } from './resources/index.js';
+import { registerPrompts } from './prompts/index.js';
+import { loadReference, loadReleases, isDevMode } from './lib/content.js';
+
+export function createServer(): McpServer {
+ const server = new McpServer({
+ name: 'claude-code-ultimate-guide',
+ version: '1.0.0',
+ });
+
+ // Pre-load YAML indexes into memory at startup
+ try {
+ const ref = loadReference();
+ const releases = loadReleases();
+ const mode = isDevMode() ? 'dev (local files)' : 'production (GitHub lazy fetch)';
+ process.stderr.write(
+ `[claude-code-guide] Loaded ${ref.entries.length} index entries | ${releases.releases.length} releases | mode: ${mode}\n`,
+ );
+ } catch (err) {
+ process.stderr.write(`[claude-code-guide] Warning: Failed to pre-load indexes: ${err}\n`);
+ }
+
+ // Register all tools
+ registerSearchGuide(server);
+ registerReadSection(server);
+ registerListTopics(server);
+ registerGetExample(server);
+ registerChangelog(server);
+ registerCheatsheet(server);
+ registerListExamples(server);
+ registerReleases(server);
+ registerCompareVersions(server);
+ registerGetThreat(server);
+ registerListThreats(server);
+ registerSearchExamples(server);
+
+ // Register resources
+ registerResources(server);
+
+ // Register prompts
+ registerPrompts(server);
+
+ return server;
+}
diff --git a/mcp-server/src/tools/changelog.ts b/mcp-server/src/tools/changelog.ts
new file mode 100644
index 0000000..0b697eb
--- /dev/null
+++ b/mcp-server/src/tools/changelog.ts
@@ -0,0 +1,179 @@
+import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
+import { z } from 'zod';
+import { readSection } from '../lib/section-reader.js';
+import { parseChangelog, filterByPeriod } from '../lib/changelog-parser.js';
+import { githubUrl, guideSiteUrl } from '../lib/urls.js';
+
+const CHANGELOG_PATH = 'CHANGELOG.md';
+const CHANGELOG_GITHUB = githubUrl(CHANGELOG_PATH);
+
+// ─── File path extractor ──────────────────────────────────────────────────────
+
+// Matches paths like: guide/ultimate-guide.md, docs/resource-evaluations/xxx.md,
+// examples/agents/foo.md, machine-readable/reference.yaml, guide/cheatsheet.md
+const FILE_PATH_RE =
+ /\b((?:guide|docs|examples|machine-readable|whitepapers)\/[a-zA-Z0-9_./\-]+\.(?:md|yaml|yml|json|sh|ts|txt))/g;
+
+interface ResourceLink {
+ path: string;
+ github: string;
+ site: string | null;
+}
+
+function extractResourceLinks(text: string): ResourceLink[] {
+ const seen = new Set();
+ const links: ResourceLink[] = [];
+ for (const match of text.matchAll(FILE_PATH_RE)) {
+ const path = match[1];
+ if (seen.has(path)) continue;
+ seen.add(path);
+ links.push({
+ path,
+ github: githubUrl(path),
+ site: guideSiteUrl(path),
+ });
+ }
+ return links;
+}
+
+async function fetchChangelog(): Promise {
+ const result = await readSection(CHANGELOG_PATH, 1, 500);
+ if (!result) return null;
+
+ // If truncated, fetch more until we have everything (max 3000 lines)
+ if (!result.hasMore) return result.content;
+
+ let full = result.content;
+ let offset = result.nextOffset!;
+ for (let i = 0; i < 5 && offset; i++) {
+ const next = await readSection(CHANGELOG_PATH, offset, 500);
+ if (!next) break;
+ full += '\n' + next.content;
+ offset = next.nextOffset ?? 0;
+ if (!next.hasMore) break;
+ }
+ return full;
+}
+
+export function registerChangelog(server: McpServer): void {
+ // ── get_changelog ─────────────────────────────────────────────────────────
+ server.tool(
+ 'get_changelog',
+ 'Return the last N entries from the Claude Code Ultimate Guide CHANGELOG. Shows what changed in the guide itself (not Claude Code CLI releases — use get_release() for that).',
+ {
+ count: z.number().min(1).max(20).optional().default(5).describe('Number of recent changelog entries to return (default 5)'),
+ },
+ { readOnlyHint: true, destructiveHint: false, openWorldHint: false },
+ async ({ count }) => {
+ const raw = await fetchChangelog();
+ if (!raw) {
+ return {
+ content: [{ type: 'text', text: 'CHANGELOG.md unavailable (offline and no cache).' }],
+ isError: true,
+ };
+ }
+
+ const entries = parseChangelog(raw);
+ const slice = entries.slice(0, count ?? 5);
+
+ if (slice.length === 0) {
+ return { content: [{ type: 'text', text: 'No changelog entries found.' }] };
+ }
+
+ const combinedText = slice.map((e) => e.content).join('\n\n');
+ const links = extractResourceLinks(combinedText);
+
+ const lines = [
+ `# Guide CHANGELOG — last ${slice.length} entries`,
+ `GitHub: ${CHANGELOG_GITHUB}`,
+ '',
+ combinedText,
+ ];
+
+ if (links.length > 0) {
+ lines.push('', '---', '## Resources mentioned', '');
+ for (const l of links) {
+ lines.push(`**${l.path}**`);
+ lines.push(` GitHub: ${l.github}`);
+ if (l.site) lines.push(` Guide: ${l.site}`);
+ }
+ }
+
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
+ },
+ );
+
+ // ── get_digest ─────────────────────────────────────────────────────────────
+ server.tool(
+ 'get_digest',
+ 'Return a digest of guide and Claude Code CLI changes for a given period. Combines guide CHANGELOG entries + official Claude Code releases in the time window.',
+ {
+ period: z
+ .enum(['day', 'week', 'month'])
+ .describe('Time window: "day" (24h), "week" (7 days), "month" (30 days)'),
+ },
+ { readOnlyHint: true, destructiveHint: false, openWorldHint: false },
+ async ({ period }) => {
+ const labels = { day: 'last 24h', week: 'last 7 days', month: 'last 30 days' };
+
+ // Guide changelog
+ const raw = await fetchChangelog();
+ const guideEntries = raw ? filterByPeriod(parseChangelog(raw), period) : [];
+
+ // Claude Code releases
+ const { loadReleases } = await import('../lib/content.js');
+ const relData = loadReleases();
+ const MS = { day: 86_400_000, week: 7 * 86_400_000, month: 30 * 86_400_000 };
+ const cutoff = Date.now() - MS[period];
+ const ccReleases = (relData.releases as Array<{ version: string; date: string; highlights: string[] }>)
+ .filter((r) => new Date(r.date).getTime() >= cutoff);
+
+ const lines: string[] = [
+ `# Digest — ${labels[period]}`,
+ `Generated: ${new Date().toISOString().slice(0, 10)}`,
+ '',
+ ];
+
+ // Guide section
+ lines.push('## Guide changes');
+ if (guideEntries.length === 0) {
+ lines.push('No guide updates in this period.');
+ lines.push('');
+ } else {
+ const guideText = guideEntries.map((e) => e.content).join('\n\n');
+ lines.push(guideText);
+ lines.push('');
+
+ // Resource links extracted from guide entries
+ const links = extractResourceLinks(guideText);
+ if (links.length > 0) {
+ lines.push('### Resources mentioned');
+ for (const l of links) {
+ const siteStr = l.site ? ` | Guide: ${l.site}` : '';
+ lines.push(`- \`${l.path}\` — GitHub: ${l.github}${siteStr}`);
+ }
+ lines.push('');
+ }
+ }
+
+ // CC releases section
+ lines.push('## Claude Code CLI releases');
+ if (ccReleases.length === 0) {
+ lines.push('No Claude Code releases in this period.');
+ } else {
+ for (const r of ccReleases) {
+ lines.push(`### v${r.version} (${r.date})`);
+ for (const h of r.highlights ?? []) lines.push(`- ${h}`);
+ // Link to the release tracking file
+ lines.push(`GitHub: ${githubUrl('guide/claude-code-releases.md')}`);
+ lines.push('');
+ }
+ }
+
+ lines.push('---');
+ lines.push(`Full changelog: ${CHANGELOG_GITHUB}`);
+
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
+ },
+ );
+}
diff --git a/mcp-server/src/tools/cheatsheet.ts b/mcp-server/src/tools/cheatsheet.ts
new file mode 100644
index 0000000..8f5d7e8
--- /dev/null
+++ b/mcp-server/src/tools/cheatsheet.ts
@@ -0,0 +1,58 @@
+import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
+import { z } from 'zod';
+import { readSection } from '../lib/section-reader.js';
+import { formatLinks } from '../lib/urls.js';
+
+const CHEATSHEET_PATH = 'guide/cheatsheet.md';
+
+export function registerCheatsheet(server: McpServer): void {
+ server.tool(
+ 'get_cheatsheet',
+ 'Return the Claude Code cheatsheet — a compact 1-page reference covering the most important commands, shortcuts, config options, and workflows.',
+ {
+ section: z.string().optional().describe('Optional: filter to a specific section (e.g. "installation", "hooks", "agents", "mcp")'),
+ },
+ { readOnlyHint: true, destructiveHint: false, openWorldHint: false },
+ async ({ section }) => {
+ const result = await readSection(CHEATSHEET_PATH, 1, 500);
+ if (!result) {
+ return {
+ content: [{ type: 'text', text: 'Cheatsheet unavailable (offline and no cache).' }],
+ isError: true,
+ };
+ }
+
+ let content = result.content;
+
+ // Filter to section if requested
+ if (section) {
+ const sectionLower = section.toLowerCase();
+ const lines = content.split('\n');
+ const start = lines.findIndex(
+ (l) => l.toLowerCase().includes(sectionLower) && l.startsWith('#'),
+ );
+ if (start !== -1) {
+ // Find end of section (next heading of same or higher level)
+ const startLevel = (lines[start].match(/^#+/) ?? [''])[0].length;
+ let end = lines.length;
+ for (let i = start + 1; i < lines.length; i++) {
+ const m = lines[i].match(/^(#+)/);
+ if (m && m[1].length <= startLevel) { end = i; break; }
+ }
+ content = lines.slice(start, end).join('\n');
+ }
+ }
+
+ const header = [
+ `# Claude Code Cheatsheet`,
+ formatLinks(CHEATSHEET_PATH),
+ section ? `Filtered: "${section}"` : `Lines: ${result.startLine}-${result.endLine} of ${result.totalLines}`,
+ result.hasMore ? `Has more — use read_section("${CHEATSHEET_PATH}", ${result.nextOffset}) for rest` : '',
+ '---',
+ '',
+ ].filter(Boolean).join('\n');
+
+ return { content: [{ type: 'text', text: header + content }] };
+ },
+ );
+}
diff --git a/mcp-server/src/tools/compare-versions.ts b/mcp-server/src/tools/compare-versions.ts
new file mode 100644
index 0000000..8f20002
--- /dev/null
+++ b/mcp-server/src/tools/compare-versions.ts
@@ -0,0 +1,116 @@
+import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
+import { z } from 'zod';
+import { loadReleases } from '../lib/content.js';
+import { githubUrl } from '../lib/urls.js';
+
+const RELEASES_GITHUB = githubUrl('guide/claude-code-releases.md');
+
+interface ReleaseEntry {
+ version: string;
+ date: string;
+ highlights: string[];
+ breaking?: string[];
+}
+
+function parseSemver(v: string): [number, number, number] {
+ const parts = v.replace(/^v/, '').split('.').map(Number);
+ return [parts[0] ?? 0, parts[1] ?? 0, parts[2] ?? 0];
+}
+
+function semverCompare(a: string, b: string): number {
+ const [am, an, ap] = parseSemver(a);
+ const [bm, bn, bp] = parseSemver(b);
+ if (am !== bm) return am - bm;
+ if (an !== bn) return an - bn;
+ return ap - bp;
+}
+
+export function registerCompareVersions(server: McpServer): void {
+ server.tool(
+ 'compare_versions',
+ 'Show what changed between two Claude Code CLI versions. Lists all releases in range with aggregated highlights and breaking changes.',
+ {
+ from: z.string().describe('Starting version (older), e.g. "2.1.50"'),
+ to: z.string().optional().describe('Ending version (newer). Omit to use the latest.'),
+ },
+ { readOnlyHint: true, destructiveHint: false, openWorldHint: false },
+ async ({ from, to }) => {
+ const data = loadReleases();
+ const releases = data.releases as ReleaseEntry[];
+
+ const fromClean = from.replace(/^v/, '');
+ const toClean = (to ?? data.latest).replace(/^v/, '');
+
+ // Ensure from <= to (by semver)
+ const fromVer = fromClean;
+ const toVer = toClean;
+ const ordered = semverCompare(fromVer, toVer) <= 0
+ ? { older: fromVer, newer: toVer }
+ : { older: toVer, newer: fromVer };
+
+ // Validate both versions exist
+ const fromFound = releases.find((r) => r.version === ordered.older);
+ const toFound = releases.find((r) => r.version === ordered.newer);
+
+ if (!fromFound) {
+ const known = releases.slice(0, 10).map((r) => `v${r.version}`).join(', ');
+ return {
+ content: [{
+ type: 'text',
+ text: `Version v${ordered.older} not found.\n\nRecent versions: ${known}\n\nFull history: ${RELEASES_GITHUB}`,
+ }],
+ };
+ }
+ if (!toFound) {
+ const known = releases.slice(0, 10).map((r) => `v${r.version}`).join(', ');
+ return {
+ content: [{
+ type: 'text',
+ text: `Version v${ordered.newer} not found.\n\nRecent versions: ${known}\n\nFull history: ${RELEASES_GITHUB}`,
+ }],
+ };
+ }
+
+ // Collect versions in range (releases are newest-first)
+ const inRange = releases.filter(
+ (r) => semverCompare(r.version, ordered.older) >= 0 &&
+ semverCompare(r.version, ordered.newer) <= 0,
+ );
+
+ // Aggregate highlights and breaking changes
+ const allHighlights: string[] = [];
+ const allBreaking: string[] = [];
+
+ for (const r of inRange) {
+ for (const h of r.highlights ?? []) allHighlights.push(h);
+ for (const b of r.breaking ?? []) allBreaking.push(b);
+ }
+
+ const versionList = inRange
+ .slice()
+ .sort((a, b) => semverCompare(b.version, a.version)) // newest first
+ .map((r) => `v${r.version} (${r.date})`)
+ .join(', ');
+
+ const lines = [
+ `# Claude Code: v${ordered.older} → v${ordered.newer}`,
+ RELEASES_GITHUB,
+ '',
+ `**${inRange.length} release${inRange.length !== 1 ? 's' : ''} in range**: ${versionList}`,
+ '',
+ '## What changed',
+ ...allHighlights.map((h) => `- ${h}`),
+ ];
+
+ if (allBreaking.length > 0) {
+ lines.push('', '## Breaking changes');
+ for (const b of allBreaking) lines.push(`- ⚠️ ${b}`);
+ }
+
+ lines.push('', `---`);
+ lines.push(`${allHighlights.length} highlight${allHighlights.length !== 1 ? 's' : ''} | ${allBreaking.length} breaking change${allBreaking.length !== 1 ? 's' : ''} | Use get_release(version) for per-release details.`);
+
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
+ },
+ );
+}
diff --git a/mcp-server/src/tools/get-example.ts b/mcp-server/src/tools/get-example.ts
new file mode 100644
index 0000000..c4f71c9
--- /dev/null
+++ b/mcp-server/src/tools/get-example.ts
@@ -0,0 +1,140 @@
+import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
+import { z } from 'zod';
+import { loadReference, resolveDeepDive } from '../lib/content.js';
+import { readSection } from '../lib/section-reader.js';
+import { tokenizeQuery } from '../lib/search.js';
+import { githubUrl } from '../lib/urls.js';
+
+export function registerGetExample(server: McpServer): void {
+ server.tool(
+ 'get_example',
+ 'Fetch a production-ready template or example from the guide (agents, skills, commands, hooks, scripts). Pass a partial name to search for matching examples.',
+ {
+ name: z.string().describe('Example name or partial match (e.g. "code-reviewer", "pre-commit hook", "custom agent")'),
+ },
+ {
+ readOnlyHint: true,
+ destructiveHint: false,
+ openWorldHint: false,
+ },
+ async ({ name }) => {
+ const ref = loadReference();
+ const nameLower = name.toLowerCase();
+ const tokens = tokenizeQuery(name);
+
+ // Collect entries pointing to examples/
+ interface ExampleMatch {
+ key: string;
+ path: string;
+ score: number;
+ }
+ const matches: ExampleMatch[] = [];
+
+ for (const entry of ref.entries) {
+ const target = entry.target ?? resolveDeepDive(entry.value);
+ if (!target || target.type !== 'file') continue;
+ if (!target.path.startsWith('examples/')) continue;
+
+ const pathLower = target.path.toLowerCase();
+ const keyLower = entry.key.toLowerCase();
+ let score = 0;
+
+ // Exact match in path
+ if (pathLower.includes(nameLower)) score += 20;
+ if (keyLower.includes(nameLower)) score += 15;
+
+ // Token match
+ for (const token of tokens) {
+ if (pathLower.includes(token)) score += 5;
+ if (keyLower.includes(token)) score += 3;
+ }
+
+ if (score > 0) {
+ matches.push({ key: entry.key, path: target.path, score });
+ }
+ }
+
+ matches.sort((a, b) => b.score - a.score);
+
+ if (matches.length === 0) {
+ return {
+ content: [
+ {
+ type: 'text',
+ text: [
+ `No examples found matching: "${name}"`,
+ '',
+ 'Available example categories:',
+ ' • examples/agents/ — Custom agent templates',
+ ' • examples/commands/ — Slash command templates',
+ ' • examples/hooks/ — Event hook examples',
+ ' • examples/skills/ — Skill module templates',
+ ' • examples/scripts/ — Utility scripts',
+ '',
+ 'Try: get_example("agent"), get_example("hook"), get_example("command")',
+ ].join('\n'),
+ },
+ ],
+ };
+ }
+
+ // Single match: fetch and return content
+ if (matches.length === 1 || matches[0].score >= 20) {
+ const match = matches[0];
+ const section = await readSection(match.path, 1, 500);
+
+ if (!section) {
+ return {
+ content: [
+ {
+ type: 'text',
+ text: [
+ `Example found: ${match.path}`,
+ `Key: ${match.key}`,
+ '',
+ 'Content unavailable (offline or file not found).',
+ `Try: read_section("${match.path}")`,
+ ].join('\n'),
+ },
+ ],
+ };
+ }
+
+ return {
+ content: [
+ {
+ type: 'text',
+ text: [
+ `# ${match.path}`,
+ `Key: ${match.key}`,
+ `Lines: ${section.startLine}-${section.endLine} of ${section.totalLines}`,
+ `GitHub: ${githubUrl(match.path)}`,
+ '---',
+ '',
+ section.content,
+ section.hasMore ? `\n\n[truncated — use read_section("${match.path}", ${section.nextOffset}) for more]` : '',
+ ].join('\n'),
+ },
+ ],
+ };
+ }
+
+ // Multiple matches: list them
+ const lines = [
+ `Found ${matches.length} examples matching "${name}":`,
+ '',
+ ];
+
+ for (const match of matches.slice(0, 10)) {
+ lines.push(`• ${match.path}`);
+ lines.push(` Key: ${match.key} | Score: ${match.score}`);
+ lines.push(` → get_example("${match.path.split('/').pop()?.replace(/\.(md|yaml|sh|ts)$/, '') ?? match.key}")`);
+ lines.push('');
+ }
+
+ return {
+ content: [{ type: 'text', text: lines.join('\n') }],
+ };
+ },
+ );
+}
diff --git a/mcp-server/src/tools/list-examples.ts b/mcp-server/src/tools/list-examples.ts
new file mode 100644
index 0000000..7131822
--- /dev/null
+++ b/mcp-server/src/tools/list-examples.ts
@@ -0,0 +1,80 @@
+import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
+import { z } from 'zod';
+import { loadReference, resolveDeepDive } from '../lib/content.js';
+import { githubUrl } from '../lib/urls.js';
+
+const CATEGORIES = ['agents', 'commands', 'hooks', 'skills', 'scripts'] as const;
+type Category = typeof CATEGORIES[number];
+
+export function registerListExamples(server: McpServer): void {
+ server.tool(
+ 'list_examples',
+ 'List all production-ready templates in the guide by category (agents, commands, hooks, skills, scripts). Use get_example(name) to fetch the content of any specific template.',
+ {
+ category: z
+ .enum(CATEGORIES)
+ .optional()
+ .describe('Filter by category: agents | commands | hooks | skills | scripts. Omit for all.'),
+ },
+ { readOnlyHint: true, destructiveHint: false, openWorldHint: false },
+ async ({ category }) => {
+ const ref = loadReference();
+
+ // Collect all example paths from reference.yaml
+ const byCategory = new Map>();
+ for (const cat of CATEGORIES) byCategory.set(cat, []);
+
+ for (const entry of ref.entries) {
+ const target = entry.target ?? resolveDeepDive(entry.value);
+ if (!target || target.type !== 'file') continue;
+ if (!target.path.startsWith('examples/')) continue;
+
+ const parts = target.path.split('/'); // ['examples', 'agents', 'file.md']
+ const cat = parts[1] as Category;
+ if (!CATEGORIES.includes(cat)) continue;
+ if (category && cat !== category) continue;
+
+ const list = byCategory.get(cat)!;
+ // Deduplicate by path
+ if (list.some((e) => e.path === target.path)) continue;
+
+ // Build description from key
+ const desc = entry.key
+ .replace(/^deep_dive_/, '')
+ .replace(/_/g, ' ')
+ .replace(/\b\w/g, (c) => c.toUpperCase());
+
+ list.push({ key: entry.key, path: target.path, description: desc });
+ }
+
+ const lines: string[] = [
+ `# Claude Code Ultimate Guide — Templates`,
+ `GitHub: https://github.com/FlorianBruniaux/claude-code-ultimate-guide/tree/main/examples`,
+ '',
+ ];
+
+ let total = 0;
+ for (const cat of CATEGORIES) {
+ if (category && cat !== category) continue;
+ const items = byCategory.get(cat)!;
+ if (items.length === 0) continue;
+
+ lines.push(`## ${cat.charAt(0).toUpperCase() + cat.slice(1)} (${items.length})`);
+ for (const item of items) {
+ const filename = item.path.split('/').pop() ?? item.path;
+ const gh = githubUrl(item.path);
+ lines.push(`- **${filename}** — ${item.description}`);
+ lines.push(` GitHub: ${gh}`);
+ lines.push(` → get_example("${filename.replace(/\.(md|yaml|sh|ts)$/, '')}")`);
+ }
+ lines.push('');
+ total += items.length;
+ }
+
+ lines.push('---');
+ lines.push(`${total} template(s) total. Use get_example(name) to fetch any template.`);
+
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
+ },
+ );
+}
diff --git a/mcp-server/src/tools/list-topics.ts b/mcp-server/src/tools/list-topics.ts
new file mode 100644
index 0000000..0341d5f
--- /dev/null
+++ b/mcp-server/src/tools/list-topics.ts
@@ -0,0 +1,57 @@
+import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
+import { loadReference } from '../lib/content.js';
+
+export function registerListTopics(server: McpServer): void {
+ server.tool(
+ 'list_topics',
+ 'List all top-level topics and categories in the Claude Code Ultimate Guide. Useful for exploring what the guide covers before searching.',
+ {},
+ {
+ readOnlyHint: true,
+ destructiveHint: false,
+ openWorldHint: false,
+ },
+ async () => {
+ const ref = loadReference();
+
+ // Group entries by first key segment (before first underscore)
+ const categories = new Map();
+
+ for (const entry of ref.entries) {
+ const category = entry.key.split('_')[0] ?? entry.key;
+ if (!categories.has(category)) {
+ categories.set(category, { count: 0, samples: [] });
+ }
+ const cat = categories.get(category)!;
+ cat.count++;
+ if (cat.samples.length < 5) {
+ cat.samples.push(entry.key);
+ }
+ }
+
+ const sorted = Array.from(categories.entries()).sort((a, b) => b[1].count - a[1].count);
+
+ const lines: string[] = [
+ `Claude Code Ultimate Guide — ${ref.entries.length} indexed entries across ${sorted.length} categories`,
+ `Version: ${ref.version}`,
+ '',
+ '## Topics',
+ '',
+ ];
+
+ for (const [category, { count, samples }] of sorted) {
+ lines.push(`### ${category} (${count} entries)`);
+ lines.push(`Examples: ${samples.join(', ')}`);
+ lines.push('');
+ }
+
+ lines.push('---');
+ lines.push('Use search_guide("topic") to search within any category.');
+ lines.push('Use read_section("guide/ultimate-guide.md") to browse the full guide.');
+
+ return {
+ content: [{ type: 'text', text: lines.join('\n') }],
+ };
+ },
+ );
+}
diff --git a/mcp-server/src/tools/read-section.ts b/mcp-server/src/tools/read-section.ts
new file mode 100644
index 0000000..262dfb9
--- /dev/null
+++ b/mcp-server/src/tools/read-section.ts
@@ -0,0 +1,79 @@
+import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
+import { z } from 'zod';
+import { readSection } from '../lib/section-reader.js';
+import { resolveContentPath } from '../lib/content.js';
+import { formatLinks } from '../lib/urls.js';
+
+export function registerReadSection(server: McpServer): void {
+ server.tool(
+ 'read_section',
+ 'Read a section from a guide file (markdown, YAML, examples). Supports pagination via offset. Use after search_guide() to fetch the full content at a specific location.',
+ {
+ path: z.string().describe('Relative path from repo root (e.g. "guide/ultimate-guide.md", "examples/agents/code-reviewer.md")'),
+ offset: z.number().min(1).optional().default(1).describe('Line number to start reading from (1-based, default 1)'),
+ limit: z.number().min(1).max(500).optional().default(500).describe('Max lines to return (default 500, max 500)'),
+ },
+ {
+ readOnlyHint: true,
+ destructiveHint: false,
+ openWorldHint: false,
+ },
+ async ({ path: filePath, offset, limit }) => {
+ // Security: validate path before attempting read
+ const resolved = resolveContentPath(filePath);
+ if (resolved === null) {
+ return {
+ content: [
+ {
+ type: 'text',
+ text: `Error: Invalid path "${filePath}". Only paths within the guide repo with allowed extensions (.md, .yaml, .yml, .sh, .ts, .js, .json, .py, .txt) are permitted.`,
+ },
+ ],
+ isError: true,
+ };
+ }
+
+ const result = await readSection(filePath, offset ?? 1, limit ?? 500);
+
+ if (result === null) {
+ return {
+ content: [
+ {
+ type: 'text',
+ text: [
+ `File not found or unavailable: "${filePath}"`,
+ '',
+ 'This may be because:',
+ ' • The file does not exist in the guide repo',
+ ' • Network unavailable (running offline without cache)',
+ '',
+ 'Fallback: read the resource claude-code-guide://reference for inline summaries.',
+ ].join('\n'),
+ },
+ ],
+ isError: true,
+ };
+ }
+
+ const header = [
+ `File: ${filePath}`,
+ `Lines: ${result.startLine}-${result.endLine} of ${result.totalLines}`,
+ result.hasMore
+ ? `Has more: yes — use offset=${result.nextOffset} for next section`
+ : 'Has more: no',
+ formatLinks(filePath, result.startLine),
+ '---',
+ '',
+ ].join('\n');
+
+ return {
+ content: [
+ {
+ type: 'text',
+ text: header + result.content,
+ },
+ ],
+ };
+ },
+ );
+}
diff --git a/mcp-server/src/tools/releases.ts b/mcp-server/src/tools/releases.ts
new file mode 100644
index 0000000..fbcd5a9
--- /dev/null
+++ b/mcp-server/src/tools/releases.ts
@@ -0,0 +1,82 @@
+import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
+import { z } from 'zod';
+import { loadReleases } from '../lib/content.js';
+import { githubUrl } from '../lib/urls.js';
+
+const RELEASES_GITHUB = githubUrl('guide/claude-code-releases.md');
+
+interface ReleaseEntry {
+ version: string;
+ date: string;
+ highlights: string[];
+ breaking?: string[];
+}
+
+export function registerReleases(server: McpServer): void {
+ server.tool(
+ 'get_release',
+ 'Get details about Claude Code CLI official releases. Pass a version to get a specific release, or omit to get the latest and recent history.',
+ {
+ version: z.string().optional().describe('Specific version (e.g. "2.1.59"). Omit for latest + recent 5.'),
+ count: z.number().min(1).max(30).optional().default(5).describe('Number of recent releases to show when no version specified (default 5)'),
+ },
+ { readOnlyHint: true, destructiveHint: false, openWorldHint: false },
+ async ({ version, count }) => {
+ const data = loadReleases();
+ const releases = data.releases as ReleaseEntry[];
+
+ if (version) {
+ const found = releases.find(
+ (r) => r.version === version || r.version === version.replace(/^v/, ''),
+ );
+ if (!found) {
+ const versions = releases.slice(0, 10).map((r) => `v${r.version}`).join(', ');
+ return {
+ content: [{
+ type: 'text',
+ text: `Release v${version} not found.\n\nRecent versions: ${versions}\n\nFull history: ${RELEASES_GITHUB}`,
+ }],
+ };
+ }
+
+ const lines = [
+ `# Claude Code v${found.version} (${found.date})`,
+ RELEASES_GITHUB,
+ '',
+ '## Highlights',
+ ...(found.highlights ?? []).map((h) => `- ${h}`),
+ ];
+
+ if (found.breaking?.length) {
+ lines.push('', '## Breaking changes');
+ for (const b of found.breaking) lines.push(`- ⚠️ ${b}`);
+ }
+
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
+ }
+
+ // Latest + recent N
+ const recent = releases.slice(0, count ?? 5);
+ const lines = [
+ `# Claude Code Releases`,
+ `Latest: v${data.latest} (updated: ${data.updated})`,
+ RELEASES_GITHUB,
+ '',
+ ];
+
+ for (const r of recent) {
+ lines.push(`## v${r.version} — ${r.date}`);
+ for (const h of r.highlights ?? []) lines.push(`- ${h}`);
+ if (r.breaking?.length) {
+ for (const b of r.breaking) lines.push(` ⚠️ ${b}`);
+ }
+ lines.push('');
+ }
+
+ lines.push(`---`);
+ lines.push(`Showing ${recent.length} of ${releases.length} tracked releases. Use get_release(version) for details.`);
+
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
+ },
+ );
+}
diff --git a/mcp-server/src/tools/search-examples.ts b/mcp-server/src/tools/search-examples.ts
new file mode 100644
index 0000000..b8bfcf4
--- /dev/null
+++ b/mcp-server/src/tools/search-examples.ts
@@ -0,0 +1,133 @@
+import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
+import { z } from 'zod';
+import { loadReference, resolveDeepDive } from '../lib/content.js';
+import { tokenizeQuery } from '../lib/search.js';
+import { githubUrl } from '../lib/urls.js';
+
+interface ExampleResult {
+ path: string;
+ key: string;
+ score: number;
+ description: string;
+ githubUrl: string;
+}
+
+export function registerSearchExamples(server: McpServer): void {
+ server.tool(
+ 'search_examples',
+ 'Semantic search across all production-ready templates by intent (e.g. "hook lint", "agent code review"). Different from get_example (exact name) and list_examples (category browse).',
+ {
+ query: z.string().describe('Search query describing the template you need, e.g. "hook lint", "agent code review", "pre-commit typescript"'),
+ limit: z.number().min(1).max(20).optional().default(10).describe('Max results to return (default 10, max 20)'),
+ },
+ { readOnlyHint: true, destructiveHint: false, openWorldHint: false },
+ async ({ query, limit }) => {
+ const ref = loadReference();
+ const tokens = tokenizeQuery(query);
+ const queryLower = query.toLowerCase();
+
+ if (tokens.length === 0) {
+ return {
+ content: [{
+ type: 'text',
+ text: 'Query too short or contained only stop words. Try: "hook lint", "agent security", "pre-commit".',
+ }],
+ };
+ }
+
+ // Collect and score entries pointing to examples/
+ const results: ExampleResult[] = [];
+ const seen = new Set();
+
+ for (const entry of ref.entries) {
+ const target = entry.target ?? resolveDeepDive(entry.value);
+ if (!target || target.type !== 'file') continue;
+ if (!target.path.startsWith('examples/')) continue;
+
+ // Deduplicate by path
+ if (seen.has(target.path)) continue;
+
+ const pathLower = target.path.toLowerCase();
+ const keyLower = entry.key.toLowerCase();
+ const textLower = entry.searchableText.toLowerCase();
+
+ let score = 0;
+
+ // Exact substring match on full query (highest signal)
+ if (pathLower.includes(queryLower)) score += 15;
+
+ for (const token of tokens) {
+ if (token.length < 2) continue;
+ if (pathLower.includes(token)) score += 10;
+ else if (keyLower.includes(token)) score += 7;
+ else if (textLower.includes(token)) score += 5;
+ else {
+ // Fuzzy: token length >= 5, levenshtein-like (segment starts with token)
+ if (token.length >= 5) {
+ const pathSegments = pathLower.replace(/[/_.-]/g, ' ').split(' ');
+ for (const seg of pathSegments) {
+ if (seg.length >= 4 && (seg.startsWith(token.slice(0, -1)) || token.startsWith(seg.slice(0, -1)))) {
+ score += 2;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ if (score > 0) {
+ // Build human-readable description from key
+ const description = entry.searchableText.slice(0, 120).replace(/\s+/g, ' ').trim();
+
+ seen.add(target.path);
+ results.push({
+ path: target.path,
+ key: entry.key,
+ score,
+ description,
+ githubUrl: githubUrl(target.path),
+ });
+ }
+ }
+
+ results.sort((a, b) => b.score - a.score);
+ const topResults = results.slice(0, limit ?? 10);
+
+ if (topResults.length === 0) {
+ return {
+ content: [{
+ type: 'text',
+ text: [
+ `No examples found for: "${query}"`,
+ '',
+ 'Try broader terms or browse by category:',
+ ' • list_examples("agents") — custom agent templates',
+ ' • list_examples("hooks") — event hook examples',
+ ' • list_examples("commands") — slash command templates',
+ ' • list_examples("skills") — skill module templates',
+ ' • list_examples("scripts") — utility scripts',
+ ].join('\n'),
+ }],
+ };
+ }
+
+ const lines = [
+ `# Examples matching "${query}"`,
+ `Found ${topResults.length} result${topResults.length !== 1 ? 's' : ''} (of ${results.length} scored)`,
+ '',
+ ];
+
+ for (const r of topResults) {
+ const name = r.path.split('/').pop()?.replace(/\.(md|yaml|sh|ts|js|py)$/, '') ?? r.key;
+ lines.push(`## ${r.path}`);
+ lines.push(`Score: ${r.score} | Key: ${r.key}`);
+ lines.push(r.description);
+ lines.push(`GitHub: ${r.githubUrl}`);
+ lines.push(`→ get_example("${name}")`);
+ lines.push('');
+ }
+
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
+ },
+ );
+}
diff --git a/mcp-server/src/tools/search-guide.ts b/mcp-server/src/tools/search-guide.ts
new file mode 100644
index 0000000..febb611
--- /dev/null
+++ b/mcp-server/src/tools/search-guide.ts
@@ -0,0 +1,86 @@
+import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
+import { z } from 'zod';
+import { searchGuide } from '../lib/search.js';
+import { formatLinks, githubUrl } from '../lib/urls.js';
+
+export function registerSearchGuide(server: McpServer): void {
+ server.tool(
+ 'search_guide',
+ 'Search the Claude Code Ultimate Guide by topic, keyword, or question. Returns ranked results with file locations and descriptions. Use this as the first step for any guide question.',
+ {
+ query: z.string().describe('Search query — topic, question, or keyword (e.g. "hooks", "custom agents", "cost optimization")'),
+ limit: z.number().min(1).max(20).optional().default(10).describe('Max results to return (default 10, max 20)'),
+ },
+ {
+ readOnlyHint: true,
+ destructiveHint: false,
+ openWorldHint: false,
+ },
+ async ({ query, limit }) => {
+ const results = searchGuide(query, limit ?? 10);
+
+ if (results.length === 0) {
+ return {
+ content: [
+ {
+ type: 'text',
+ text: [
+ `No results found for: "${query}"`,
+ '',
+ 'Tips:',
+ ' • Try shorter keywords: "hooks" instead of "how do I use hooks"',
+ ' • Use the resource fallback: read claude-code-guide://reference for the full YAML index',
+ ' • Try related terms: "commands", "agents", "mcp", "security", "cost"',
+ ].join('\n'),
+ },
+ ],
+ };
+ }
+
+ const lines: string[] = [
+ `Found ${results.length} result(s) for: "${query}"`,
+ '',
+ ];
+
+ for (const result of results) {
+ lines.push(`## ${result.key} (score: ${result.score})`);
+ lines.push(`Section: ${result.section}`);
+ lines.push(`Location: ${result.hint}`);
+
+ if (result.target) {
+ switch (result.target.type) {
+ case 'line':
+ lines.push(`→ read_section("${result.target.file}", ${result.target.line})`);
+ lines.push(` ${formatLinks(result.target.file, result.target.line)}`);
+ break;
+ case 'file':
+ lines.push(
+ `→ read_section("${result.target.path}"${result.target.line ? `, ${result.target.line}` : ''})`,
+ );
+ lines.push(` ${formatLinks(result.target.path, result.target.line)}`);
+ break;
+ case 'url':
+ lines.push(`→ External: ${result.target.url}`);
+ break;
+ case 'inline':
+ lines.push(`→ ${result.target.text.slice(0, 200)}${result.target.text.length > 200 ? '…' : ''}`);
+ break;
+ case 'structured':
+ lines.push(`→ [structured data — use read_section or view resource]`);
+ break;
+ }
+ }
+
+ lines.push('');
+ }
+
+ lines.push('---');
+ lines.push('Use read_section(path, line) to fetch the full content of any result.');
+ lines.push('Use claude-code-guide://reference resource for the complete YAML index.');
+
+ return {
+ content: [{ type: 'text', text: lines.join('\n') }],
+ };
+ },
+ );
+}
diff --git a/mcp-server/src/tools/threats.ts b/mcp-server/src/tools/threats.ts
new file mode 100644
index 0000000..163cecc
--- /dev/null
+++ b/mcp-server/src/tools/threats.ts
@@ -0,0 +1,264 @@
+import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
+import { z } from 'zod';
+import { loadThreatDb } from '../lib/content.js';
+import { githubUrl } from '../lib/urls.js';
+
+const THREAT_DB_GITHUB = githubUrl('examples/commands/resources/threat-db.yaml');
+
+interface CveEntry {
+ id: string;
+ component: string;
+ severity: string;
+ cvss?: number;
+ description: string;
+ source: string;
+ fixed_in?: string;
+ mitigation?: string;
+ notes?: string;
+}
+
+interface TechniqueEntry {
+ id: string;
+ name: string;
+ description: string;
+ examples?: string[];
+ campaigns?: string[];
+ cves?: string[];
+ mitigation?: string;
+}
+
+const CATEGORY_LABELS: Record = {
+ cves: 'CVE Database',
+ authors: 'Malicious Authors',
+ skills: 'Malicious Skills',
+ techniques: 'Attack Techniques',
+ mitigations: 'Minimum Safe Versions',
+ sources: 'Research Sources',
+};
+
+export function registerGetThreat(server: McpServer): void {
+ server.tool(
+ 'get_threat',
+ 'Look up a specific threat by ID from the security threat database. Supports CVE IDs (e.g. "CVE-2025-53109") and technique IDs (e.g. "T001").',
+ {
+ id: z.string().describe('Threat ID: a CVE identifier (e.g. "CVE-2025-53109") or attack technique ID (e.g. "T001")'),
+ },
+ { readOnlyHint: true, destructiveHint: false, openWorldHint: false },
+ async ({ id }) => {
+ const db = await loadThreatDb();
+ const idUpper = id.toUpperCase();
+
+ // Search CVE database
+ const cve = (db.cve_database as CveEntry[]).find(
+ (c) => c.id.toUpperCase() === idUpper,
+ );
+ if (cve) {
+ const lines = [
+ `# ${cve.id} — ${cve.component}`,
+ THREAT_DB_GITHUB,
+ '',
+ `**Severity**: ${cve.severity.toUpperCase()}${cve.cvss ? ` (CVSS ${cve.cvss})` : ''}`,
+ `**Component**: ${cve.component}`,
+ `**Source**: ${cve.source}`,
+ '',
+ `## Description`,
+ cve.description,
+ ];
+
+ if (cve.fixed_in) {
+ lines.push('', `**Fixed in**: ${cve.fixed_in}`);
+ }
+ if (cve.mitigation) {
+ lines.push('', `## Mitigation`, cve.mitigation);
+ }
+ if (cve.notes) {
+ lines.push('', `## Notes`, cve.notes);
+ }
+
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
+ }
+
+ // Search attack techniques
+ const technique = (db.attack_techniques as TechniqueEntry[]).find(
+ (t) => t.id.toUpperCase() === idUpper,
+ );
+ if (technique) {
+ const lines = [
+ `# ${technique.id} — ${technique.name}`,
+ THREAT_DB_GITHUB,
+ '',
+ `## Description`,
+ technique.description,
+ ];
+
+ if (technique.examples?.length) {
+ lines.push('', '## Examples');
+ for (const ex of technique.examples) lines.push(`- ${ex}`);
+ }
+ if (technique.campaigns?.length) {
+ lines.push('', `**Campaigns**: ${technique.campaigns.join(', ')}`);
+ }
+ if (technique.cves?.length) {
+ lines.push(`**Related CVEs**: ${technique.cves.join(', ')}`);
+ }
+ if (technique.mitigation) {
+ lines.push('', `## Mitigation`, technique.mitigation);
+ }
+
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
+ }
+
+ return {
+ content: [{
+ type: 'text',
+ text: [
+ `Threat ID "${id}" not found in the database.`,
+ '',
+ 'Supported formats:',
+ ' • CVE IDs: CVE-2025-53109, CVE-2026-24052, ...',
+ ' • Technique IDs: T001, T002, ...',
+ '',
+ `Use list_threats("cves") or list_threats("techniques") to browse all entries.`,
+ `Full database: ${THREAT_DB_GITHUB}`,
+ ].join('\n'),
+ }],
+ };
+ },
+ );
+}
+
+export function registerListThreats(server: McpServer): void {
+ server.tool(
+ 'list_threats',
+ 'Browse the security threat database. Without a category, returns a summary with counts. With a category, returns the full list for that section.',
+ {
+ category: z.enum(['cves', 'authors', 'skills', 'techniques', 'mitigations', 'sources'])
+ .optional()
+ .describe('Section to list: cves | authors | skills | techniques | mitigations | sources. Omit for a global summary.'),
+ },
+ { readOnlyHint: true, destructiveHint: false, openWorldHint: false },
+ async ({ category }) => {
+ const db = await loadThreatDb();
+
+ if (!category) {
+ // Global summary
+ const lines = [
+ `# Threat Database Summary`,
+ `Version ${db.version} — updated ${db.updated}`,
+ THREAT_DB_GITHUB,
+ '',
+ '| Category | Count |',
+ '|----------|-------|',
+ `| CVEs | ${db.cve_database.length} |`,
+ `| Malicious Authors | ${db.malicious_authors.length} |`,
+ `| Malicious Skills | ${db.malicious_skills.length} |`,
+ `| Attack Techniques | ${db.attack_techniques.length} |`,
+ `| Minimum Safe Versions | ${Object.keys(db.minimum_safe_versions).length} |`,
+ `| Research Sources | ${db.sources.length} |`,
+ '',
+ 'Use list_threats(category) to browse a section, or get_threat(id) for details.',
+ 'Categories: cves | authors | skills | techniques | mitigations | sources',
+ ];
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
+ }
+
+ const label = CATEGORY_LABELS[category] ?? category;
+
+ if (category === 'cves') {
+ const cves = db.cve_database as CveEntry[];
+ const lines = [
+ `# ${label} (${cves.length} entries)`,
+ THREAT_DB_GITHUB,
+ '',
+ ];
+ for (const c of cves) {
+ lines.push(`## ${c.id} — ${c.component}`);
+ lines.push(`**Severity**: ${c.severity.toUpperCase()}${c.cvss ? ` (CVSS ${c.cvss})` : ''} | **Source**: ${c.source}`);
+ lines.push(c.description);
+ if (c.fixed_in) lines.push(`Fixed in: ${c.fixed_in}`);
+ if (c.mitigation) lines.push(`Mitigation: ${c.mitigation}`);
+ lines.push('');
+ }
+ lines.push(`---\nUse get_threat("CVE-XXXX-XXXXX") for full details on any CVE.`);
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
+ }
+
+ if (category === 'techniques') {
+ const techniques = db.attack_techniques as TechniqueEntry[];
+ const lines = [
+ `# ${label} (${techniques.length} entries)`,
+ THREAT_DB_GITHUB,
+ '',
+ ];
+ for (const t of techniques) {
+ lines.push(`## ${t.id} — ${t.name}`);
+ lines.push(t.description);
+ if (t.mitigation) lines.push(`Mitigation: ${t.mitigation}`);
+ lines.push('');
+ }
+ lines.push(`---\nUse get_threat("T001") for full details including examples and CVE links.`);
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
+ }
+
+ if (category === 'authors') {
+ const authors = db.malicious_authors as Array<{ name: string; source?: string; notes?: string }>;
+ const lines = [
+ `# ${label} (${authors.length} confirmed)`,
+ THREAT_DB_GITHUB,
+ '',
+ 'Block ALL skills from these authors — confirmed malicious by security researchers.',
+ '',
+ ];
+ for (const a of authors) {
+ lines.push(`- **${a.name}**${a.source ? ` — ${a.source}` : ''}${a.notes ? ` (${a.notes})` : ''}`);
+ }
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
+ }
+
+ if (category === 'skills') {
+ const skills = db.malicious_skills as Array<{ name: string; type?: string; source?: string; risk?: string; notes?: string }>;
+ const lines = [
+ `# ${label} (${skills.length} entries)`,
+ THREAT_DB_GITHUB,
+ '',
+ ];
+ for (const s of skills) {
+ const tags = [s.type, s.risk ? `risk:${s.risk}` : undefined].filter(Boolean).join(', ');
+ lines.push(`- **${s.name}**${tags ? ` [${tags}]` : ''}${s.source ? ` — ${s.source}` : ''}${s.notes ? ` (${s.notes})` : ''}`);
+ }
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
+ }
+
+ if (category === 'mitigations') {
+ const versions = db.minimum_safe_versions;
+ const entries = Object.entries(versions);
+ const lines = [
+ `# ${label} (${entries.length} entries)`,
+ THREAT_DB_GITHUB,
+ '',
+ ];
+ for (const [component, minVersion] of entries) {
+ lines.push(`- **${component}**: >= ${minVersion}`);
+ }
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
+ }
+
+ if (category === 'sources') {
+ const sources = db.sources as Array<{ name: string; url?: string; date?: string }>;
+ const lines = [
+ `# ${label} (${sources.length} entries)`,
+ THREAT_DB_GITHUB,
+ '',
+ ];
+ for (const s of sources) {
+ lines.push(`- **${s.name}**${s.date ? ` (${s.date})` : ''}${s.url ? `\n ${s.url}` : ''}`);
+ }
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
+ }
+
+ return {
+ content: [{ type: 'text', text: `Unknown category: "${category}". Use: cves | authors | skills | techniques | mitigations | sources` }],
+ };
+ },
+ );
+}
diff --git a/mcp-server/tsconfig.json b/mcp-server/tsconfig.json
new file mode 100644
index 0000000..3535f14
--- /dev/null
+++ b/mcp-server/tsconfig.json
@@ -0,0 +1,19 @@
+{
+ "compilerOptions": {
+ "target": "ES2022",
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "lib": ["ES2022"],
+ "outDir": "./dist",
+ "rootDir": "./src",
+ "strict": true,
+ "esModuleInterop": true,
+ "skipLibCheck": true,
+ "declaration": true,
+ "declarationMap": true,
+ "sourceMap": true,
+ "resolveJsonModule": true
+ },
+ "include": ["src/**/*"],
+ "exclude": ["node_modules", "dist"]
+}
diff --git a/mcp-server/tsup.config.ts b/mcp-server/tsup.config.ts
new file mode 100644
index 0000000..10695fa
--- /dev/null
+++ b/mcp-server/tsup.config.ts
@@ -0,0 +1,14 @@
+import { defineConfig } from 'tsup';
+
+export default defineConfig({
+ entry: ['src/index.ts'],
+ format: ['esm'],
+ target: 'es2022',
+ outDir: 'dist',
+ clean: true,
+ dts: true,
+ sourcemap: true,
+ banner: {
+ js: '#!/usr/bin/env node',
+ },
+});