SiloError — raised by the CLI and SDK when you are authoring an environment. These are your mistakes, not an agent’s.
ToolError — returned to an agent when a tool call fails at runtime. These are values, not exceptions, and are written to be read by a model.
SiloError
Environments
runtime_contract_invalid is often a module-system problem rather than a missing export. An environment in a project without "type": "module" loads as CommonJS, and its exports end up nested under .default.Data
Tasks
Code resources
Names
Names are validated because they are interpolated into file paths and generated TypeScript.
ToolError
Returned to the agent as a value withisError: true — never thrown into it. A rejected call is an observation the agent can act on, not the end of the rollout.
Any string is accepted, so a domain can add its own vocabulary. Prefer these when they fit.
throw; Silo catches it and returns it to the agent as a value.
Two are generated by Silo
invalid_input for a schema violation and tool_not_found for an unknown name are produced before your run executes. The schema message names the real parameters, which is what gives a model a chance to self-correct.
Silo