When to reach for it
- A tool from the toolbox gives you a ready-made capability — the current time as a structured object, a random UUID, an HTTP request, embedding vectors.
- An extension from the toolbox clips a power onto an existing tool without changing it —
cachememoizes results,batchfans one tool over many inputs,chainpipes one tool’s output into another,output_schemaforces a tool’s output to a JSON Schema,proxyroutes its connections through a forward proxy,prometheus_metricsmeters it.
Enable the modules
Load a tool module undertools[].module and an extension module under extensions_modules. Import paths are the module names; the base install stays light, and each heavier module is gated behind an optional dependency that fails loudly at import if missing.
manifest.yml
extensions map or tai tools apply — see Apply an extension.
Run a tool with --kw
Run any registered tool synchronously with tai tools run <name>. Pass its arguments as repeatable --kw key=value pairs — each value is parsed as JSON, falling back to the literal string — or as one JSON object with --kwargs:
examples/toolbox/run_tool_kw.sh
tai tools schema <name>:
The
request tool fetches URLs server-side, so it passes tai’s URL guard —
private, loopback, and link-local addresses are refused by default. On a
self-hosted deployment, reaching a service on the Compose network is an explicit
opt-in: see Reaching a service on the Compose network.Judge state with classify
The classify tool judges JSON state against typed questions and returns typed
answers with probabilities — the classifier model type as a
tool. It needs the classifier extra (pip install 'tai42-toolbox[classifier]') and
a classifier provider configured through LLM_PROVIDER_CLASSIFIER and the
CLASSIFIER_* variables.
Call it with a state to judge and a named map of questions, one of each kind — a
noul (yes/no), a choice (pick one), and a score (rate over a rubric):
type discriminator — the noul probability, the choice label with
its per-label probabilities, and the score expected value with its per-level
distribution — alongside the model, usage, and request_id:
choice label from its criteria, and a score within its levels. A response
outside them fails the call (see Answers stay inside what the request declares).
Pass classifier_provider and classifier_kwargs to override the configured provider
and its options for one call. See the classifiers concept for
the question kinds and answer shapes in full.
The standard set
The tools and extensions the toolbox ships. This table is generated from the plugin registry, so it never drifts from the package.
A preset or hook over the
batch or chain branch has its stored kwargs checked at save,
like any stored reference. A
batch’s params[i] is checked against the extended tool’s own fields, so a missing template
id in a field the extended tool types TemplatedText is refused:
stored id 'prompts/missing' at tool_kwargs > params[1].system_prompt is not a stored template.
A chain’s next_tool_name is judged by the run, while a missing template id in the chain’s
own jq_expression is refused at save:
stored id 'jq/missing' at tool_kwargs > jq_expression is not a stored template.
Confirm what loaded
The full, always-current list of toolbox tools and extensions — names, kinds, and each item’s description — lives on the toolbox plugin page. Per-tool specifics (formats, session behavior, the extras to install) live in the toolbox package’s own documentation, linked from that page.
See also
- Tools and extensions — the model the toolbox demonstrates.
- Apply an extension — attach a toolbox extension to a tool.
- Toolbox plugin — the full toolbox and its repository.
- CLI reference — inspect what loaded.

