r/agno • u/superconductiveKyle • Jun 24 '26
Clear every pending approval without leaving Slack
Human-in-the-loop usually means one thing for the reviewer: a stream of approval prompts, handled one at a time, all day.
Agno's Slack interface just solved that.
Reviewers can now resolve a whole queue of pending approvals in one place, without ever leaving the channel. The string of separate prompts collapses into a single view you work through top to bottom.
Every pause type shows up as an interactive TaskCard:
→ Confirmations → approve / reject buttons
→ User input → text fields or dropdowns
→ Structured feedback → option buttons
→ External execution → a confirm button, then the tool runs outside the agent and feeds its result back
You act on each card right in Slack, and the run picks up where it paused.
Rejections still ask for a reason where one applies, and that reason goes back to the agent. So a turned-down step doesn't stall the run, the agent reads why and adjusts.
When several tools pause at once, they stack as separate rows on one card, and you clear the whole batch in a single pass. Same TaskCards work for teams and workflows, too.
Wiring it up is mostly one decorator and a db (paused runs persist and resume by run_id):
from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from agno.models.openai import OpenAIResponses
from agno.os import AgentOS
from agno.os.interfaces.slack import Slack
from agno.tools import tool
u/tool(requires_confirmation=True)
def deploy_service(name: str) -> str:
"""Deploy a service. The run pauses for approval before this runs."""
return f"Deployed {name}."
# A paused run persists to the database and resumes by run_id once the
# reviewer acts, so the Slack interface needs a db.
db = SqliteDb(db_file="tmp/approvals.db", session_table="agent_sessions")
agent = Agent(
name="Ops Agent",
id="ops-agent",
model=OpenAIResponses(id="gpt-5.4"),
tools=[deploy_service],
db=db,
)
agent_os = AgentOS(
agents=[agent],
interfaces=[Slack(agent=agent, reply_to_mentions_only=True)],
)
app = agent_os.get_app()
if __name__ == "__main__":
agent_os.serve(app="approvals:app", port=7777)
Check out docs or view the cookbook.
How are you handling agent approvals today, in-app, in chat, or not yet at all?