SpyBara
Go Premium

common-workflows.md 2026-03-22 18:04 UTC to 2026-03-23 21:08 UTC

19 added, 0 removed.

2026
Tue 31 21:09 Mon 30 21:13 Sat 28 18:04 Fri 27 21:09 Thu 26 21:07 Wed 25 21:08 Tue 24 18:15 Mon 23 21:08 Sun 22 18:04 Sat 21 18:03 Fri 20 21:05 Thu 19 06:17 Wed 18 18:16 Tue 17 21:10 Mon 16 21:10 Sat 14 03:44 Fri 13 21:07 Thu 12 21:07 Wed 11 03:43 Tue 10 03:43 Mon 9 21:06 Sat 7 03:37 Fri 6 06:10 Thu 5 06:12 Wed 4 21:06 Sun 1 06:10

Common workflows

Step-by-step guides for exploring codebases, fixing bugs, refactoring, testing, and other everyday tasks with Claude Code.

This page covers practical workflows for everyday development: exploring unfamiliar code, debugging, refactoring, writing tests, creating PRs, and managing sessions. Each section includes example prompts you can adapt to your own projects. For higher-level patterns and tips, see Best practices.

Understand new codebases

Get a quick codebase overview

Suppose you've just joined a new project and need to understand its structure quickly.

1

Navigate to the project root directory

cd /path/to/project 
2

Start Claude Code

claude 
3

Ask for a high-level overview

give me an overview of this codebase
4

Dive deeper into specific components

explain the main architecture patterns used here
what are the key data models?
how is authentication handled?

Find relevant code

Suppose you need to locate code related to a specific feature or functionality.

1

Ask Claude to find relevant files

find the files that handle user authentication
2

Get context on how components interact

how do these authentication files work together?
3

Understand the execution flow

trace the login process from front-end to database

Fix bugs efficiently

Suppose you've encountered an error message and need to find and fix its source.

1

Share the error with Claude

I'm seeing an error when I run npm test
2

Ask for fix recommendations

suggest a few ways to fix the @ts-ignore in user.ts
3

Apply the fix

update user.ts to add the null check you suggested

Refactor code

Suppose you need to update old code to use modern patterns and practices.

1

Identify legacy code for refactoring

find deprecated API usage in our codebase
2

Get refactoring recommendations

suggest how to refactor utils.js to use modern JavaScript features
3

Apply the changes safely

refactor utils.js to use ES2024 features while maintaining the same behavior
4

Verify the refactoring

run tests for the refactored code

Use specialized subagents

Suppose you want to use specialized AI subagents to handle specific tasks more effectively.

1

View available subagents

/agents

This shows all available subagents and lets you create new ones.

2

Use subagents automatically

Claude Code automatically delegates appropriate tasks to specialized subagents:

review my recent code changes for security issues
run all tests and fix any failures
3

Explicitly request specific subagents

use the code-reviewer subagent to check the auth module
have the debugger subagent investigate why users can't log in
4

Create custom subagents for your workflow

/agents

Then select "Create New subagent" and follow the prompts to define:

  • A unique identifier that describes the subagent's purpose (for example, code-reviewer, api-designer).
  • When Claude should use this agent
  • Which tools it can access
  • A system prompt describing the agent's role and behavior

Use Plan Mode for safe code analysis

Plan Mode instructs Claude to create a plan by analyzing the codebase with read-only operations, perfect for exploring codebases, planning complex changes, or reviewing code safely. In Plan Mode, Claude uses AskUserQuestion to gather requirements and clarify your goals before proposing a plan.

When to use Plan Mode

  • Multi-step implementation: When your feature requires making edits to many files
  • Code exploration: When you want to research the codebase thoroughly before changing anything
  • Interactive development: When you want to iterate on the direction with Claude

How to use Plan Mode

Turn on Plan Mode during a session

You can switch into Plan Mode during a session using Shift+Tab to cycle through permission modes.

If you are in Normal Mode, Shift+Tab first switches into Auto-Accept Mode, indicated by ⏵⏵ accept edits on at the bottom of the terminal. A subsequent Shift+Tab will switch into Plan Mode, indicated by ⏸ plan mode on.

Start a new session in Plan Mode

To start a new session in Plan Mode, use the --permission-mode plan flag:

claude --permission-mode plan

Run "headless" queries in Plan Mode

You can also run a query in Plan Mode directly with -p (that is, in "headless mode"):

claude --permission-mode plan -p "Analyze the authentication system and suggest improvements"

Example: Planning a complex refactor

