requires_confirmation, requires_user_input, or external_execution. The pause propagates from the agent/team up to the workflow, and the user resolves it the same way they would on a standalone agent run.
When to Use
Use executor-level HITL when the gate is on the tool, not on the step. The agent can call other tools freely; only the marked tool pauses execution.
Tool Decorators
Three decorator flags trigger executor-level pauses. They behave the same as on standalone agents.The Pause Object
An executor pause setsrun_output.pause_kind == "executor". The matching StepRequirement has requires_executor_input == True and holds the paused tool calls in executor_requirements:
Resolving Each Type
Confirmation
User Input
External Execution
@tool(external_execution=True) means the agent never runs the tool itself. The workflow pauses, hands you the tool name and arguments, and you run it however you want — call a backend service, dispatch a job, hit a privileged API. Set tool_execution.result to whatever the tool was supposed to return, and the agent resumes with that result.
Streaming
In streaming mode the workflow yields aStepExecutorPausedEvent when the agent’s tool call pauses, and a StepExecutorContinuedEvent when execution resumes.
After a streaming run pauses, read the paused run from
workflow.get_session().runs[-1] — step_requirements is persisted to the database, not emitted as a stream event.Composite Steps
Executor HITL works inside any composite step that contains aStep with an agent or team. The pause propagates up through the wrapping primitive.
step_requirements, find the entry with requires_executor_input, and resolve its executor_requirements.