When an agent or team pauses for human-in-the-loop, the Slack interface renders the pause as an interactive TaskCard in the channel. The user resolves it with buttons and inputs, and the run resumes. All four pause types are supported.Documentation Index
Fetch the complete documentation index at: https://docs.agno.com/llms.txt
Use this file to discover all available pages before exploring further.
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 |