# Claude Code Tools Claude Code has a number of built-in tools. As of 2026-06-12: | Tool | Description | Permission Required | | --- | --- | --- | | **Agent** | Runs a sub-agent to handle complex, multi-step tasks | No | | **Bash** | Executes shell commands in your environment | Yes | | **Edit** | Makes targeted edits to specific files | Yes | | **Glob** | Finds files based on pattern matching | No | | **Grep** | Searches for patterns in file contents | No | | **LS** | Lists files and directories | No | | **MultiEdit** | Performs multiple edits on a single file atomically | Yes | | **NotebookEdit** | Modifies Jupyter notebook cells | Yes | | **NotebookRead** | Reads and displays Jupyter notebook contents | No | | **Read** | Reads the contents of files | No | | **TaskCreate** | Creates a new task with subject, description, and optional metadata | No | | **TaskGet** | Retrieves a task by ID with full details and dependencies | No | | **TaskList** | Lists all tasks with status, owner, and blockers | No | | **TaskUpdate** | Updates task status, details, or dependencies | No | | **WebFetch** | Fetches content from a specified URL | Yes | | **WebSearch** | Performs web searches with domain filtering | Yes | | **Write** | Creates or overwrites files | Yes | | **AskUserQuestion** | Asks a structured question to the user | No | | **CronCreate** | Schedules a recurring task (5-field cron expression) | No | | **CronList** | Lists all scheduled tasks | No | | **CronDelete** | Cancels a scheduled task by ID | No | | **EnterPlanMode** | Switches to plan mode (read-only) | No | | **ExitPlanMode** | Exits plan mode | No | | **SendMessage** | Sends a message to a running subagent, a teammate, or another Claude session (resume/communicate) | No | | **ListAgents** | Lists the agents and sessions reachable with SendMessage | No | | **TaskOutput** | Gets output from a completed task | No | | **TaskStop** | Stops a running task | No | | **LSP** | Language Server Protocol queries (diagnostics, definitions) | No | | **EnterWorktree** | Creates and enters an isolated git worktree | No | | **ExitWorktree** | Leaves and cleans up a git worktree | No | | **RemoteTrigger** | Triggers a remote/scheduled task | No | Tools can be extended via [[Claude Code MCP Integration]] and [[Claude Code Plugins]]. ## Built-in agent types The Agent tool can spawn subagents of different types: | Type | Description | | --- | --- | | **general-purpose** | Full tools, complex multi-step tasks (default) | | **Explore** | Fast read-only codebase exploration (uses Haiku for speed) | | **Plan** | Research and planning for plan mode | | **Bash** | Terminal commands in a separate context | ## Custom agents Define custom agents as `.md` files in `.claude/agents/` or `~/.claude/agents/`. Frontmatter fields: | Field | Description | | --- | --- | | `permissionMode` | default, acceptEdits, plan, dontAsk, bypass | | `isolation` | Set to `worktree` to run in an isolated git worktree | | `memory` | `user` or `project` for persistent memory | | `background` | `true` to run as a background task | | `maxTurns` | Limit the number of agentic turns | | `initialPrompt` | Auto-submit first turn without waiting for input | Use `SendMessage` to communicate with running agents. ## Cross-session messaging `SendMessage` also works between separate sessions, not just inside one. In the Claude Code desktop app, the tool is exposed as `send_message`, alongside companion tools to find the right recipient: - `list_sessions`: lists all sessions with their titles and IDs - `search_session_transcripts`: searches the history of every session - `get_session`: returns the details of one session You don't call these yourself; you ask in plain language: "send a message to the <session name> session and tell it X", or "find which session is working on Y and ask it Z". The reply comes back as a cross-session message from the receiving session. In the CLI, `ListAgents` plays the same role: it lists your subagents, teammates, other local Claude sessions, and (with Remote Control) your cloud sessions. Main use case: coordinating many parallel sessions on one project. When their work starts to overlap, ask one session to identify the conflicting ones and get them to agree on who does what, instead of relaying messages by hand. Important limit: a cross-session message is information, not user authority. Approvals relayed through another session don't count as direct user approval, so a session asked to delete a file "because the user said so" via another session will refuse. Destructive actions still need your approval in that session. This is a sensible guardrail against one compromised or confused session steering the others (see [[AI Guardrails]]). The Codex/ChatGPT desktop app has a similar feature, under different names. ## Tools from mods Since October 2026, a [[Claude Code Mods|mod]] can add tools of its own (`$.tool.register`, exposed to Claude as `mcp__<plugin>__<tool>`), rewrite the description Claude gets for any tool (`tool.describe`), and step into every tool call: let it run, refuse it, or answer it without running the tool (`tool.call`). `tool.check` lets a mod decide allow, ask or deny after the permission rules have run. ## References - Documentation: https://docs.anthropic.com/en/docs/claude-code/common-tasks - Mods events reference, tools (official docs): https://code.claude.com/docs/en/plugins/mods/reference#tools - send_message in Claude Code Desktop (2026-09-29): https://limitededitionjonathan.substack.com/p/send_message-in-claude-code-desktop ## Related - [[Claude Code]] - [[Claude Code Permissions]] - [[Claude Code MCP Integration]] - [[Claude Code Mods]] - [[Claude Code Agent Teams]] - [[Claude Code Remote Control]]