Built-in Tools
Catalog of tools shipped with Aleph, organized by category
Overview
Aleph ships a comprehensive set of built-in tools covering file operations,
code execution, web interaction, memory, browser automation, sub-agent
delegation, scheduling, and more. All built-in tools implement the
AlephTool trait with static dispatch for maximum performance, and are
assembled by the executor's builtin registry (src/executor/builtin_registry/)
at startup.
Every tool call funnels through the same chokepoint —
ScopedToolService (src/tools/scoped/). Exec tier, the command-policy
floor, and per-channel permission merging all happen there. Whether a tool
"requires confirmation" is decided by its ToolDefinitionMetadata, not
its name.
Code execution
| Tool | Description |
|---|---|
bash | Run a bash command (via WorkspaceSandbox). |
code_exec | Multi-language code snippet (shell / python / javascript). |
Both dispatch subprocesses through Arc<dyn Sandbox>. Naked Command::new
is not allowed in src/builtin_tools/. They take code / command
with optional working_dir and timeout; output is bounded by the
sandbox wall-clock (default 60 s) and a 1 MiB output budget.
File operations
| Tool | Description |
|---|---|
file_ops | Multiplexed action parameter: list / read / write / edit / move / copy / delete / mkdir / search. |
file_read | Read a file. Supports images (image_read); unchanged reads are de-duplicated across turns via a read cache. |
file_write | Write a file. |
file_edit | Apply targeted edits (multiple edits, each {oldText, newText}). |
apply_patch | Multi-file structured patch ({action, files, …}). |
file_ops is a multiplexer — its destructive sub-operations (delete /
move) are argument-recognized under the exec tier
(ExecTier::asks_for_arguments). Do not rely on the bare name file_ops
as an approval switch; configure explicit entries.
Web and search
| Tool | Description |
|---|---|
web_fetch | Fetch a URL via src/security/ssrf::safe_fetch, enforcing DNS pinning + redirect-chain validation. |
search | Web search via SearXNG (or any configured engine). |
web_fetch is the single outbound HTTP entry point — webhook delivery,
media downloader, MCP HTTP transport, and browser navigation all funnel
through the SSRF engine.
Memory and retrieval
Three complementary retrieval tools, each searching a different store. Descriptions are tuned to avoid tool-choice confusion:
| Tool | Store | Use when |
|---|---|---|
ctx_search | Offloaded tool output (FTS5 content index) | A tool result is tagged [Full output persisted: … Indexed N sections …] and you need only the relevant slice (build log, big grep, web fetch). |
recall_events | This session's event timeline (session_events, BM25) | An earlier tool action, result, or error was dropped from context by compaction and you need to recover what already happened. |
session_search | Past conversations across sessions (memory summaries + transcripts) | You need facts or decisions from other sessions (long-term memory). |
Rule of thumb: ctx_search = "what did that tool print?"; recall_events
= "what did I already do this session?"; session_search = "what happened
in past sessions?".
Other memory tools:
| Tool | Description |
|---|---|
memory_search | Hybrid retrieval across facts + transcripts, deduplicated by ContextComptroller. |
memory_explore | Browse the fact graph (fact clusters, similarity navigation). |
memory_timeline | Time-ordered fact view. |
memory_browse | Browse stored entries. |
remember | Explicitly write a fact to long-term memory. |
recall_context | Pull facts relevant to the current session (for context assembly). |
MCP bridge tools (capability-gated)
These built-in tools appear in the registry only while at least one
connected MCP server advertises the matching capability
(src/mcp/tool_bridge.rs::reconcile_capability_tools). The model is never
offered a tool that every call would reject.
| Tool | Capability that triggers it |
|---|---|
mcp_read_resource | Any server with resource_count > 0 or resource_template_count > 0 |
mcp_list_resources | Same as above (paired with mcp_read_resource) |
mcp_list_resource_templates | Same as above |
mcp_get_prompt | Any server with prompt_count > 0 |
mcp_list_prompts | Same as above (paired with mcp_get_prompt) |
mcp_login | Any server whose transport is not Stdio (remote OAuth flow) |
mcp_read_resource and mcp_get_prompt resolve <server>:<rest> ids
through resolve_server_qualified with longest-prefix server match —
shortest/first match mis-routes a resource on a server literally named
gh:sub to a server named gh.
Browser tools (per-action)
Browser automation is exposed as a set of focused, single-responsibility
tools (not a single browser tool with an action discriminator) — see
Browser Automation.
browser_click / browser_navigate / browser_open / browser_snapshot /
browser_screenshot / browser_evaluate / browser_fill_form /
browser_press_key / browser_hover / browser_scroll / browser_type /
browser_select / browser_drag / browser_upload / browser_console /
browser_cookies / browser_dialog / browser_emulate / browser_resize /
browser_wait_for / browser_pdf / browser_network / browser_tabs /
browser_session / browser_profile.
Element targeting prefers ARIA ref_id (from browser_snapshot). CSS
selector targeting has been removed; coordinates (x, y) are the
fallback.
Sub-agent and multi-agent
| Tool | Description |
|---|---|
a2a_delegate | Delegate to a remote agent over the A2A protocol. |
a2a_agents | List A2A agents available for delegation. |
acp_delegate / acp_switch / acp_session_control | ACP protocol entry points. |
node_list / node_invoke / node_invoke_many / node_file / node_manage | Cluster-node discovery, invocation, and file IO. |
team_* | Team subsystem entry points (dispatcher / broadcast / disband). |
A delegated sub-agent is its own principal in the signed-ledger model: it
holds its own Ed25519 key and signs its own work — it is not a line on its
parent's chain. The acting role is injected by AllowlistToolService
(the spawner builds this wrapper from the child's AgentDef); the
sub-agent runs on its parent's ScopedToolService and inherits the
parent's TURN_CONTEXT, but the ledger identity is its own.
Sessions and tasks
| Tool | Description |
|---|---|
session_new / session_set_mode / session_complete | Session creation, mode (chat / work / code), completion. |
session_search | Cross-session search (distinct from memory_search). |
task_create / task_update / task_list / task_wait | Task management. |
loop_graph | Loop-graph governance layer entry (register nodes, link governance edges, view topology + structural lint). |
loop | Direct loop control. |
goal | Goal-layer access. |
Scheduling
| Tool | Description |
|---|---|
cron_manage | CRUD cron jobs. |
heartbeat_create / heartbeat_update / heartbeat_delete / heartbeat_list / heartbeat_toggle / heartbeat_report | Heartbeat tasks. |
Cron and heartbeat are headless producers — a cron whose approval cannot
be routed is stamped unattended (UNATTENDED_KEY); heartbeat and a2a are
always stamped unattended. ScopedToolService then immediately
denies confirm-gated tools instead of publishing an approval card into the
void and blocking for the 120 s timeout.
Meta / config / identity
| Tool | Description |
|---|---|
ask_user | Route a question back to the originating channel and wait for the HITL response (resolved through TURN_CONTEXT). |
permission | Query / request tool permissions. |
select_model | Switch the model for the current session. |
self_config / self_manage | Restricted self-configuration (default-denied on chat-tier channels by the channel tool gate). |
config_audit / config_guide / read_config_guide | Config helpers. |
agent_identity | Read + verify each agent's signed ledger (operator-gated). |
doctor | Diagnostics. |
hooks_manage | Shell-hook consent. |
vault_store | Write to the encrypted vault (confirm-gated, operator-only). |
Generation
| Tool | Description |
|---|---|
image_generate | Image from a text prompt. |
video_generate | Video generation. |
audio_generate / audio_transcribe | Audio generation / transcription. |
speech_generate | Text-to-speech. |
pdf_generate | PDF from text / Markdown. |
media_understand | Multimodal understanding (image, audio, video). |
document_extract | Extract content from PDF / DOCX / PPTX. |
Desktop integration
| Tool | Description |
|---|---|
desktop | Bridge to the Aleph macOS desktop companion (mouse, keyboard, clipboard, screen capture). |
desktop_check_permissions | Query TCC permission status. |
desktop_gui_locate | Resolve windows via AX + geometric matching (CGWindowID → AX). |
desktop_ax_query_focused / desktop_ax_query_tree / desktop_ax_query_by_role / desktop_ax_snapshot | Accessibility queries. |
desktop_som | Set-of-Marks overlay (visual interaction regions). |
Desktop tools require the Aleph macOS companion to be running. When it is
not, calls return a friendly message instead of an error and the agent
degrades gracefully. All native API calls go through the AlephBridge
stdio helper — the Rust core stays sandbox-friendly.
Channels / messages / notes
| Tool | Description |
|---|---|
channel_message | Send / reply / edit / delete / react in connected channels. |
channel_directory | Read-only listing of channels and members (idempotent; intentionally separated from channel_message so it can't be tier-tightened away). |
media_send | Send media (image, file, audio). |
note_manage / note_graph_query / note_orient / note_schema | Notes graph. |
scratchpad / scratchpad_registry | Shared scratchpad (used by teams). |
pim | Personal information management (contacts / calendar / reminders). |
artifact_publish | Publish an artifact. |
workflow | Workflow tool. |
automation | Automation triggers. |
local_voice / voice_mode_set | Local voice. |
google_meet | Google Meet bridge. |
flag_user_correction | User-correction injection (namespaced to the active agent). |
process_registry | Track spawned processes. |
command_canonicalize / command_ledger | Command canonicalization + ledger (dedupe / audit). |
crawl4ai | Crawl via the crawl4ai backend. |
MCP tool naming and registration
Tools discovered from MCP servers are registered as <server>__<tool>
(e.g., github__create_issue). McpHandler::qualified_name is the single
source of naming truth (src/tools/handlers/mcp.rs): it strips the
manager's redundant {server}: prefix, maps any character outside
[A-Za-z0-9_-] to _, and truncates to 64 characters. The __ is a
namespace separator — the LLM sees it as part of the name.
Schemas whose type is not "object" are quarantined — a schema that
every provider would reject would otherwise poison the whole turn with an
HTTP 400.
Registration summary
Built-in tools are not registered through a builder — they are assembled
by src/executor/builtin_registry/ at startup. The registry:
- injects a shared
Arc<dyn Sandbox>into every exec-class tool (bash_exec,code_exec); - injects
Arc<ProfileManager>into every browser tool; - injects
Arc<McpManagerHandle>into every MCP-bridge tool; - injects channel context /
ApprovalRequesterinto the tools that need them.
Every requires_confirmation tool is listed once in
CONFIRMATION_REQUIRED_TOOLS (vault_store, agent_delete, team_disband, …)
and shares one ApprovalRequester. This is fail-closed by construction —
any built-in tool not in READ_ONLY_TOOLS requires approval under the
Ask tier.