Skip to content

Host tools reference

Talon exposes 10 built-in tools to agents through the internal MCP server __talond_host_tools. At the MCP layer the tool names use underscores, for example memory_access. Inside the daemon the corresponding internal names use dots, for example memory.access.

Every host-tool call is:

  • filtered by the persona’s capability labels before the tool is even listed
  • checked again at the bridge before execution
  • executed on the host, not inside the sandbox

Each tool can have a companion instruction file at templates/tool-instructions/<capability.prefix>.md. When a persona has access to a tool, its instruction file is automatically injected into the system prompt. Files must start with a ## heading; empty or missing files are silently ignored. See Tool instructions for details.


Internal tool: schedule.manage

Capability labels:

  • schedule.manage:own

Creates, updates, cancels, deletes, or lists schedules owned by the current persona. Schedules are durable: they are stored in SQLite and survive daemon restarts and session resets.

ParameterTypeNotes
actioncreate | update | cancel | delete | listRequired
scheduleIdstringRequired for update, cancel, and delete
cronExprstringRequired for create; optional for update; must be a 5-field cron expression
labelstringOptional human-readable label
promptstringInline prompt; mutually exclusive with promptFile
promptFilestringPrompt alias from the persona’s prompts/ directory; mutually exclusive with prompt

Notes:

  • This tool currently manages cron schedules only.
  • Use this instead of model-native cron helpers. CronCreate and CronDelete are session-bound and disappear when the conversation ends.
  • cancel disables a schedule.
  • delete removes it permanently.
  • promptFile resolves a basename like memory-grooming, not a filesystem path.

Internal tool: channel.send

Capability labels:

  • channel.send:*
  • channel.send:<channel-name>

Sends a Markdown message to another Talon channel.

ParameterTypeNotes
channelIdstringRequired; this is the configured channel name
contentstringRequired Markdown body
replyTostringOptional channel-specific thread or message ID

Notes:

  • The agent does not pass a thread ID directly; Talon resolves the current thread context for the target channel.
  • Output is converted to the target connector’s native format automatically.

Internal tool: memory.access

Capability labels:

  • memory.access:thread

Reads and writes per-thread memory items.

ParameterTypeNotes
operationread | write | delete | listRequired
keystringRequired for read and delete; optional for write
valueanyRequired for write; non-string values are JSON-stringified
namespacestringOptional; maps to the memory item type

Notes:

  • When write omits key, Talon generates a UUID.
  • Supported namespaces map to fact, summary, and note.
  • Unknown namespaces fall back to note.

Internal tool: net.http

Capability labels:

  • net.http:egress

Proxies outbound HTTP and HTTPS requests through the host.

ParameterTypeNotes
methodGET | POST | PUT | PATCH | DELETE | HEADRequired
urlstringRequired
headersobjectOptional string header map
bodystringOptional request body
timeoutMsnumberOptional; defaults to 30000, capped at 120000

Notes:

  • Only http: and https: URLs are allowed.
  • Domain allowlisting is enforced by the host-side handler.
  • An empty allowlist means the capability label is the only gate.

Internal tool: db.query

Capability labels:

  • db.query:own

Runs restricted read-only SQL queries against the Talon SQLite database.

ParameterTypeNotes
sqlstringRequired; must be a simple SELECT statement
paramsarrayOptional prepared-statement parameters
limitnumberOptional; defaults to 100, maximum 1000

Allowed tables:

  • memory_items
  • schedules
  • messages
  • threads

Restrictions:

  • only SELECT is allowed
  • UNION, EXCEPT, INTERSECT, CTEs, and subqueries are rejected
  • Talon auto-injects thread and persona scoping where applicable
  • the query runs through a read-only SQLite connection

Internal tool: subagent.invoke

Capability labels:

  • subagent.invoke

Runs a named sub-agent synchronously and returns its structured result.

ParameterTypeNotes
namestringRequired sub-agent name
inputobjectOptional JSON object passed through to the sub-agent

Built-in sub-agents shipped in this repo:

NameModelPurpose
session-summarizerclaude-sonnet-4-6Compress long conversation history for session resumption
memory-retrieverclaude-haiku-4-5Retrieve relevant memory items for a query
memory-groomerclaude-haiku-4-5Consolidate and prune memory entries
file-searcherclaude-haiku-4-5Search files and return ranked snippets
spark-codergpt-5.4-sparkFast code generation via structured file operations (requires OPENAI_API_KEY)

Internal tool: subagent.background

Capability labels:

  • subagent.background

Starts and manages long-running background agent tasks.

ParameterTypeNotes
actionspawn | status | cancel | result | profilesRequired
promptstringRequired for spawn
taskIdstringUsed by status, cancel, and result
providerstringOptional provider override for spawn
profilestringOptional persona profile name for spawn
workingDirectorystringOptional working directory for spawn
timeoutMinutesnumberOptional timeout override for spawn; minimum effective value is 15

Notes:

  • Call action: "profiles" first if the agent needs to discover which persona profiles are available.
  • A profile uses another loaded persona’s prompt, skills, model, provider, and capabilities.
  • Background tasks return a task ID immediately and later deliver completion back into the originating thread.

Internal tool: persona.send

Capability labels:

  • persona.send:*

Sends a task to another persona via the A2A protocol and optionally waits for the reply.

ParameterTypeNotes
target_personastringRequired; name of the destination persona
messagestringRequired; the task or message to send
await_replybooleanOptional; if true, blocks until the target persona responds

Notes:

  • The task is delivered through the durable queue, so the target persona processes it asynchronously by default.
  • Set await_reply: true to wait for the response inline. Use with care on slow or long-running personas — it will block the calling agent for the full duration.
  • The calling persona must have the persona.send:* capability grant.

Internal tool: persona.task_status

Capability labels:

  • persona.send:*

Fetches the current status or final result of a delegated A2A task.

ParameterTypeNotes
task_idstringRequired; task ID returned by persona_send on timeout
wait_msnumberOptional; poll until the task reaches a terminal state or this many ms elapse

Returns the task status object. Terminal states are completed and failed.

Notes:

  • Use this after a persona_send call that timed out before the target persona finished.
  • wait_ms is useful for tasks you expect to finish within a known window — set it to avoid busy polling loops.
  • Requires the same persona.send:* capability as persona_send and persona_list.

Internal tool: persona.list

Capability labels:

  • persona.send:*

Lists all loaded personas available for A2A task delegation.

Returns an array of persona cards:

[
{
"name": "researcher",
"description": "Deep research and web search specialist",
"skills": ["web-research", "summarize"]
}
]
FieldTypeDescription
namestringPersona name, used as target_persona in persona_send
descriptionstring | nullFirst line of the persona’s system prompt file, # stripped
skillsstring[]Skills attached to the persona

Notes:

  • The calling persona is excluded from the results.
  • Call this before persona_send if you need to discover which personas are available and what they can do.
  • Requires the same persona.send:* capability as persona_send.