Example
A paused run is persisted to the database and resumed byrun_id when the user resolves the TaskCard, so the Slack interface needs a db.
cookbook/05_agent_os/interfaces/slack/hitl_simple.py
Pause Types
Each pause type renders a different TaskCard:| Pause type | Slack UI | Trigger |
|---|---|---|
| Confirmation | Approve / Reject buttons. Multiple pending tools render as separate rows. | @tool(requires_confirmation=True) |
| User input | Text fields, or dropdowns for Literal/Enum-typed fields. | @tool(requires_user_input=True) |
| User feedback | Option buttons from a structured question. | UserFeedbackTools |
| External execution | Confirm button. The tool runs outside the agent, result is fed back. | @tool(external_execution=True) |
Teams and Workflows
The same TaskCards work for teams and workflows. When a member agent inside a team pauses, the pause propagates to the team run and surfaces in Slack. Workflow step and executor pauses surface the same way.| Pattern | Cookbook |
|---|---|
| Agent confirmation | hitl_confirmation.py |
| User input | hitl_user_input.py |
| External execution | hitl_external_execution.py |
| Structured feedback | hitl_user_feedback.py |
| Team confirmation | team_hitl_confirmation.py |
Next Steps
| Task | Guide |
|---|---|
| Understand pause types | HITL overview |
| Set up the Slack interface | Slack introduction |
| Manage approvals in AgentOS | Approvals overview |