Skip to main content
team_hitl_confirmation.py
"""
Slack Team HITL — Member Agent Confirmation
============================================

Ported from: cookbook/03_teams/20_human_in_the_loop/confirmation_required.py

Member agent (WeatherAgent) has an HITL tool. When the member calls
`@tool(requires_confirmation=True)`, the pause propagates to the team
and Slack shows Approve / Deny buttons.

Try in Slack:
  @bot what is the weather in Tokyo?

Slack scopes: app_mentions:read, assistant:write, chat:write, im:history
"""

from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from agno.models.openai import OpenAIResponses
from agno.os.app import AgentOS
from agno.os.interfaces.slack import Slack
from agno.team import Team
from agno.tools import tool


@tool(requires_confirmation=True)
def get_the_weather(city: str) -> str:
    """Get the current weather for a city."""
    return f"It is currently 70 degrees and cloudy in {city}"


db = SqliteDb(
    db_file="tmp/team_hitl_confirmation.db",
    session_table="team_sessions",
)

weather_agent = Agent(
    name="WeatherAgent",
    model=OpenAIResponses(id="gpt-5.2"),
    tools=[get_the_weather],
    db=db,
    telemetry=False,
)

weather_team = Team(
    id="weather-team-hitl",
    name="WeatherTeam",
    model=OpenAIResponses(id="gpt-5.2"),
    members=[weather_agent],
    db=db,
    add_history_to_context=True,
    telemetry=False,
)

agent_os = AgentOS(
    description="Slack Team HITL — member agent confirmation",
    teams=[weather_team],
    db=db,
    interfaces=[
        Slack(
            team=weather_team,
            reply_to_mentions_only=True,
        ),
    ],
)
app = agent_os.get_app()


if __name__ == "__main__":
    agent_os.serve(app="team_hitl_confirmation:app", reload=True)

Run the Example

1

Set up your virtual environment

uv venv --python 3.12
source .venv/bin/activate
uv venv --python 3.12
.venv\Scripts\activate
2

Install dependencies

uv pip install -U "agno[os,slack]" fastmcp openai starlette
3

Export your API keys

export JWT_VERIFICATION_KEY="your_jwt_verification_key_here"
export OPENAI_API_KEY="your_openai_api_key_here"
$Env:JWT_VERIFICATION_KEY="your_jwt_verification_key_here"
$Env:OPENAI_API_KEY="your_openai_api_key_here"
4

Run the example

Save the code above as team_hitl_confirmation.py, then run:
python team_hitl_confirmation.py
Full source: cookbook/05_agent_os/interfaces/slack/team_hitl_confirmation.py