Two reference tables: Winter's built-in agent tools, and Claude Code's fixed built-in
catalogue. Deferred = Yes means the tool is hidden behind ToolSearch (schema not
loaded / not callable until loaded); No means always visible.
Source: packages/core/src/agent/tools/ + daemon wiring (packages/core/src/daemon.ts).
"Deferred = Yes" reflects the per-tool deferred: true flag, active whenever built-in
ToolSearch deferral is on (which it is in the production daemon).
| Tool | Deferred | What it does |
|---|---|---|
| Filesystem — read | ||
read |
No | Read a file's contents, with optional line offset/limit to page through large files. |
ls |
No | List files and directories one level deep under an absolute path. |
glob |
No | List files matching a glob pattern as newline-separated relative paths. |
grep |
No | Search file contents with a regex, returning file:line:text matches. |
| Filesystem — write | ||
write |
No | Write a file (creating parent dirs), overwriting if it exists. |
edit |
No | Replace an exact string in a file (unique match, or replace_all). |
| Shell | ||
bash |
No | Run a shell command in the sandboxed session dir (no network; supports background mode). |
bash_output |
Yes | Read new output produced by a background bash task since the last read. |
bash_kill |
Yes | Stop a running background bash task. |
| Agents & tasks | ||
spawn_agent |
No | Launch a child agent to handle a task autonomously in its own context and return its report. |
session_spawn |
No | Spawn a full first-class child session (own transcript, own session-list entry) — dispatch-session-only. |
agent_list |
Yes | List your background subagents with status, elapsed time, and description. |
agent_output |
Yes | Fetch a subagent's output (or latest message while running) plus its transcript path. |
send_message |
No | Send a message to a subagent by id/name to re-task or resume it (fire-and-forget). |
task_stop |
Yes | Stop a running background agent, a background bash task, or — in the dispatch session — a dispatch child session. |
task_create |
No | Create a task on the session's live to-do list (starts pending). |
task_update |
No | Update a task's status, fields, owner, or task-graph links. |
task_list |
No | List the session's tasks with their statuses. |
task_get |
Yes | Get a single task's full details by id. |
| Planning & worktrees | ||
enter_plan_mode |
Yes | Switch the session into read-only plan mode to research before editing. |
exit_plan_mode |
Yes | Present a finished plan to the user for approval and leave plan mode. |
enter_worktree |
Yes | Create an isolated git worktree on a new branch and switch the session into it. |
exit_worktree |
Yes | Leave the current git worktree, keeping or removing it. |
| User interaction | ||
ask_user |
No | Ask the user 1–4 multiple-choice questions when you need them to decide something. |
request_directory |
No | Ask the user to grant write access to a directory outside the allowed roots. |
| Skills & memory | ||
Skill |
No | Load a skill's full instructions into context for the rest of the session. |
skill_write |
Yes | Create a new skill or overwrite an existing one's file. |
memory_read |
Yes | Read the full body of a saved memory fact by name. |
memory_write |
Yes | Save a durable fact to recall in future sessions. |
memory_delete |
Yes | Delete a saved memory fact by name. |
| Web (only network-capable tools) | ||
web_fetch |
Yes | Fetch a URL and return a readable-text preview, saving the full page to a file. |
web_search |
Yes | Search the web via Brave and return a numbered list of results. |
| Code intelligence (LSP) | ||
lsp_diagnostics |
Yes | Get language-server errors/warnings for a file (TS/JS/Swift). |
lsp_definition |
Yes | Find the definition of the symbol at a position. |
lsp_references |
Yes | Find references to the symbol at a position. |
| Notifications | ||
push_notification |
Yes | Send a native desktop notification (UNUserNotificationCenter); headless osascript fallback when nobody's attached. |
| Other | ||
notebook_edit |
Yes | Edit a Jupyter notebook (.ipynb) at the cell level (replace/insert/delete). |
schedule |
Yes | Manage scheduled routines — unattended recurring headless prompts. |
computer |
No* | Control the Mac: read the AX tree, screenshot, click/drag/type/scroll, wait. |
ToolSearch |
— | Load deferred tools' schemas so they become callable. |
40 built-in tools total (Dispatch mode's session_spawn is the latest addition, after
task-30's push_notification). Notes:
computer(No*) is only registered whensettings.computerUse.enabledis on; when present it's not deferred.ToolSearchonly appears when something is actually deferred (nothing to load → hidden).- MCP / plugin tools (
mcp__…,plugin__…) aren't listed: they're external and defer on a different trigger — a visible-count threshold (ordeferExternals: "always"), not the per-tooldeferredflag. - All deferred built-ins ride one predicate in
registry.ts(isDeferred), sospecs(), the ToolSearch index, andexecute()'s guard can never disagree about what's hidden. session_spawnis dispatch-session-only — the mirror image ofspawn_agent/skill_write/write/edit/lsp/notebook_edit, which are excluded FROM a dispatch session; a code session never seessession_spawnat all. Its CC analogue is Cowork's "Dispatch" child creation — but unlikespawn_agent's in-session subagent THREAD, a spawned dispatch child is a full first-class sibling SESSION (own transcript, ownsession.listentry, independently attachable/resumable), not a nested thread of the caller's own session.task_stop's dispatch branch is the corresponding teardown: from the dispatch session only, it can stop one of its own children by session id, alongside its existing bg-agent/bg-bash-task targets.
Source: claude-code-cli-complete-rebuild-report.md (corrected 2026-07-11) — canonical
inventory lines 484–527, loading rule 529–557, MCP deferral 561–579.
Key fact: none of the fixed built-ins start deferred. The report calls the catalogue
"eager-but-conditional, not deferred" — every fixed built-in that survives the session's
registration/policy gates is supplied up front and is not searched for through
ToolSearch. Deferral in CC applies only to MCP/plugin action tools (mcp__*), which
defer by default under ENABLE_TOOL_SEARCH. So the "Deferred?" column is No for all 42;
the meaningful axis is the availability gate (last column).
| Tool | Deferred? | What it does | Availability gate / status |
|---|---|---|---|
| Shell | |||
Bash |
No | Execute shell commands. | Perm-required; command set & sandbox vary by platform/config |
PowerShell |
No | Execute native PowerShell commands. | OS rollout / opt-in; needs pwsh 7+ |
| Filesystem — read | |||
Read |
No | Read text, images, PDFs, and notebooks (files, not directory listings). | Pagination/type limits |
Glob |
No | Find paths by glob pattern. | 100-result cap; ignores .gitignore by default |
Grep |
No | Search file contents with ripgrep regex semantics. | Respects .gitignore by default |
| Filesystem — write | |||
Write |
No | Create or wholly overwrite a file. | Read-before-overwrite for existing files |
Edit |
No | Exact, targeted string replacement. | Read-before-edit + unique-match checks |
NotebookEdit |
No | Insert, replace, or delete a notebook cell. | Uses Edit(...) path permissions |
| Agents & messaging | |||
Agent |
No | Spawn or resume an isolated-context subagent. | Child tools depend on agent definitions/rules |
SendMessage |
No | Message/resume a subagent, or message a team peer. | Team-protocol messages need agent teams |
| Tasks & todo | |||
TaskCreate |
No | Create one structured task. | Default task system |
TaskGet |
No | Get one task's full details. | Current task system |
TaskList |
No | List a task snapshot. | Current task system |
TaskUpdate |
No | Patch, relate, assign, complete, or delete a task. | Current task system |
TaskOutput |
No | Read a background task's output. | Deprecated — prefer Read on the output file |
TaskStop |
No | Stop a background task/agent. | Accepts more agent identifiers in v2.1.198+ |
TodoWrite |
No | Replace the legacy todo checklist wholesale. | Disabled by default since v2.1.142 |
| Planning & worktrees | |||
EnterPlanMode |
No | Enter read-only planning mode. | Mode support varies by surface |
ExitPlanMode |
No | Present a plan for approval and leave plan mode. | Approval never idle-auto-resolves |
EnterWorktree |
No | Create or enter an isolated worktree. | Needs git or custom worktree hooks |
ExitWorktree |
No | Leave the current worktree session. | Unavailable to agents pinned to their own cwd |
| User interaction | |||
AskUserQuestion |
No | Ask 1–4 structured multiple-choice questions. | Not available inside Agent-spawned subagents |
| Skills | |||
Skill |
No | Load and execute a skill in the conversation. | Body is lazy-loaded; rules/frontmatter can hide it |
| Web | |||
WebFetch |
No | Fetch a URL and run an extraction prompt over it. | Lossy small-model extraction; per-domain perm flow |
WebSearch |
No | Search Anthropic's web-search backend. | Provider/model dependent |
| Code intelligence | |||
LSP |
No | Language-server navigation and diagnostics. | Needs code-intel plugin + server binary |
| Scheduling & routines | |||
CronCreate |
No | Create a session-scoped one-shot or recurring prompt. | v2.1.72+; CLAUDE_CODE_DISABLE_CRON=1 disables |
CronDelete |
No | Delete a scheduled session task. | Same scheduler gate |
CronList |
No | List scheduled session tasks. | Same scheduler gate |
ScheduleWakeup |
No | Choose or stop the next self-paced /loop wakeup. |
stop needs v2.1.202+ |
RemoteTrigger |
No | Manage and run claude.ai Routines. | Paid plan, web on, Anthropic-hosted; research preview |
| Notifications & delivery | |||
PushNotification |
No | Send a desktop (and, when connected, phone) notification. | Anthropic-hosted; Remote Control for mobile |
SendUserFile |
No | Deliver a generated file to a connected user/client. | Remote Control / managed cloud; not on 3rd-party providers |
| Publishing | |||
Artifact |
No | Publish HTML/Markdown as a private claude.ai artifact. | Paid plan, /login, Anthropic provider, policy/surface gates |
ShareOnboardingGuide |
No | Upload ONBOARDING.md and return a share link. |
Pro/Max/Team/Enterprise claude.ai subscribers |
| Code review | |||
ReportFindings |
No | Emit structured code-review findings. | v2.1.196+; active only when review instructions turn it on |
| Monitoring | |||
Monitor |
No | Stream command/WebSocket events into the conversation. | v2.1.98+; provider & telemetry gates |
| Orchestration | |||
Workflow |
No | Execute a scripted multi-subagent workflow. | v2.1.154+; paid/API/cloud providers; disableable |
| MCP plumbing | |||
ToolSearch |
No† | Discover and load deferred MCP tool schemas. | Enabled by default where model/provider supports it |
WaitForMcpServers |
No | Wait for still-connecting MCP servers. | Registered only when ToolSearch is off/unavailable |
ListMcpResourcesTool |
No | List MCP resources. | Only when connected servers expose resources |
ReadMcpResourceTool |
No | Read an MCP resource by server and URI. | Only when a server exposes the resource |
42 fixed built-in tools total (excludes slash commands, keyboard actions, CLI
subcommands, and the server-side advisor tool). Notes:
- †
ToolSearchis itself eager, not deferred — it's the loader for deferred MCP tools. Mutually exclusive withWaitForMcpServers: only one is registered. - The actual deferred family = MCP/plugin action tools (
mcp__server__tool, and plugin-bundledmcp__plugin_<name>_<server>__<tool>).ENABLE_TOOL_SEARCHgoverns it:unset/auto= defer & load on demand,true= force-defer all,false= load all up front. A server or single tool can opt out withalwaysLoad(v2.1.121+). - Not deferred despite confusion: plugin skills (run via
Skill), plugin agents (becomeAgenttypes), LSP plugins (configure the fixedLSPtool), and pluginbin/executables (enterBash'sPATH) — none register new deferred tool names.
- CC keeps its whole fixed catalogue eager and defers only external MCP tools.
- Winter additionally defers ~20 of its own built-ins via a per-tool
deferred: trueflag riding the same ToolSearch machinery. - Same mechanism, broader application in Winter. CC's built-ins are "conditional" (gated by version/plan/provider/OS) rather than deferred; Winter's counts: 39 built-ins vs. CC's 42.
PushNotification/push_notification(task-30) closes the last item on this list: Winter's version leans on a REAL Mac app for delivery — a nativeUNUserNotificationCenteralert with proper app identity — rather than CC's undocumented hosted delivery, plus a headlessosascriptfallback when nobody's attached at all (CC's hosted Remote Control phone delivery is out of scope for Winter).- Update (SP2a): Winter's own remote transport — a Mac-side
Gatewayfronted by a real iroh P2P listener, proven end-to-end (real daemon + real iroh) inIrohE2ETests.swift— is now live code, though dev/test-only until SP2b's pairing ceremony ships.