Aleph
Tools & Extensions

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 chokepointScopedToolService (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

ToolDescription
bashRun a bash command (via WorkspaceSandbox).
code_execMulti-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

ToolDescription
file_opsMultiplexed action parameter: list / read / write / edit / move / copy / delete / mkdir / search.
file_readRead a file. Supports images (image_read); unchanged reads are de-duplicated across turns via a read cache.
file_writeWrite a file.
file_editApply targeted edits (multiple edits, each {oldText, newText}).
apply_patchMulti-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.


ToolDescription
web_fetchFetch a URL via src/security/ssrf::safe_fetch, enforcing DNS pinning + redirect-chain validation.
searchWeb 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:

ToolStoreUse when
ctx_searchOffloaded 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_eventsThis 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_searchPast 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:

ToolDescription
memory_searchHybrid retrieval across facts + transcripts, deduplicated by ContextComptroller.
memory_exploreBrowse the fact graph (fact clusters, similarity navigation).
memory_timelineTime-ordered fact view.
memory_browseBrowse stored entries.
rememberExplicitly write a fact to long-term memory.
recall_contextPull 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.

ToolCapability that triggers it
mcp_read_resourceAny server with resource_count > 0 or resource_template_count > 0
mcp_list_resourcesSame as above (paired with mcp_read_resource)
mcp_list_resource_templatesSame as above
mcp_get_promptAny server with prompt_count > 0
mcp_list_promptsSame as above (paired with mcp_get_prompt)
mcp_loginAny 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

ToolDescription
a2a_delegateDelegate to a remote agent over the A2A protocol.
a2a_agentsList A2A agents available for delegation.
acp_delegate / acp_switch / acp_session_controlACP protocol entry points.
node_list / node_invoke / node_invoke_many / node_file / node_manageCluster-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

ToolDescription
session_new / session_set_mode / session_completeSession creation, mode (chat / work / code), completion.
session_searchCross-session search (distinct from memory_search).
task_create / task_update / task_list / task_waitTask management.
loop_graphLoop-graph governance layer entry (register nodes, link governance edges, view topology + structural lint).
loopDirect loop control.
goalGoal-layer access.

Scheduling

ToolDescription
cron_manageCRUD cron jobs.
heartbeat_create / heartbeat_update / heartbeat_delete / heartbeat_list / heartbeat_toggle / heartbeat_reportHeartbeat 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

ToolDescription
ask_userRoute a question back to the originating channel and wait for the HITL response (resolved through TURN_CONTEXT).
permissionQuery / request tool permissions.
select_modelSwitch the model for the current session.
self_config / self_manageRestricted self-configuration (default-denied on chat-tier channels by the channel tool gate).
config_audit / config_guide / read_config_guideConfig helpers.
agent_identityRead + verify each agent's signed ledger (operator-gated).
doctorDiagnostics.
hooks_manageShell-hook consent.
vault_storeWrite to the encrypted vault (confirm-gated, operator-only).

Generation

ToolDescription
image_generateImage from a text prompt.
video_generateVideo generation.
audio_generate / audio_transcribeAudio generation / transcription.
speech_generateText-to-speech.
pdf_generatePDF from text / Markdown.
media_understandMultimodal understanding (image, audio, video).
document_extractExtract content from PDF / DOCX / PPTX.

Desktop integration

ToolDescription
desktopBridge to the Aleph macOS desktop companion (mouse, keyboard, clipboard, screen capture).
desktop_check_permissionsQuery TCC permission status.
desktop_gui_locateResolve windows via AX + geometric matching (CGWindowID → AX).
desktop_ax_query_focused / desktop_ax_query_tree / desktop_ax_query_by_role / desktop_ax_snapshotAccessibility queries.
desktop_somSet-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

ToolDescription
channel_messageSend / reply / edit / delete / react in connected channels.
channel_directoryRead-only listing of channels and members (idempotent; intentionally separated from channel_message so it can't be tier-tightened away).
media_sendSend media (image, file, audio).
note_manage / note_graph_query / note_orient / note_schemaNotes graph.
scratchpad / scratchpad_registryShared scratchpad (used by teams).
pimPersonal information management (contacts / calendar / reminders).
artifact_publishPublish an artifact.
workflowWorkflow tool.
automationAutomation triggers.
local_voice / voice_mode_setLocal voice.
google_meetGoogle Meet bridge.
flag_user_correctionUser-correction injection (namespaced to the active agent).
process_registryTrack spawned processes.
command_canonicalize / command_ledgerCommand canonicalization + ledger (dedupe / audit).
crawl4aiCrawl 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 / ApprovalRequester into 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.

On this page