claude --permission-mode plan
I need to refactor our authentication system to use OAuth2. Create a detailed migration plan.

Claude analyzes the current implementation and create a comprehensive plan. Refine with follow-ups:

What about backward compatibility?
How should we handle database migration?

When you accept a plan, Claude automatically names the session from the plan content. The name appears on the prompt bar and in the session picker. If you've already set a name with --name or /rename, accepting a plan won't overwrite it.

Configure Plan Mode as default

// .claude/settings.json
{
  "permissions": {
    "defaultMode": "plan"
  }
}

See settings documentation for more configuration options.


Work with tests

Suppose you need to add tests for uncovered code.

1

Identify untested code

find functions in NotificationsService.swift that are not covered by tests
2

Generate test scaffolding

add tests for the notification service
3

Add meaningful test cases

add test cases for edge conditions in the notification service
4

Run and verify tests

run the new tests and fix any failures

Claude can generate tests that follow your project's existing patterns and conventions. When asking for tests, be specific about what behavior you want to verify. Claude examines your existing test files to match the style, frameworks, and assertion patterns already in use.

For comprehensive coverage, ask Claude to identify edge cases you might have missed. Claude can analyze your code paths and suggest tests for error conditions, boundary values, and unexpected inputs that are easy to overlook.


Create pull requests

You can create pull requests by asking Claude directly ("create a pr for my changes"), or guide Claude through it step-by-step:

1

Summarize your changes

summarize the changes I've made to the authentication module
2

Generate a pull request

create a pr
3

Review and refine

enhance the PR description with more context about the security improvements

When you create a PR using gh pr create, the session is automatically linked to that PR. You can resume it later with claude --from-pr <number>.

Handle documentation

Suppose you need to add or update documentation for your code.

1

Identify undocumented code

find functions without proper JSDoc comments in the auth module
2

Generate documentation

add JSDoc comments to the undocumented functions in auth.js
3

Review and enhance

improve the generated documentation with more context and examples
4

Verify documentation

check if the documentation follows our project standards

Work with images

Suppose you need to work with images in your codebase, and you want Claude's help analyzing image content.

1

Add an image to the conversation

You can use any of these methods:

  1. Drag and drop an image into the Claude Code window
  2. Copy an image and paste it into the CLI with ctrl+v (Do not use cmd+v)
  3. Provide an image path to Claude. E.g., "Analyze this image: /path/to/your/image.png"
2

Ask Claude to analyze the image

What does this image show?
Describe the UI elements in this screenshot
Are there any problematic elements in this diagram?
3

Use images for context

Here's a screenshot of the error. What's causing it?
This is our current database schema. How should we modify it for the new feature?
4

Get code suggestions from visual content

Generate CSS to match this design mockup
What HTML structure would recreate this component?

Reference files and directories

Use @ to quickly include files or directories without waiting for Claude to read them.

1

Reference a single file

Explain the logic in @src/utils/auth.js

This includes the full content of the file in the conversation.

2

Reference a directory

What's the structure of @src/components?

This provides a directory listing with file information.

3

Reference MCP resources

Show me the data from @github:repos/owner/repo/issues

This fetches data from connected MCP servers using the format @server:resource. See MCP resources for details.


Use extended thinking (thinking mode)

Extended thinking is enabled by default, giving Claude space to reason through complex problems step-by-step before responding. This reasoning is visible in verbose mode, which you can toggle on with Ctrl+O.

Additionally, Opus 4.6 and Sonnet 4.6 support adaptive reasoning: instead of a fixed thinking token budget, the model dynamically allocates thinking based on your effort level setting. Extended thinking and adaptive reasoning work together to give you control over how deeply Claude reasons before responding.

Extended thinking is particularly valuable for complex architectural decisions, challenging bugs, multi-step implementation planning, and evaluating tradeoffs between different approaches.

Configure thinking mode

Thinking is enabled by default, but you can adjust or disable it.

Scope How to configure Details
Effort level Run /effort, adjust in /model, or set CLAUDE_CODE_EFFORT_LEVEL Control thinking depth for Opus 4.6 and Sonnet 4.6. See Adjust effort level
ultrathink keyword Include "ultrathink" anywhere in your prompt Sets effort to high for that turn on Opus 4.6 and Sonnet 4.6. Useful for one-off tasks requiring deep reasoning without permanently changing your effort setting
Toggle shortcut Press Option+T (macOS) or Alt+T (Windows/Linux) Toggle thinking on/off for the current session (all models). May require terminal configuration to enable Option key shortcuts
Global default Use /config to toggle thinking mode Sets your default across all projects (all models).
Saved as alwaysThinkingEnabled in ~/.claude/settings.json
Limit token budget Set MAX_THINKING_TOKENS environment variable Limit the thinking budget to a specific number of tokens. On Opus 4.6 and Sonnet 4.6, only 0 applies unless adaptive reasoning is disabled. Example: export MAX_THINKING_TOKENS=10000

