Skip to main content

Lesson 8: Advanced Features

Learning Objectives

After completing this lesson, you will be able to:

  • Use subagents for specialized tasks (Explore, Plan, Bash)
  • Run and manage background tasks
  • Set up hooks for automation
  • Understand session persistence and resumption
  • Manage context compaction
  • Use the task system for complex workflows

Prerequisites

  • Completed Lessons 1-7 - Core operations, permissions, and configuration
  • Comfortable with basic workflows - File operations and permissions
  • Multi-project experience - Worked with at least 2-3 projects

Estimated Time: 30 minutes


Subagents

Subagents are specialized agents that Claude Code can launch to handle specific types of tasks. They have their own context and tools optimized for their purpose.

What Are Subagents?

Think of subagents as specialists:

  • Main Claude = Project manager (coordinates everything)
  • Subagents = Specialists (handle specific tasks)

Why use subagents:

  • Focus: Each agent specializes in one thing
  • Context: Separate context for different tasks
  • Efficiency: Parallel work on independent tasks
  • Optimization: Tailored tools for each job

The Three Subagent Types

1. Explore Agent

Purpose: Quickly explore and understand codebases

When to use:

  • "How is authentication implemented?"
  • "What files handle user input?"
  • "Where is the API endpoint for X?"
  • Understanding a new project

How it works:

  • Uses Glob and Grep extensively
  • Reads multiple files in parallel
  • Builds mental map of codebase
  • Reports back findings

Example:

You> How does the payment processing work in this codebase?

Claude: I'll use the Explore agent to investigate.

[Launches Explore agent]

Explore Agent: [Searching files...]
Found payment-related code:
- src/services/payment.py - PaymentService class
- src/api/payment.py - API endpoints
- src/models/transaction.py - Transaction model

[Reads and analyzes files]

Explore Agent: Payment flow:
1. User calls /api/payment/create
2. PaymentService processes via Stripe
3. Transaction record saved
4. Webhook updates status

Claude: Based on the exploration, here's how payment processing works...

2. Plan Agent

Purpose: Design implementation strategies before coding

When to use:

  • "Add user authentication"
  • "Refactor to use TypeScript"
  • Complex multi-file changes
  • Architecture decisions

How it works:

  • Analyzes requirements
  • Explores codebase
  • Creates step-by-step plan
  • Identifies dependencies
  • Presents for approval

Example:

You> /plan

You> Add role-based access control (RBAC) to the application

Claude: I'll create a plan for implementing RBAC.

[Launches Plan agent]

Plan Agent: [Analyzing codebase...]

PLAN: RBAC Implementation

Phase 1: Data Model
1. Create Role model (admin, editor, viewer)
2. Create Permission model
3. Add Role-Permission many-to-many
4. Add User-Role relationship

Phase 2: Middleware
1. Create authorization middleware
2. Add permission checking decorator
3. Integrate with existing routes

Phase 3: UI Updates
1. Add role management interface
2. Update permission displays
3. Add admin controls

Files to modify: 15
Files to create: 8
Estimated time: 2-3 hours

Proceed with implementation? [Y/n/modify]

3. Bash Agent

Purpose: Execute command-line tasks safely

When to use:

  • Running build scripts
  • Installing dependencies
  • Executing tests
  • Any terminal operations

How it works:

  • Has dedicated Bash tool access
  • Can run multiple commands
  • Handles errors gracefully
  • Reports command output

Example:

You> Run the test suite and fix any failing tests

Claude: I'll use the Bash agent to run tests.

[Launches Bash agent]

Bash Agent: [Running npm test...]

Test Results:
✓ 15 tests passed
✗ 2 tests failed:
- test_user_auth.js:45
- test_api_validation.js:12

[Investigating failures...]

Bash Agent: The failures are due to:
1. Missing auth token in test setup
2. Invalid email regex

[Fixing issues...]

Bash Agent: [Re-running tests...]
All 17 tests passing now.

Claude: Tests have been fixed and are now passing.

Invoking Subagents

Automatic invocation: Claude automatically chooses when to use subagents.

Manual invocation:

You> Use the Explore agent to find all database queries
You> Ask the Plan agent how to refactor this module

Background Tasks

Background tasks allow long-running operations to continue while you work on other things.

Why Background Tasks?

Problem: Some operations take time

  • Running full test suites
  • Large code searches
  • Processing multiple files
  • Watching for file changes

Solution: Run them in the background

  • Continue working while they run
  • Check progress when needed
  • Handle completion asynchronously

Starting Background Tasks

Method 1: Explicit background request

You> Run the full test suite in the background

Method 2: Background flag

