The Archive · Android reference
Tool Forge
New tools for TALOS for Android, built from a manifest of steps rather than code: what they can do, the manifest, and how it is checked.
Reference for TALOS for Android 0.1.40
A forged tool is a flow of steps over capabilities TALOS already has, described in a .talostool manifest (talos.local-tool.v1) — never code the model writes. Import one on the Tool Forge screen, or ask the assistant to make one with tool_create. Either way it is checked before it installs, and it stays off until you turn it on. Each version is kept, so you can roll back; rolling back turns the tool off again.
Once on, it is a tool like the others, named dynamic:<id>: it needs the powers its steps need, its marks are worked out from them, and one whose steps reach R4 always asks. It passes through the same consent.
Capabilities
Section titled “Capabilities”What a step can call:
| Capability | What it does | Power | Risk |
|---|---|---|---|
tasks.list | Read local TALOS tasks.input up to 1 KiB | Read | R1 |
tasks.create | Create a local TALOS task.input up to 16 KiB | Write | R2 |
tasks.setStatus | Change local task status.input up to 1 KiB | Write | R2 |
notes.list | Read local TALOS notes.input up to 1 KiB | Read | R1 |
notes.create | Create a local TALOS note.input up to 32 KiB | Write | R2 |
notes.update | Update a local TALOS note.input up to 32 KiB | Write | R2 |
memory.search | Search active local TALOS memories.input up to 1 KiB | Read | R2 |
memory.create | Create durable TALOS memory.input up to 32 KiB | Write | R3 |
The manifest
Section titled “The manifest”schemastringrequired- Always
talos.local-tool.v1. Valuestalos.local-tool.v1 idstringrequired- The tool’s permanent id: 3–64 characters, lowercase letters, digits,
.,_and-. The tool is nameddynamic:<id>. versionnumberrequired- A positive integer; each new version keeps the previous ones, so you can roll back.
titlestringrequired- The name shown on the Tool Forge screen and on the consent card (1–120 characters).
descriptionstringrequired- What the tool does, for you and for the model (1–1000 characters).
createdAtstringrequired- When this version was written (ISO 8601).
parentVersionnumberrequired- The version this one replaces, or
nullfor the first. executionstringrequired- Always
declarative-flow: a forged tool is a flow of steps, never code. Valuesdeclarative-flow installScopestringrequired- Always
device: the tool lives on this phone. Valuesdevice networkobjectrequired- Whether the tool may reach the network (
forbidden) or only the exact hosts listed (allowlist). No capability of this release uses the network. credentialRequirementsarray of objectrequired- Keys or accounts the tool needs, each with its purpose and the hosts it may reach. A tool whose access is missing cannot run.
modelDefaultsobject- What the model steps of the flow need: structured output, context, privacy (local only, local preferred, or remote allowed), reasoning effort.
inputSchemaobject- The tool’s parameters, as a JSON Schema subset; the model is offered exactly these.
outputSchemaobject- The shape of the result, as a JSON Schema subset.
flowobjectrequired- The steps: an entry node, a bound on transitions, and the nodes.
stateobject- Data the tool keeps between runs, with its own fields and a size limit.
triggersarray of object- When the tool would run by itself (
manual,schedule,app-resume,task-changed). Accepted in the manifest; this release does not start a tool on its own. uiobject- A summary card for the result: its title and the values it shows.
The flow starts at its entry node and follows next (or then and else) from node to node. It may not loop back on itself; repetition is a bounded foreach.
set- Writes a value into a variable. Fields
targetvaluenext capability- Calls one capability of TALOS, with its input; may retry (1–3 attempts) and name the capability that undoes it. Fields
capabilityinputtargetretrycompensationnext llm- Asks the model to classify, extract, summarize, generate or rank, into a variable; with structured output it needs an output schema. Fields
opinputtargetrequirementsoutputSchemanext if- Goes to one node or another, by a comparison (
eq,neq,truthy,exists,contains,gt,gte,lt,lte). Fieldsconditionthenelse foreach- Repeats a short body of steps for each item of a list, up to a bound you set. Fields
sourceitemVarindexVarmaxItemsbodynext return- Ends the run with a value. Fields
value fail- Ends the run with an error code and a message. Fields
codemessage
Limits
Section titled “Limits”- Nodes in a flow
- 64
- Transitions in a run
- 256
- Items of a loop
- 100
- Steps in the body of a loop
- 16
- Size of a manifest
- 64 KiB
- Size of the input
- 64 KiB
- Result of one capability
- 256 KiB
- Output of a run
- 256 KiB
Checks
Section titled “Checks”A manifest with an error does not install; the import lists every issue, with the field it concerns.
| Code | Meaning |
|---|---|
FORGE_RETRY_BOUNDS | Retry attempts are not between 1 and 3. |
FORGE_RETRY_BACKOFF | The wait between attempts is not between 0 and 5000 ms. |
FORGE_CAPABILITY_UNKNOWN | A step names a capability TALOS does not have. |
FORGE_NETWORK_NOT_DECLARED | A step uses a capability that needs the network, and its host is not listed. |
FORGE_INVALID_COMPENSATION | A step that cannot be undone claims a compensation. |
FORGE_COMPENSATION_UNKNOWN | The compensation names an unknown capability. |
FORGE_COMPENSATION_MISMATCH | The compensation does not undo the capability it is attached to. |
FORGE_LLM_STRUCTURED_OUTPUT_MISSING_SCHEMA | A model step asks for structured output without an output schema. |
FORGE_TRANSITION_BOUNDS | The bound on transitions is out of range. |
FORGE_NODE_BOUNDS | The flow has no nodes, or too many. |
FORGE_NODE_ID | A node has an invalid id. |
FORGE_NODE_DUPLICATE | Two nodes share an id. |
FORGE_FOREACH_BOUNDS | A loop’s bound on items is out of range. |
FORGE_INLINE_BOUNDS | A loop’s body has too many steps. |
FORGE_ENTRY_MISSING | The entry node does not exist. |
FORGE_EDGE_MISSING | A node leads to a node that does not exist. |
FORGE_CYCLE | The flow loops back on itself; cycles and recursion are not allowed. |
FORGE_UNREACHABLE_NODEwarning | A node cannot be reached from the entry (a warning: the tool still installs). |
FORGE_MANIFEST_STRUCTURE | A field is missing, unknown, or of the wrong type. |
FORGE_MANIFEST_TOO_LARGE | The manifest is larger than the limit. |
FORGE_ID | The id is not a 3–64 character lowercase slug. |
FORGE_VERSION | The version is not a positive integer. |
FORGE_TITLE | The title is empty or longer than 120 characters. |
FORGE_DESCRIPTION | The description is empty or longer than 1000 characters. |
FORGE_NETWORK_CONTRADICTION | The network is forbidden, yet hosts are listed. |
FORGE_DOMAIN_INVALID | A listed host is not an exact DNS name. |
FORGE_CREDENTIAL_ID | A credential has an invalid id. |
FORGE_CREDENTIAL_SCOPE | A credential may reach a host the network list does not allow. |
FORGE_SECRET_FOUND | The manifest contains what looks like a secret: keys belong in credentials, never in the file. |
FORGE_OUTBOUND_FORBIDDEN | A reachable step needs the network, and the network is forbidden. |
FORGE_REF_UNSAFE | A reference to a value is not a safe path. |
FORGE_TARGET_UNSAFE | A step writes to a variable name that is not allowed. |
FORGE_VAR_UNSAFE | A loop variable has a name that is not allowed. |