Skip to main content
A Tool is a synthetic dependency with typed operations, deterministic behavior, and optional state, faults, events, callbacks, custom routes, and browser UI.

Why Tools exist

An agent often acts through APIs, MCP servers, command-line programs, SDK functions, or web interfaces. Replacing only the response text does not capture stateful consequences. A Firedrill Tool owns both the callable contract and what happens to the synthetic world when that contract is used.
The declaration defines what is callable. Its adjacent JavaScript or TypeScript behavior module implements the deterministic effect on state.

One behavior, several interfaces

Direct, HTTP, MCP, and spawned CLI bindings adapt to the same semantic operation. A Tool may also declare custom HTTP routes or a same-origin browser app when protocol or visual fidelity matters.

Tool ownership

Tools can live beside the agent, in a private package, in an independent public package, or in a community catalog. A developer can use a local Tool immediately; contributing it is optional.
Local Tool behavior is trusted repository code. Firedrill validates and locks what was selected, but the local runtime is not a sandbox for untrusted packages.

Relationship to other concepts

  • A world selects Tools and gives them shared state, time, and identities.
  • A scenario changes the starting conditions for one use case.
  • A drill gives an agent a task and asserts on the result.
  • Evidence records what the Tool did during a run.

Create a Tool

Start with a stateful or stateless Tool template and test its contract.