# Decision Framework: Choosing the Right Claude Code Component This guide helps you choose the right Claude Code component for your specific task. **Always start with prompts**—master the primitive first before scaling to other components. ## Table of Contents - [The Decision Tree](#the-decision-tree) - [Quick Reference: Decision Matrix](#quick-reference-decision-matrix) - [When to Use Each Component](#when-to-use-each-component) - [Use Skills When](#use-skills-when) - [Use Sub-Agents When](#use-sub-agents-when) - [Use Slash Commands When](#use-slash-commands-when) - [Use MCP Servers When](#use-mcp-servers-when) - [Use Hooks When](#use-hooks-when) - [Use Plugins When](#use-plugins-when) - [Use Case Examples from the Field](#use-case-examples-from-the-field) - [Composition Rules and Boundaries](#composition-rules-and-boundaries) - [What Can Compose What](#what-can-compose-what) - [Critical Composition Rules](#critical-composition-rules) - [The Proper Evolution Path](#the-proper-evolution-path) - [Stage 1: Start with a Prompt](#stage-1-start-with-a-prompt) - [Stage 2: Add Sub-Agent if Parallelism Needed](#stage-2-add-sub-agent-if-parallelism-needed) - [Stage 3: Create Skill When Management Needed](#stage-3-create-skill-when-management-needed) - [Stage 4: Add MCP if External Data Needed](#stage-4-add-mcp-if-external-data-needed) - [Common Decision Anti-Patterns](#common-decision-anti-patterns) - [Anti-Pattern 1: Converting All Slash Commands to Skills](#anti-pattern-1-converting-all-slash-commands-to-skills) - [Anti-Pattern 2: Using Skills for One-Off Tasks](#anti-pattern-2-using-skills-for-one-off-tasks) - [Anti-Pattern 3: Skipping the Primitive](#anti-pattern-3-skipping-the-primitive) - [Anti-Pattern 4: Using Sub-Agents When Context Matters](#anti-pattern-4-using-sub-agents-when-context-matters) - [Anti-Pattern 5: Forgetting MCP is for External Only](#anti-pattern-5-forgetting-mcp-is-for-external-only) - [Decision Checklist](#decision-checklist) - [Summary: The Golden Rules](#summary-the-golden-rules) ## The Decision Tree Start here when deciding which component to use: ```text 1. START HERE: Build a Prompt (Slash Command) ↓ 2. Need parallelization or isolated context? YES → Use Sub-Agent NO → Continue ↓ 3. External data/service integration? YES → Use MCP Server NO → Continue ↓ 4. One-off task (simple, direct)? YES → Use Slash Command NO → Continue ↓ 5. Repeatable workflow (pattern detection)? YES → Use Agent Skill NO → Continue ↓ 6. Lifecycle event automation? YES → Use Hook NO → Continue ↓ 7. Sharing/distributing to team? YES → Use Plugin NO → Default to Slash Command (prompt) ``` **Critical Rule:** Always start with **Prompts** (implemented as Slash Commands). Master the primitive first before scaling to other components. ## Quick Reference: Decision Matrix | Task Type | Component | Reason | |-----------|-----------|---------| | Repeatable pattern detection | Agent Skill | Domain-specific workflow | | External data/service access | MCP Server | Integration point | | Parallel/isolated work | Sub-Agent | Context isolation | | Parallel workflow tasks | Sub-Agent | **Whenever you see "parallel", think sub-agents** | | One-off task | Slash Command | Simple, direct | | Lifecycle automation | Hook | Event-driven | | Team distribution | Plugin | Packaging | ## When to Use Each Component ### Use Skills When **Signal keywords:** "automatic," "repeat," "manage," "workflow" **Criteria:** - You have a **REPEAT** problem that needs **MANAGEMENT** - Multiple related operations need coordination - You want **automatic** behavior (agent-invoked) - The problem domain requires orchestration of multiple components **Example scenarios:** - Managing git work trees (create, list, remove, merge, update) - Detecting style guide violations across codebase - Automatic PDF text extraction and processing - Video processing workflows with multiple steps **NOT for:** - One-off tasks → Use Slash Command instead - Simple operations → Use Slash Command instead - Problems solved well by a single prompt → Don't over-engineer **Remember:** Skills are for managing problem domains, not solving one-off tasks. ### Use Sub-Agents When **Signal keywords:** "parallel," "scale," "bulk," "isolated," "batch" **Criteria:** - **Parallelization** is needed - **Context isolation** is required - Scale tasks and batch operations - You're okay with losing context afterward - Each task can run independently **Example scenarios:** - Comprehensive security audits - Fix & debug tests at scale - Parallel workflow tasks - Bulk operations on multiple files - Isolated research that doesn't pollute main context **NOT for:** - Tasks that need to share context → Use main conversation - Sequential operations → Use Slash Command or Skill - Tasks that need to spawn more sub-agents → Hard limit: no nesting **Critical constraint:** You must be okay with losing context afterward. Sub-agent context doesn't persist in the main conversation (unless you use resumable sub-agents). **Golden rule:** "Whenever you see parallel, you should always just think sub-agents. Nothing else supports parallel calling." ### Use Slash Commands When **Signal keywords:** "one-off," "simple," "quick," "manual" **Criteria:** - One-off tasks - Simple repeatable actions - You're starting a new workflow - Building the primitive before composing - You want manual control over invocation **Example scenarios:** - Git commit messages (one at a time) - Create UI component - Run specific code generation - Execute a well-defined task - Quick transformations **Philosophy:** "Have a strong bias towards slash commands. And then when you're thinking about composing many slash commands, sub-agents or MCPs, think about putting them in a skill." **Remember:** Slash commands are the primitive foundation. Master these first before anything else. ### Use MCP Servers When **Signal keywords:** "external," "database," "API," "service," "integration" **Criteria:** - External integrations are needed - Data sources outside Claude Code - Third-party services - Database connections - Real-time data access **Example scenarios:** - Connect to Jira - Query databases (PostgreSQL, etc.) - Fetch real-time weather data - GitHub integration - Slack integration - Figma designs **NOT for:** - Internal orchestration → Use Skills instead - Pure computation → Use Slash Command or Skill **Clear rule:** External = MCP, Internal orchestration = Skills **Context consideration:** MCP servers can "torch your context window" by loading all their context at startup, unlike Skills which use progressive disclosure. ### Use Hooks When **Signal keywords:** "lifecycle," "event," "automation," "deterministic" **Criteria:** - Deterministic automation at lifecycle events - Want to execute commands at specific moments - Need to balance agent autonomy with deterministic control - Workflow automation that should always happen **Example scenarios:** - Run linters before code submission - Auto-format code after generation - Trigger tests after file changes - Capture context at specific points **Philosophy:** "If you really want to scale, you need both" - agents AND deterministic workflows. **Use for:** Adding determinism rather than always relying on the agent to decide. ### Use Plugins When **Signal keywords:** "share," "distribute," "package," "team" **Criteria:** - Sharing/distributing to team - Packaging multiple components together - Reusable work across projects - Team-wide extensions **Example scenarios:** - Distribute custom skills to team - Bundle MCP servers for automatic start - Share slash commands across projects - Package hooks and configurations **Philosophy:** "Plugins let you package and distribute these sets of work. This isn't super interesting. It's just a way to share and reuse cloud code extensions." ## Use Case Examples from the Field Real examples with reasoning: | Use Case | Component | Reasoning | |----------|-----------|-----------| | Automatic PDF text extraction | Agent Skill | Keyword "automatic", repeat behavior | | Connect to Jira | MCP Server | External source | | Comprehensive security audit | Sub-Agent | Scale, isolated context, not automatic | | Generalized git commit messages | Slash Command | Simple one-step task | | Query database | MCP Server | External data source (start here) | | Fix/debug tests at scale | Sub-Agent | Parallel work, scale | | Detect style guide violations | Agent Skill | Repeat behavior pattern | | Fetch real-time weather | MCP Server | Third-party service integration | | Create UI component | Slash Command | Simple one-off task | | Parallel workflow tasks | Sub-Agent | Keyword "parallel" | ## Composition Rules and Boundaries ### What Can Compose What **Skills (Top Compositional Layer):** - ✅ Can use: MCP Servers - ✅ Can use: Sub-Agents - ✅ Can use: Slash Commands - ✅ Can use: Other Skills - ❌ Cannot: Nest sub-agents/prompts directly (must use SlashCommand tool) **Slash Commands (Primitive + Compositional):** - ✅ Can use: Skills (via SlashCommand tool) - ✅ Can use: MCP Servers - ✅ Can use: Sub-Agents - ✅ Acts as: BOTH primitive AND composition point **Sub-Agents (Execution Layer):** - ✅ Can use: Slash Commands (via SlashCommand tool) - ✅ Can use: Skills (via SlashCommand tool) - ❌ CANNOT use: Other Sub-Agents (hard limit) **MCP Servers (Integration Layer):** - ℹ️ Lower level unit, used BY skills - ℹ️ Not using skills - ℹ️ Expose services to all components ### Critical Composition Rules 1. **Sub-Agents cannot nest** - No sub-agent spawning other sub-agents (prevents infinite nesting) 2. **Skills don't execute code** - They guide Claude to use available tools 3. **Slash commands can be invoked manually or via SlashCommand tool** 4. **Skills use the SlashCommand tool** to compose prompts and sub-agents 5. **No circular dependencies** - Skills can use other skills but cannot nest circularly ## The Proper Evolution Path When building new capabilities, follow this progression: ### Stage 1: Start with a Prompt **Goal:** Solve the basic problem Create a simple prompt or slash command that accomplishes the core task. **Example (Git Work Trees):** Create one work tree ```bash /create-worktree feature-branch ``` **When to stay here:** The task is one-off or infrequent. ### Stage 2: Add Sub-Agent if Parallelism Needed **Goal:** Scale to multiple parallel operations If you need to do the same thing many times in parallel, use a sub-agent. **Example (Git Work Trees):** Create multiple work trees in parallel ```bash Use sub-agent to create work trees for: feature-a, feature-b, feature-c in parallel ``` **When to stay here:** Parallel execution is the only requirement, no orchestration needed. ### Stage 3: Create Skill When Management Needed **Goal:** Bundle multiple related operations When the problem grows to require management, create a skill. **Example (Git Work Trees):** Manage work trees (create, list, remove, merge, update) Now you have a cohesive work tree manager skill that: - Creates new work trees - Lists existing work trees - Removes old work trees - Merges work trees - Updates work tree status **When to stay here:** Most domain-specific workflows stop here. ### Stage 4: Add MCP if External Data Needed **Goal:** Integrate external systems Only add MCP servers when you need data from outside Claude Code. **Example (Git Work Trees):** Query external repo metadata from GitHub API Now your skill can query GitHub for: - Branch protection rules - CI/CD status - Pull request information **Final state:** Full-featured work tree manager with external integration. ## Common Decision Anti-Patterns ### ❌ Anti-Pattern 1: Converting All Slash Commands to Skills **Mistake:** "I'm going to convert all my slash commands to skills because skills are better." **Why wrong:** Skills are for repeatable workflows that need management, not simple one-off tasks. Slash commands are the primitive—you need them. **Correct approach:** Keep slash commands for simple tasks. Only create a skill when you're managing a problem domain with multiple related operations. ### ❌ Anti-Pattern 2: Using Skills for One-Off Tasks **Mistake:** "I need to create a UI component once, so I'll build a skill for it." **Why wrong:** Skills are for repeat problems. One-off tasks should use slash commands. **Correct approach:** Use a slash command for the one-off task. If you find yourself doing it repeatedly, then consider a skill. ### ❌ Anti-Pattern 3: Skipping the Primitive **Mistake:** "I'm going to start by building a skill because it's more advanced." **Why wrong:** If you don't master prompts, you can't build effective skills. Everything is prompts in the end. **Correct approach:** Always start with a prompt. Build the primitive first. Scale up only when needed. ### ❌ Anti-Pattern 4: Using Sub-Agents When Context Matters **Mistake:** "I'll use a sub-agent for this research task and then reference the findings later." **Why wrong:** Sub-agent context is isolated. You lose it after the sub-agent finishes (unless using resumable sub-agents). **Correct approach:** If you need the context later, do the work in the main conversation or use a resumable sub-agent. ### ❌ Anti-Pattern 5: Forgetting MCP is for External Only **Mistake:** "I'll build an MCP server to orchestrate internal workflows." **Why wrong:** MCP servers are for external integrations. Internal orchestration should use skills. **Correct approach:** MCP = external, Skills = internal orchestration. Keep them separate. ## Decision Checklist Before you start building, ask yourself: **Basic Questions:** - [ ] Have I started with a prompt? (Non-negotiable) - [ ] Is this a one-off task or repeatable? - [ ] Do I need external data or services? - [ ] Is parallelization required? - [ ] Am I okay losing context after execution? **Composition Questions:** - [ ] Am I trying to nest sub-agents? (Not allowed) - [ ] Am I converting a simple slash command to a skill? (Probably wrong) - [ ] Am I using MCP for internal orchestration? (Should use skills) - [ ] Have I considered the evolution path? (Prompt → Sub-agent → Skill → MCP) **Context Questions:** - [ ] Will this torch my context window? (MCP consideration) - [ ] Do I need progressive disclosure? (Skills benefit) - [ ] Is context isolation critical? (Sub-agent benefit) - [ ] Will I need this context later? (Don't use sub-agent) ## Summary: The Golden Rules 1. **Always start with prompts** - Master the primitive first 2. **"Parallel" keyword = Sub-Agents** - Nothing else supports parallel calling 3. **External = MCP, Internal = Skills** - Clear separation of concerns 4. **One-off = Slash Command** - Don't over-engineer 5. **Repeat + Management = Skill** - Only scale when needed 6. **Don't convert all slash commands to skills** - Huge mistake 7. **Skills compose upward, not downward** - Build from primitives Remember The Core 4: Context, Model, Prompt, Tools. Master these fundamentals, and you'll master the compositional units.