cookbook/05_agent_os/interfaces/slack/hitl_simple.py
import json
import httpx
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
@tool(requires_confirmation=True)
def get_top_hackernews_stories(num_stories: int) -> str:
"""Fetch top stories from Hacker News."""
response = httpx.get("https://hacker-news.firebaseio.com/v0/topstories.json")
story_ids = response.json()
return json.dumps(story_ids[:num_stories])
db = SqliteDb(
db_file="tmp/hitl_simple.db",
session_table="agent_sessions",
)
agent = Agent(
name="HN Agent",
id="hn-agent",
model=OpenAIResponses(id="gpt-5.4"),
tools=[get_top_hackernews_stories],
db=db,
)
agent_os = AgentOS(
agents=[agent],
db=db,
interfaces=[Slack(agent=agent, reply_to_mentions_only=True)],
)
app = agent_os.get_app()
if __name__ == "__main__":
agent_os.serve(app="hitl_simple:app", reload=True, port=7777)