To view Claude's thinking process, press Ctrl+O to toggle verbose mode and see the internal reasoning displayed as gray italic text.

How extended thinking works

Extended thinking controls how much internal reasoning Claude performs before responding. More thinking provides more space to explore solutions, analyze edge cases, and self-correct mistakes.

With Opus 4.6 and Sonnet 4.6, thinking uses adaptive reasoning: the model dynamically allocates thinking tokens based on the effort level you select. This is the recommended way to tune the tradeoff between speed and reasoning depth.

With older models, thinking uses a fixed token budget drawn from your output allocation. The budget varies by model; see MAX_THINKING_TOKENS for per-model ceilings. You can limit the budget with that environment variable, or disable thinking entirely via /config or the Option+T/Alt+T toggle.

On Opus 4.6 and Sonnet 4.6, adaptive reasoning controls thinking depth, so MAX_THINKING_TOKENS only applies when set to 0 to disable thinking, or when CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1 reverts these models to the fixed budget. See environment variables.


Resume previous conversations

When starting Claude Code, you can resume a previous session:

  • claude --continue continues the most recent conversation in the current directory
  • claude --resume opens a conversation picker or resumes by name
  • claude --from-pr 123 resumes sessions linked to a specific pull request

From inside an active session, use /resume to switch to a different conversation.

Sessions are stored per project directory. The /resume picker shows sessions from the same git repository, including worktrees.

Name your sessions

Give sessions descriptive names to find them later. This is a best practice when working on multiple tasks or features.

1

Name the session

Name a session at startup with -n:

claude -n auth-refactor

Or use /rename during a session, which also shows the name on the prompt bar:

/rename auth-refactor

You can also rename any session from the picker: run /resume, navigate to a session, and press R.

2

Resume by name later

From the command line:

claude --resume auth-refactor

Or from inside an active session:

/resume auth-refactor

Use the session picker

The /resume command (or claude --resume without arguments) opens an interactive session picker with these features:

Keyboard shortcuts in the picker:

Shortcut Action
/ Navigate between sessions
/ Expand or collapse grouped sessions
Enter Select and resume the highlighted session
P Preview the session content
R Rename the highlighted session
/ Search to filter sessions
A Toggle between current directory and all projects
B Filter to sessions from your current git branch
Esc Exit the picker or search mode

Session organization:

The picker displays sessions with helpful metadata:

  • Session name or initial prompt
  • Time elapsed since last activity
  • Message count
  • Git branch (if applicable)

Forked sessions (created with /branch, /rewind, or --fork-session) are grouped together under their root session, making it easier to find related conversations.


Run parallel Claude Code sessions with Git worktrees

When working on multiple tasks at once, you need each Claude session to have its own copy of the codebase so changes don't collide. Git worktrees solve this by creating separate working directories that each have their own files and branch, while sharing the same repository history and remote connections. This means you can have Claude working on a feature in one worktree while fixing a bug in another, without either session interfering with the other.

Use the --worktree (-w) flag to create an isolated worktree and start Claude in it. The value you pass becomes the worktree directory name and branch name:

# Start Claude in a worktree named "feature-auth"
# Creates .claude/worktrees/feature-auth/ with a new branch
claude --worktree feature-auth

# Start another session in a separate worktree
claude --worktree bugfix-123

If you omit the name, Claude generates a random one automatically:

# Auto-generates a name like "bright-running-fox"
claude --worktree

Worktrees are created at <repo>/.claude/worktrees/<name> and branch from the default remote branch. The worktree branch is named worktree-<name>.

You can also ask Claude to "work in a worktree" or "start a worktree" during a session, and it will create one automatically.

Subagent worktrees

Subagents can also use worktree isolation to work in parallel without conflicts. Ask Claude to "use worktrees for your agents" or configure it in a custom subagent by adding isolation: worktree to the agent's frontmatter. Each subagent gets its own worktree that is automatically cleaned up when the subagent finishes without changes.

Worktree cleanup

When you exit a worktree session, Claude handles cleanup based on whether you made changes:

  • No changes: the worktree and its branch are removed automatically
  • Changes or commits exist: Claude prompts you to keep or remove the worktree. Keeping preserves the directory and branch so you can return later. Removing deletes the worktree directory and its branch, discarding all uncommitted changes and commits