claude --background "npm test"

Method 3: During conversation

You> Search all Python files for TODO comments

Claude: This will take a while. Run in background? [Y/n]
You: Y

[Task runs in background]

Managing Background Tasks

List running tasks:

You> /tasks

Check task status:

You> What's the status of the background search?

View task output:

You> Show me the results of the background task

Cancel a task:

You> Cancel the background build task

Background Task Output

When a task completes:

[Background task completed]

Task: Search Python files for TODO
Duration: 2m 34s
Results:
- src/auth.py:45 - TODO: Add rate limiting
- src/api.py:123 - TODO: Implement caching
- src/utils.py:67 - TODO: Refactor this function

Hooks and Automation

Hooks allow you to trigger actions automatically based on events.

What Are Hooks?

Hooks are scripts or commands that run automatically when specific events occur.

Hook events:

  • pre-tool - Before any tool is used
  • post-tool - After a tool completes
  • pre-commit - Before git commit
  • post-commit - After git commit
  • on-edit - When a file is edited
  • session-start - When starting a session
  • session-end - When ending a session

Configuring Hooks

In settings file:

{
"hooks": {
"pre-commit": ["npm run lint", "npm run test"],
"on-edit": ["./scripts/format.sh"],
"session-start": ["./scripts/check-env.sh"]
}
}

Practical Hook Examples

Pre-commit hook:

{
"hooks": {
"pre-commit": [
{
"command": "npm",
"args": ["run", "lint"]
}
]
}
}

Run tests after edits:

{
"hooks": {
"post-edit": {
"pattern": "*.test.js",
"command": "npm",
"args": ["test", "--", "$FILE"]
}
}
}

Session notifications:

{
"hooks": {
"session-start": {
"command": "notify-send",
"args": ["Claude Code", "Session started"]
}
}
}

Session Management

Claude Code sessions can be persisted and resumed.

Session Persistence

What's saved:

  • Conversation history
  • File operation context
  • Task state
  • Configuration used

Where sessions are saved:

  • Linux/macOS: ~/.local/state/claude-code/sessions/
  • Windows: %LOCALAPPDATA%\claude-code\sessions\

Resuming Sessions

Method 1: Auto-resume

claude --resume

Resumes the most recent session.

Method 2: Specific session

claude --resume session-id

Method 3: During session

You> /sessions
[List available sessions]
You> Resume session abc123

Session States

┌─────────────┐
│ Active │ ← Current session
└──────┬──────┘

┌──────▼──────┐
│ Paused │ ← Temporarily paused
└──────┬──────┘

┌──────▼──────┐
│ Archived │ ← Completed, saved
└─────────────┘

Managing Sessions

List all sessions:

claude --list-sessions

Delete old sessions:

claude --clean-sessions --older-than 7d

Export session:

claude --export-session session-id --output session.json

Context Compaction

As conversations grow, Claude Code manages context to stay efficient.

What is Context Compaction?

The problem:

  • Long conversations exceed token limits
  • Important information gets lost
  • Performance degrades

The solution:

  • Summarize older parts of conversation
  • Preserve key information
  • Maintain continuity

How Compaction Works

┌─────────────────────────────────────────────┐
│ Full conversation (1000+ messages) │
└──────────────────┬──────────────────────────┘


┌─────────────────────────────────────────────┐
│ Compaction triggered (token limit nearing) │
└──────────────────┬──────────────────────────┘


┌─────────────────────────────────────────────┐
│ Early conversation → Summarized │
│ Recent conversation → Kept in detail │
│ Key decisions → Preserved │
│ File context → Maintained │
└─────────────────────────────────────────────┘

Manual Compaction

Trigger compaction:

You> Compact the conversation

What gets preserved:

  • Recent messages (last 50-100)
  • Key decisions and conclusions
  • Important file references
  • Current task context

What gets summarized:

  • Older detailed discussions
  • Resolved issues
  • Background information

Task System for Complex Workflows

The task system helps organize and track multi-step work.

Creating Tasks

Tasks can be created to track progress on complex work.

Example:

You> I need to refactor the authentication system

Claude: I'll create a task to track this work.

[Task created: Refactor authentication]

Subtasks:
□ Review current auth implementation
□ Design new auth architecture
□ Implement new auth service
□ Update API endpoints
□ Migrate existing users
□ Update tests
□ Update documentation

Task Management Commands

List tasks:

You> /tasks

Show task details:

You> Show task "Refactor authentication"

Update task status:

You> Mark "Review current auth" as completed

Add subtask:

You> Add subtask to auth refactor: Create migration script

Practical Example: Using Advanced Features

