builtin__infer
Generic LLM inference — the prompt tool kind exposed as one callable tool, so a plan can add an inference step without authoring a tool YAML first. Plain text out by default; pass an output_schema and the result is structured JSON validated against it (with one repair pass), so every declared field is guaranteed present and downstream template references like {{Ex.score}} are safe. Read-only.
The
output_schema must be an object schema — give it an explicit top-level "type": "object" and a properties map, e.g. {"type":"object","properties":{"score":{"type":"number"}},"required":["score"]}. A bare {properties, required} with the type omitted is coerced to an object rather than rejected, but write it out: the schema is also what the provider validates against.
To analyze each element of a list, call infer inside a map body with {{item}} interpolated per call rather than interpolating the whole list into one instruction — see per-item inference for why and when not to.
For a fixed inference step you reuse across plans (a classifier, a reviewer), still prefer a dedicated user__ prompt tool — its prompt and schema live in one reviewed file instead of being repeated in every plan.