Schema
ToolCallStepDefinition
Tool-call step — dispatches a single named V4 tool. Stuart 2026-05-19: the read-shape stored in ``workstreams.workstream.steps`` for V4 workstream templates uses ``type='tool_call'`` with ``tool_name``/``tool_params`` directly on the step. The write-side schema previously had no such variant, which caused every PATCH that included an existing tool_call step to 422 (`StepEditOverride` localStorage workaround in `apps/workstream-studio/src/lib/stepEditOverrides.ts`). This class closes that round-trip gap. Fields are intentionally permissive: ``tool_params`` is the same free-form ``dict`` the cycle launcher already passes through into ``task.step_definition``. The V4 executor reads ``tool_name`` + ``tool_params`` directly off the step blob.
| Field | Type | Description |
|---|---|---|
idrequired | string | — |
namerequired | string | — |
type | string | — |
description | string | null | — |
depends_on | string | object[] | — |
stage | string | null | — |
timeout | string | null | — |
retry_policy | RetryPolicy | null | — |
error_handler | StepErrorHandler | null | — |
impact_level | "low" | "medium" | "high" | "critical" | Impact classification for steps.lowmediumhighcritical |
run_mode | "propose" | "auto_run" | Execution mode for steps.proposeauto_run |
requires_approval | boolean | — |
metadata | object | null | — |
examples | StepExample[] | null | Attached example files for this step. Each entry pairs a platform.file_uploads.file_id with a role + tags + notes so the runtime can shape its instruction. Bounded at 20 to keep a reasonable upper limit on the prompt preamble. |
tags | string[] | null | Categorical labels on the step itself (e.g. 'pdf-read', 'coutts', 'fy25'). Free-form; recommended tag set is documented per workstream surface. |
tool_namerequired | string | V4 tool identifier (e.g. 'read_pdf_document', 'generate_pdf'). |
tool_params | object | Free-form parameter bag forwarded to the V4 tool. May contain Jinja2 placeholders like '{{ inputs.* }}'.show nestedEmpty object. |
expected_outputs | object[] | null | Optional output schema hints (name + type per entry). |
instruction | string | null | Optional natural-language instruction the runtime can use to shape the tool dispatch (e.g. prompt preamble for LLM-style tools). |
inputs | object | null | Input mappings — same Jinja2 surface as TaskStep. |