Let's use multiple advanced features together.

Scenario: Debug and Fix a Production Issue

Step 1: Use Explore Agent to Investigate

You> Production is showing errors in user registration. Use Explore to find the registration flow.

[Explore agent investigates]

Explore Agent: Found:
- src/api/auth.py - register endpoint
- src/services/user.py - User creation
- src/utils/validation.py - Email validation

The registration endpoint calls User.create(), which validates email.

Step 2: Run Background Task to Check Logs

You> Search the application logs for registration errors in the background

[Background task starts]

Step 3: Plan the Fix

You> /plan
You> Fix the email validation issue

[Plan agent creates plan]

Plan: Fix Email Validation
1. Update regex to allow new TLDs
2. Add unit tests for edge cases
3. Update documentation

Proceed? Y

Step 4: Check Background Task

You> Show background task results

[Shows logs revealing specific failing emails]

Step 5: Implement Fix

You> Implement the plan

[Claude makes changes]

Step 6: Verify with Background Task

You> Run tests in background

[Tests run, all pass]

Step 7: Commit Changes

You> Commit these changes with /commit

[Pre-commit hooks run: lint, test]
[Changes committed]

✅ Check Your Understanding

  1. Which subagent specializes in exploring codebases?

    • Plan Agent
    • Bash Agent
    • Explore Agent
    • Search Agent
  2. What's the purpose of background tasks?

    • To run tasks in the background while continuing work
    • To delete old files
    • To manage permissions
    • To configure MCP servers
  3. Which hook runs before a git commit?

    • post-commit
    • pre-commit
    • on-edit
    • session-start
  4. True or False: You can resume previous Claude Code sessions.

    • True
    • False
  5. What does context compaction do?

    • Deletes old conversations
    • Compresses the conversation history to save tokens
    • Encrypts the conversation
    • Exports the conversation to a file

Answers: 1-c, 2-a, 3-b, 4-True, 5-b


⭐ New in 2.1.33: Advanced Agent Features

Claude Code 2.1.33 introduces several advanced features that build on the concepts in this lesson.

Agent Teams (Lesson 18)

While subagents work independently, Agent Teams work together in split-pane terminals:

// settings.json
{
"teammateMode": "tmux",
"agentTeams": {
"fullstack": {
"teammates": [
{"name": "backend", "systemPrompt": "Backend developer"},
{"name": "frontend", "systemPrompt": "Frontend developer"}
]
}
}
}

Key differences from subagents:

  • Visual collaboration - See teammates working in real-time
  • Direct messaging - Teammates send messages to each other
  • Split panes - tmux, WezTerm, iTerm2 support
  • spawnTeam tool - Create teams programmatically

Learn more: Lesson 18: Agent Teams & Teammates

Enhanced Hooks (Lesson 20)

Hooks are now available for skills, agents, and commands:

---
name: deploy
hooks:
pre-tool:
command: ./scripts/pre-deploy.sh
post-tool:
command: ./scripts/notify.sh
---

New hook capabilities:

  • Skill hooks - Pre/post tool execution for skills
  • Agent hooks - Subagent start/stop hooks
  • Permission hooks - Auto-approve/deny patterns
  • Timeout: 10 minutes - Increased from 60 seconds

Learn more: Lesson 20: 2.1.x Advanced Features

Wildcard Permissions (Lesson 20)

Simplify permission rules with wildcards:

{
"permissions": {
"allowedOperations": [
"Bash(npm *)", // All npm commands
"Bash(git *)", // All git commands
"Bash(* test)", // Any test command
"Read(*.md)" // All markdown files
]
}
}

Session Forking (Lesson 20)

Experiment safely with session forking:

# Fork current session
claude --fork-session

# Rewind to previous point
/rewind

External Editor (Lesson 20)

Press Ctrl+G to edit your prompt in your favorite editor:

export EDITOR=vim  # or nano, code, etc.

# In Claude Code
[Type prompt... Press Ctrl+G]

[Vim opens with your prompt]
[Edit and save]

[Prompt updated in Claude]

Summary

In this lesson, you learned:

  • Subagents - Explore, Plan, Bash specialists
  • Background tasks - Run long operations asynchronously
  • Hooks - Automate actions based on events
  • Session management - Persist and resume conversations
  • Context compaction - Manage long conversations efficiently
  • Task system - Track complex multi-step work

Next Steps

In Lesson 9: Git Integration, you'll learn:

  • Using Claude for git operations
  • The /commit skill in depth
  • Creating pull requests
  • Searching git history
  • Best practices for version control

Further Reading


Continue to Lesson 9: Git Integration