Tools

This page defines the current contract for Holon's model-facing tool surface: tool families, authority classification, schema/dispatch alignment, and result envelope conventions.

The machine-readable inventory for built-in model-facing tools is model-tool-schema-inventory.json; its versioning policy and refresh workflow are documented in the model tool schema inventory reference.

Last verified: 2026-05-27 against src/types.rs ToolCapabilityFamily, src/tool/tools/mod.rs builtin_tool_definitions(), src/tool/spec.rs, src/tool/dispatch.rs.

Source RFCs

Tool families (ToolCapabilityFamily)

Tools are grouped by capability family for authority gating:

FamilyToolsAuthority
CoreAgentWaitFor, GetAgent, SendAgentMessage, Enqueue, CreateTimer, ListTimers, GetTimer, CancelTimer, ListTasks, TaskStatus, TaskInput, TaskOutput, TaskStop, ListModelProviders, ListProviderModels, WorkItem tools, MemorySearch, MemoryGetAll agent profiles
LocalEnvironmentExecCommand, ExecCommandBatch, ApplyPatch, ViewImage, GenerateImage, GetWorkspaceState, SwitchWorkspace, CreateWorktreeAll profiles
AuthorityExpandingAttachWorkspace, DetachWorkspace, RemoveWorktreePublic named agents
WebWebFetch, WebSearch, XSearchAll profiles
AgentCreationCreateAgent, InvokeAgentPublic named agents
ExternalTriggerCreateExternalTrigger, CancelExternalTriggerAll profiles

Operator notification records, delivery callbacks, and UI rendering remain runtime-owned capabilities. They are not part of the model-facing tool inventory; NotifyOperator is intentionally absent from the built-in tool registry and machine-readable schema inventory. The ExternalTrigger tools follow the same pattern today: they are dispatchable in the registry but kept out of the model-facing surface.

Complete tool listing

WorkItem plane

ToolPurpose
CreateWorkItemCreate a new open WorkItem
UpdateWorkItemMutate objective, plan_status, todo_list
PickWorkItemSet current focus
GetWorkItemRead single WorkItem with plan preview
ListWorkItemsQuery with filters
CompleteWorkItemComplete an owned target by ID; promote same-round assistant text as its canonical completion report
WaitForRecord task, external, or operator waiting state and yield

Task control plane

ToolPurpose
ExecCommandStart a shell command
ExecCommandBatchRun bounded sequential command batch
ListTasksCompact active-task digest with bounded output
TaskStatusSingle-task lifecycle snapshot
TaskOutputBounded output preview with optional blocking
TaskInputSend input to interactive task
TaskStopStop a running task

Agent plane

ToolPurpose
GetAgentRead current agent-plane summary
WaitForSignal turn-end after recording explicit wait state
EnqueueSchedule self-follow-up message
CreateAgentCreate a long-lived, addressable agent
SendAgentMessageDurably send an asynchronous message to an authorized agent
InvokeAgentSend and wait for an existing-agent message, or create a result-bearing supervised child

Timer plane

ToolPurpose
CreateTimerCreate an independent or repeating timer
ListTimersList this agent's recent timers
GetTimerRead one timer by id
CancelTimerCancel an active timer

Model plane

ToolPurpose
ListModelProvidersList configured or discovered model providers
ListProviderModelsList selectable models for a provider

Image plane

ToolPurpose
GenerateImageGenerate one image from a text prompt
ViewImageValidate a local image and record its metadata

Workspace plane

ToolPurpose
GetWorkspaceStateRead bindings, active projection, worktrees, and occupancy
AttachWorkspaceAttach a workspace binding without switching
DetachWorkspaceDetach a binding; active targets fall back to agent home
SwitchWorkspaceActivate an existing workspace or execution root
CreateWorktreeCreate or safely reuse a linked worktree
RemoveWorktreeSafely remove a registered clean worktree
ApplyPatchApply unified diff patch to files

Memory plane

ToolPurpose
MemorySearchSearch agent memory sources
MemoryGetFetch exact memory content by source_ref

Web plane

ToolPurpose
WebFetchFetch HTTP/HTTPS URL
WebSearchWeb search
XSearchSearch public X posts

Tool definition contract

Each tool is defined by a BuiltinToolDefinition:

BuiltinToolDefinition {
    family: ToolCapabilityFamily,
    spec: ToolSpec { name, description, input_schema, freeform_grammar },
}

Key contract:

Command output safety

max_output_tokens controls only the model-visible projection of command output. Managed command tasks separately enforce a finite combined artifact retention limit, a higher emitted-byte execution quota, and a filesystem free-space waterline.

Retention overflow keeps a bounded raw-byte head and tail and continues draining stdout/stderr. Execution quota, low disk, and persistence failures are typed terminal failures. TaskStatus and TaskOutput expose the frozen policy, byte counters, dropped-byte evidence, and capture truncation through output_capture; TaskOutput.output_truncated remains the independent API preview-truncation flag.

See Command Task Output Safety.

Input/result separation

Holon strictly separates tool startup input from result metadata:

Key contract:

Result envelope

Tool execution returns a ToolResult that may be serialized as JSON or rendered as a human-readable receipt:

ExecCommand results carry additional fields: disposition, exit_status, initial_output_preview, and task_handle (when promoted to command_task).

WaitFor delivery modes and wait ownership

WaitFor records explicit wait state and yields the turn. Every invocation must explicitly choose a delivery mode:

Key contracts:

Known gaps