Kipt

Claude Code tools: the built-in tool list and how to control it

Claude Code tools explained: the built-in tools like Bash, Read, Edit and WebFetch, which ones ask permission, how to allow or remove them, and key limits.

By the Kipt team · Updated 24 October 2026

Claude Code tools are the built-in actions Claude uses to work on your code: Read, Edit and Write for files, Bash for shell commands, WebSearch and WebFetch for the web, Agent for subagents, and dozens more. You rarely call them yourself, but their exact names are what you type in permission rules, hook matchers and subagent tool lists.

This guide lists the tools you will meet most, shows which ones ask permission, and explains how to allow, restrict or remove them. It is based on the official tools reference, checked on 24 October 2026. The exact set in your session depends on your provider, platform and settings.

What are tools in Claude Code?

A tool is a named capability the model can call. When you ask Claude to fix a failing test, it might call Bash to run the suite, Read to open the test file, Edit to change one line, and Bash again to confirm the fix. Each call goes through Claude Code's permission system before it runs.

The docs put it this way: "The tool names are the exact strings you use in permission rules, subagent tool lists, and hook matchers." That is the main reason to learn them. If you want to block web access, let tests run without prompts, or give a reviewer subagent read-only access, you do it by tool name.

There are two ways to extend the list. To add new tools, connect an MCP server. To add reusable workflows, write a skill, which "runs through the existing Skill tool rather than adding a new tool entry."

Which built-in tools does Claude Code have?

These are the tools most people configure. The "Asks permission" column reflects Manual mode for paths inside the working directory, as the docs define it.

Tool What it does Asks permission
Read Reads files, including images, PDFs and Jupyter notebooks No
Edit Makes targeted edits by exact string replacement Yes
Write Creates or overwrites a whole file Yes
NotebookEdit Modifies Jupyter notebook cells Yes
Bash Runs shell commands Yes, except built-in read-only commands
PowerShell Runs PowerShell commands natively Yes
Glob Finds files by name pattern No
Grep Searches file contents with ripgrep No
LSP Code intelligence from a language server No
WebFetch Fetches a URL and extracts what you asked for Yes
WebSearch Runs a web search and returns titles and URLs Yes
Agent Spawns a subagent with its own context window No
Skill Runs a skill in the main conversation Yes
AskUserQuestion Asks you multiple-choice questions No
EnterPlanMode / ExitPlanMode Enters plan mode / presents a plan for approval No / Yes
EnterWorktree / ExitWorktree Creates or enters a git worktree / leaves it Yes / No
Monitor Runs a background command and feeds each output line to Claude Yes
TaskStop Stops a running background task No
ToolSearch Loads deferred tools when tool search is on No
Workflow Runs a dynamic workflow that orchestrates many subagents Yes

The full reference also covers scheduling tools (CronCreate, CronList, CronDelete, RemoteTrigger), messaging tools (SendMessage, ListAgents), MCP resource tools, PushNotification, SendUserFile, Artifact and others. TaskOutput was removed in v2.1.277.

Two notes from the docs on the permission column. File tools marked No still prompt for paths outside your working directory and added directories. In auto mode, a classifier decides most permission prompts instead of you.

How do you allow or block a Claude Code tool?

Every place that takes a tool name uses the same rule format, ToolName(specifier):

  • permissions.allow and permissions.deny in settings, and the /permissions screen
  • the --allowedTools and --disallowedTools CLI flags
  • a skill's allowed-tools frontmatter
  • a hook's if condition

The specifier depends on the tool:

