Skip to content
Code Guide

Built-in Tools Reference

Claude Code ships with a set of built-in tools it uses to read, modify, and execute things in your environment. You do not install or configure them; they are always present.

Tool names are the exact strings you use in permission rules (allow/deny), subagent tools and disallowedTools frontmatter, hook matcher fields, and the CLI flags --allowedTools/--disallowedTools. To add custom tools, connect an MCP server. To build reusable prompt-driven workflows, write a skill; they run through the existing Skill tool rather than adding a new tool entry.


The table below covers every built-in tool Claude Code ships with. “Permission Required” means a first-time prompt appears before the tool runs (in default and acceptEdits modes). Tools marked No run without prompting.

ToolDescriptionPermission Required
ReadRead file contents (text, images, PDFs, Jupyter notebooks)No
WriteCreate or overwrite a file (requires prior read if the file already exists)Yes
EditMake targeted string replacements in an existing fileYes
NotebookEditModify Jupyter notebook cells by cell_idYes
GlobFind files by name pattern (**/*.ts, src/**)No
GrepSearch file contents with ripgrep regexNo
LSPCode intelligence via language servers: jump to definition, find references, type errorsNo
ToolDescriptionPermission Required
BashRun shell commands in your environmentYes
PowerShellRun PowerShell commands natively (Windows first-class, opt-in elsewhere)Yes
MonitorRun a command in the background and feed each output line back to Claude (v2.1.98+)Yes
ToolDescriptionPermission Required
WebSearchSearch the web and return result titles and URLsYes
WebFetchFetch a URL, convert HTML to Markdown, run an extraction prompt against itYes
ToolDescriptionPermission Required
AgentSpawn a subagent with its own context window to handle a taskNo
WorkflowRun a dynamic workflow: a script that orchestrates many subagents and returns one resultYes
TeamCreateCreate an agent team with multiple teammates (CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1)No
TeamDeleteDisband an agent team and clean up teammate processesNo
SendMessageSend a message to an agent team teammate, or resume a stopped subagent by IDNo
ToolDescriptionPermission Required
TaskCreateCreate a task in the session task list (v2.1.16+)No
TaskGetRetrieve full details for a specific taskNo
TaskListList all tasks with their current statusNo
TaskUpdateUpdate task status, dependencies, or details; can also delete tasksNo
TaskStopKill a running background task by IDNo
TaskOutputRetrieve output from a background task (deprecated; prefer Read on the task output path)No
TodoWriteManage the session checklist (disabled by default since v2.1.142; set CLAUDE_CODE_ENABLE_TASKS=0 to re-enable)No
ToolDescriptionPermission Required
CronCreateSchedule a recurring or one-shot prompt within the sessionNo
CronDeleteCancel a scheduled task by IDNo
CronListList all scheduled tasks in the sessionNo
ScheduleWakeupReschedule the next iteration of a self-paced /loop (called by Claude, not by you)No
RemoteTriggerCreate, update, run, and list Routines on claude.ai (Pro/Max/Team/Enterprise)No
PushNotificationSend a desktop notification and a phone push when Remote Control is connectedNo
ToolDescriptionPermission Required
ToolSearchLoad schemas for deferred MCP tools when tool search is enabledNo
WaitForMcpServersWait for MCP servers still connecting before using their tools (appears when tool search is disabled)No
ListMcpResourcesToolList resources exposed by connected MCP serversNo
ReadMcpResourceToolRead a specific MCP resource by URINo
ToolDescriptionPermission Required
EnterWorktreeCreate an isolated git worktree and switch into it (or switch into an existing one with path)No
ExitWorktreeExit a worktree session and return to the original directoryNo
EnterPlanModeSwitch to plan mode to design an approach before codingNo
ExitPlanModePresent a plan for approval and exit plan modeYes
AskUserQuestionAsk multiple-choice questions to gather requirements or clarify ambiguityNo
SkillExecute a skill within the main conversationYes
ShareOnboardingGuideUpload ONBOARDING.md and return a share link (Pro/Max/Team/Enterprise)Yes

Tool names appear in permission rules with an optional specifier:

Rule formatApplies toWhat it matches
Bash(npm run *)Bash, MonitorShell commands by prefix/glob
PowerShell(Get-ChildItem *)PowerShellPowerShell commands
Read(~/secrets/**)Read, Grep, Glob, LSPFile paths
Edit(/src/**)Edit, Write, NotebookEditFile paths
Skill(deploy *)SkillSkill name prefix
Agent(Explore)AgentSubagent type name
WebFetch(domain:example.com)WebFetchDomain name
WebSearchWebSearchNo specifier; allow or deny the whole tool

An Edit(...) allow rule also grants read access to the same path, so you do not need a matching Read(...) rule alongside it.

For the full syntax including path prefix forms (//, ~/, /, ./) and Bash wildcard semantics, see Permission Rule Syntax in settings-reference.md.


Each command runs in a separate process. Working directory changes made with cd carry over to later Bash calls in the main session (but not in subagents), as long as the target stays inside the project directory or an --add-dir path. Environment variables set with export do not persist between commands. Use CLAUDE_ENV_FILE or a SessionStart hook to propagate env state.

Default timeout is 2 minutes; Claude can request up to 10 minutes per command. Output is capped at 30,000 characters by default (configurable via BASH_MAX_OUTPUT_LENGTH, ceiling 150,000). When a command exceeds the cap, the full output is saved to a file in the session directory and Claude gets the path plus a short preview.

For long-running processes, Claude sets run_in_background: true to start as a background task. List and stop background tasks with /tasks.

Performs exact string replacement. The old_string must appear exactly as written (character-for-character, including whitespace) and must appear only once. If it appears more than once, supply a longer string with enough surrounding context to pin down one occurrence, or use replace_all: true. Claude must have read the file in the current conversation before editing, and the file must not have changed on disk since that read.

Finds files by name pattern with support for ** recursive matching. Results are sorted by modification time, capped at 100 files. Glob does not respect .gitignore by default (unlike Grep, which does).

Searches file contents using ripgrep. Patterns follow ripgrep regex syntax, which is not the same as POSIX grep. Metacharacters like { and } need escaping (for example, interface\{\} to find Go’s interface{}). Grep respects .gitignore and skips gitignored files; pass a path directly to search a gitignored file. Three output modes: files_with_matches (default, paths only), content (matching lines with line numbers), count (match count per file).

Inactive until you install a code intelligence plugin for your language. After each file edit, it automatically reports type errors and warnings. Can also be called directly to jump to definitions, find references, list symbols, trace call hierarchies, and get type information at a position.

Lets Claude watch something in the background and react when it changes. Claude writes a watch script, runs it in the background, and receives each output line as it arrives. Useful for tailing logs, polling CI status, watching a directory for file changes, or tracking long-running script output. Uses the same permission rules as Bash. Not available on Amazon Bedrock, Google Vertex AI, or Microsoft Foundry, and not available when DISABLE_TELEMETRY or CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC is set.

# Ask Claude to set up a monitor like this:
"Tail /var/log/app.log and alert me when you see any ERROR line."
"Watch CI on PR #42 and tell me when it passes or fails."

Modifies a Jupyter notebook one cell at a time by cell_id. Three modes: replace (overwrite cell source, default), insert (add a new cell after the target), delete (remove the target cell). Does not perform string replacement across the notebook the way Edit does on plain files.

Available natively on Windows; opt-in on Linux/macOS via CLAUDE_CODE_USE_POWERSHELL_TOOL=1 (requires pwsh on PATH). Claude Code spawns PowerShell with -ExecutionPolicy Bypass at process scope only, so enterprise MachinePolicy or UserPolicy lockdowns still apply. See the PowerShell Native Tool section for full setup details.

Returns file contents with line numbers. Handles images (PNG and JPG, returned as visual content), PDFs (short files whole; for PDFs over 10 pages, reads in ranges of up to 20 pages with the pages parameter), and Jupyter notebooks (all cells with outputs). When a whole-file read would exceed the token limit, Read returns the first page with a notice and the offset needed to read more.

Takes a URL and an extraction prompt. Fetches the page, converts HTML to Markdown, and runs the extraction prompt against the content using a small fast model. Claude receives that model’s answer, not the raw page. This makes WebFetch lossy by design. The extraction prompt determines what reaches Claude. HTTP URLs are upgraded to HTTPS automatically. Responses are cached for 15 minutes. When a URL redirects to a different host, WebFetch returns a text result naming both URLs rather than following the redirect; Claude issues a second call for the new URL. For the raw unprocessed page, use curl via Bash.

Runs a query and returns result titles and URLs. It does not fetch the result pages; Claude follows up with WebFetch to read a page it finds. May issue up to 8 backend searches per call to refine results internally.

Creates a new file or overwrites an existing one. If the target path already exists, Claude must have read it at least once in the current conversation before overwriting. For partial changes, Claude uses Edit rather than Write.

Runs a JavaScript script that orchestrates many subagents in the background and returns one consolidated result. Claude uses the ultracode keyword (renamed from workflow in v2.1.160, a breaking change) to trigger multi-agent fan-out. Monitor running workflows with /workflows. Requires explicit user opt-in: Claude does not start a workflow unless asked.


The /loop [interval] [prompt] command runs a prompt on a recurring interval. Omit the interval to let Claude self-pace; after each iteration it calls ScheduleWakeup to decide when the next one fires (between 1 minute and 1 hour). The pending wakeup shows up in session_crons in Stop hook input. Cancel with Esc or Ctrl+C.

/loop 5m /ci-status # check CI every 5 minutes
/loop /monitor-deploys # self-paced monitoring loop

Scheduled tasks: CronCreate / CronList / CronDelete

Section titled “Scheduled tasks: CronCreate / CronList / CronDelete”

These tools schedule prompts within the current session. Tasks are session-scoped and restored on --resume or --continue if unexpired. Use CronList to see active tasks, CronDelete to cancel one by ID. You interact with them by asking Claude to schedule something:

"Remind me to run the test suite in 30 minutes."
"Schedule a deploy check every hour until I cancel it."

Remote routines: RemoteTrigger and /schedule

Section titled “Remote routines: RemoteTrigger and /schedule”

RemoteTrigger backs the /schedule command and creates Routines on claude.ai. Routines run outside the current session on a schedule, via API, or on GitHub events. Requires a Pro, Max, Team, or Enterprise plan; not available on Bedrock, Vertex AI, or Foundry. See Routines for the full feature guide.

Claude calls PushNotification to send a desktop notification and, when Remote Control is connected with “Push when Claude decides” enabled, a phone push. Useful for long tasks where you step away. Delivery runs through Anthropic-hosted infrastructure, so it is not available on Bedrock, Vertex AI, or Foundry. See Remote Control.

Agent teams: TeamCreate / TeamDelete / SendMessage

Section titled “Agent teams: TeamCreate / TeamDelete / SendMessage”

Experimental feature behind CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1. TeamCreate spawns a team of named teammates; SendMessage sends a message to a teammate or resumes a stopped subagent by its agent ID; TeamDelete disbands the team. See the dedicated Agent Teams guide for setup, patterns, and examples.

The modern task management system (v2.1.16+, default since v2.1.142). The full tool set:

  • TaskCreate: add a task
  • TaskList: list all tasks (status overview; does not include full details)
  • TaskGet: retrieve full details for one task
  • TaskUpdate: change status, dependencies, or details; also deletes
  • TaskStop: kill a running background task by ID

TodoWrite is the legacy alternative; it was disabled by default at v2.1.142. Set CLAUDE_CODE_ENABLE_TASKS=0 to re-enable it instead. For patterns and cross-session persistence, see the Tasks API section.


Some tools are only available when Claude Code connects through Anthropic’s own infrastructure:

ToolNot available on
MonitorAmazon Bedrock, Google Vertex AI, Microsoft Foundry
PushNotificationAmazon Bedrock, Google Vertex AI, Microsoft Foundry
ScheduleWakeupAmazon Bedrock, Google Vertex AI, Microsoft Foundry
RemoteTriggerAmazon Bedrock, Google Vertex AI, Microsoft Foundry
WebSearchAmazon Bedrock (not exposed)

Workflow (the ultracode keyword) has behavioral differences across providers; check release notes for the current state.


  • Architecture internals: master loop, tool selection logic, context budget
  • Permission Rule Syntax: full allow/deny rule format with all specifier forms
  • Sub-agents: how Agent spawns work, tool inheritance, foreground vs background
  • Skills: how to build reusable prompt workflows using the Skill tool
  • MCP servers: how to add custom tools via MCP
  • Hooks: run commands before or after tool execution