Additional Data and Metadata

Pass metadata and configuration to workflow steps with additional_data.

Pass metadata alongside the workflow input. Custom step executors read it from step_input.additional_data.

from agno.workflow import Step, Workflow, StepInput, StepOutput

def format_request(step_input: StepInput) -> StepOutput:
    metadata = step_input.additional_data or {}
    customer_id = metadata.get("customer_id", "unknown")
    priority = metadata.get("priority", "normal")

    return StepOutput(
        content=f"{priority.upper()} request for {customer_id}: {step_input.input}"
    )


workflow = Workflow(
    name="support_request",
    steps=[Step(name="format_request", executor=format_request)],
)

run_output = workflow.run(
    input="Reset account access",
    additional_data={
        "customer_id": "cust_123",
        "priority": "high",
    },
)

print(run_output.content)
# HIGH request for cust_123: Reset account access

The workflow places the same additional_data dictionary on each StepInput. Treat it as run-level context for custom steps. Mutations in one step are visible to later steps in the same run.

Input Fields

ValueAccess in a custom step
Workflow inputstep_input.input
Previous step outputstep_input.previous_step_content
Run metadatastep_input.additional_data

additional_data is optional. Use step_input.additional_data or {} when a step supports runs with and without metadata.

Developer Resources