To clean up worktrees outside of a Claude session, use manual worktree management.

Manage worktrees manually

For more control over worktree location and branch configuration, create worktrees with Git directly. This is useful when you need to check out a specific existing branch or place the worktree outside the repository.

# Create a worktree with a new branch
git worktree add ../project-feature-a -b feature-a

# Create a worktree with an existing branch
git worktree add ../project-bugfix bugfix-123

# Start Claude in the worktree
cd ../project-feature-a && claude

# Clean up when done
git worktree list
git worktree remove ../project-feature-a

Learn more in the official Git worktree documentation.

Non-git version control

Worktree isolation works with git by default. For other version control systems like SVN, Perforce, or Mercurial, configure WorktreeCreate and WorktreeRemove hooks to provide custom worktree creation and cleanup logic. When configured, these hooks replace the default git behavior when you use --worktree.

For automated coordination of parallel sessions with shared tasks and messaging, see agent teams.


Get notified when Claude needs your attention

When you kick off a long-running task and switch to another window, you can set up desktop notifications so you know when Claude finishes or needs your input. This uses the Notification hook event, which fires whenever Claude is waiting for permission, idle and ready for a new prompt, or completing authentication.

1

Add the hook to your settings

Open ~/.claude/settings.json and add a Notification hook that calls your platform's native notification command:

{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"
}
]
}
]
}
}

If your settings file already has a hooks key, merge the Notification entry into it rather than overwriting. You can also ask Claude to write the hook for you by describing what you want in the CLI.

2

Optionally narrow the matcher

By default the hook fires on all notification types. To fire only for specific events, set the matcher field to one of these values:

Matcher Fires when
permission_prompt Claude needs you to approve a tool use
idle_prompt Claude is done and waiting for your next prompt
auth_success Authentication completes
elicitation_dialog Claude is asking you a question
3

Verify the hook

Type /hooks and select Notification to confirm the hook appears. Selecting it shows the command that will run. To test it end-to-end, ask Claude to run a command that requires permission and switch away from the terminal, or ask Claude to trigger a notification directly.

For the complete event schema and notification types, see the Notification reference.


Use Claude as a unix-style utility

Add Claude to your verification process

Suppose you want to use Claude Code as a linter or code reviewer.

Add Claude to your build script:

// package.json
{
    ...
    "scripts": {
        ...
        "lint:claude": "claude -p 'you are a linter. please look at the changes vs. main and report any issues related to typos. report the filename and line number on one line, and a description of the issue on the second line. do not return any other text.'"
    }
}

Pipe in, pipe out

Suppose you want to pipe data into Claude, and get back data in a structured format.

Pipe data through Claude:

cat build-error.txt | claude -p 'concisely explain the root cause of this build error' > output.txt

Control output format

Suppose you need Claude's output in a specific format, especially when integrating Claude Code into scripts or other tools.

1

Use text format (default)

cat data.txt | claude -p 'summarize this data' --output-format text > summary.txt

This outputs just Claude's plain text response (default behavior).

2

Use JSON format

cat code.py | claude -p 'analyze this code for bugs' --output-format json > analysis.json

This outputs a JSON array of messages with metadata including cost and duration.

3

Use streaming JSON format

cat log.txt | claude -p 'parse this log file for errors' --output-format stream-json

This outputs a series of JSON objects in real-time as Claude processes the request. Each message is a valid JSON object, but the entire output is not valid JSON if concatenated.


Run Claude on a schedule

Suppose you want Claude to handle a task automatically on a recurring basis, like reviewing open PRs every morning, auditing dependencies weekly, or checking for CI failures overnight.

Pick a scheduling option based on where you want the task to run:

Option Where it runs Best for
Cloud scheduled tasks Anthropic-managed infrastructure Tasks that should run even when your computer is off. Configure at claude.ai/code.
Desktop scheduled tasks Your machine, via the desktop app Tasks that need direct access to local files, tools, or uncommitted changes.
GitHub Actions Your CI pipeline Tasks tied to repo events like opened PRs, or cron schedules that should live alongside your workflow config.
/loop The current CLI session Quick polling while a session is open. Tasks are cancelled when you exit.

Ask Claude about its capabilities

Claude has built-in access to its documentation and can answer questions about its own features and limitations.

Example questions

can Claude Code create pull requests?
how does Claude Code handle permissions?
what skills are available?
how do I use MCP with Claude Code?
how do I configure Claude Code for Amazon Bedrock?
what are the limitations of Claude Code?

Next steps