Rule Applies to Matches
Bash(npm run *) Bash, Monitor Command patterns
Read(~/secrets/**) Read, Grep, Glob, LSP Path patterns
Edit(/src/**) Edit, Write, NotebookEdit Path patterns
Skill(deploy *) Skill Skill names
Agent(Explore) Agent Subagent types
WebFetch(domain:example.com) WebFetch Domains
WebSearch WebSearch The whole tool; no specifier

A practical settings example that lets tests run without prompts, allows one docs domain and keeps secrets unreadable:

{
  "permissions": {
    "allow": ["Bash(npm test *)", "WebFetch(domain:docs.python.org)"],
    "deny": ["Read(./.env)", "Read(~/secrets/**)"]
  }
}

Two interactions are easy to miss. An Edit(...) allow rule also grants read access to that path. A Read(...) deny rule also blocks Edit and Write on the same path, including creating a new file there.

Hook matcher fields are different: they take bare tool names, not the parenthesized format. See the permissions guide and the hooks guide for the full rule syntax.

What is the difference between --tools, --allowedTools and --disallowedTools?

These three flags look similar but do different jobs, according to the CLI reference:

Flag What it does
--tools Restricts which built-in tools exist in the session. "" disables all, "default" gives the default set, or list names like "Bash,Edit,Read"
--allowedTools Lets matching tools run without a permission prompt. Does not limit which tools are available
--disallowedTools Deny rules. A bare name removes the tool from Claude's context; a scoped rule like Bash(rm *) only blocks matching calls

A read-only review run, for example, can strip everything except reading and searching:

claude -p --tools "Read,Grep,Glob" "review src/auth for injection risks"

How do the most-used tools behave?

Bash. Each command runs in a separate process. A cd carries over to later commands while it stays inside the project or an added directory, but environment variables do not: an export in one command is gone in the next. Activate your virtualenv before launching Claude Code, or set CLAUDE_ENV_FILE. The default timeout is two minutes and the ceiling is ten, set with BASH_DEFAULT_TIMEOUT_MS and BASH_MAX_TIMEOUT_MS. Output beyond roughly 30,000 characters is saved to a file that Claude reads as needed. Long-running processes like dev servers can run in the background; list and stop them with /tasks.

Read. Returns file contents with line numbers. Images come back as visual content Claude can see. PDFs longer than 10 pages are read in ranges of up to 20 pages, which needs pdftoppm from poppler-utils. One call returns at most 25,000 tokens by default, so large files are read in pages. Read refuses binary formats such as .xlsx or .zip.

Edit and Write. Edit does exact string replacement with no regex or fuzzy matching, and the text to replace must appear exactly once unless Claude sets replace_all. Write overwrites the whole file. Older models such as Claude Opus 4.6 and Haiku 4.5 must read a file before editing it; newer models can skip the read when it would not need a permission prompt.

Glob and Grep. On macOS, Linux and WSL these are absent by default, and Claude searches with find and grep through Bash. Grep uses ripgrep syntax and skips gitignored files. Glob does not respect .gitignore by default and caps results at 100 files.

WebFetch and WebSearch. WebFetch converts a page to Markdown and runs your prompt against it in a separate model call, so the docs call it "lossy by design." It refuses localhost, upgrades HTTP to HTTPS, and caches responses for 15 minutes. WebSearch returns titles and URLs only; an interactive session is limited to 200 searches, adjustable with CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION. Amazon Bedrock does not expose web search.

How do you give a subagent only some tools?

A subagent's tools frontmatter field lists the tools it may use, by the same names. A reviewer that should only read code might look like this, saved under .claude/agents/:

---
name: code-reviewer
description: Reviews changes for bugs and security issues. Use after edits.
tools: Read, Grep, Glob
---
Review the changed files and report problems with file and line references.

Listing Glob or Grep while leaving out Bash brings the listed tools back for that subagent on macOS, Linux and WSL. The subagents guide covers the other frontmatter fields.

How do you check which tools are loaded?

Ask in the session: "What tools do you have access to?" Claude answers in plain language. For exact MCP tool names, run /mcp. The task-tracking tools (TaskCreate, TaskList and friends) are only on by default for older models such as Opus 4.7 and Sonnet 4.6; set CLAUDE_CODE_ENABLE_TODO_TOOLS=1 to get them on newer ones.

Once you settle on a set of allow and deny rules or a tool-restricted subagent you like, it is worth keeping the snippet somewhere you can reuse it. Kipt stores prompts and Agent Skills as Markdown in a private GitHub repo you own, so a subagent brief or a skill with allowed-tools travels with you to the next project.

Questions

What tools does Claude Code have?

Claude Code ships with built-in tools for reading and editing files (Read, Edit, Write), running shell commands (Bash, and PowerShell on Windows), searching the web (WebSearch, WebFetch), spawning subagents (Agent), running skills (Skill) and more. Ask Claude "What tools do you have access to?" in a session to see what is loaded, and run /mcp for MCP tool names.

Which Claude Code tools ask for permission?

In Manual mode, tools that change things or reach outside your machine ask first, including Bash, Edit, Write, WebFetch, WebSearch and Skill. Read-only tools like Read, Grep and Glob do not prompt for paths inside your working directory, but they do for paths outside it.

How do I stop Claude Code from using a tool?

Add a deny rule with the bare tool name, such as "WebFetch", under permissions.deny in settings.json, or pass --disallowedTools WebFetch at launch. A scoped rule such as Bash(rm *) keeps the tool available and only blocks matching calls.

Why are Glob and Grep missing in Claude Code on macOS or Linux?

On macOS, Linux and WSL, Claude Code leaves Glob and Grep out of the default tool set and searches with find and grep through Bash, which run embedded versions of bfs and ugrep. Naming Glob or Grep in --allowedTools at launch brings both back, while --tools gives you the ones you list.

How do I add a custom tool to Claude Code?

Connect an MCP server. Its tools appear alongside the built-in ones and follow the same permission system. Skills do not add new tools: they run through the existing Skill tool.

More in Claude Code

All guides

Keep your prompts and skills in one place, in your own GitHub. Install every skill with one command.

Get started

Kipt is an independent product, not affiliated with or endorsed by Anthropic, OpenAI, Cursor or GitHub. Claude, ChatGPT, Codex, Cursor and GitHub are trademarks of their owners.