> ## 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.

# Configure Slack Streaming UX

> Show a streaming response with rotating loading messages, dynamic suggested prompts, and plan-mode task cards for tool calls.

```python streaming_ux.py theme={null}
"""
Configure Slack Streaming UX
=============================

Show a streaming response with rotating loading messages, dynamic suggested
prompts, and plan-mode task cards for tool calls.

Prerequisites: SLACK_TOKEN, SLACK_SIGNING_SECRET, OPENAI_API_KEY
Run: .venvs/demo/bin/python cookbook/05_agent_os/17_slack/streaming_ux.py
Try in Slack: Ask "What changed in Python packaging this year? Cite sources."
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 import AgentOS
from agno.os.interfaces.slack import Slack
from agno.tools.websearch import WebSearchTools

# ---------------------------------------------------------------------------
# Create Streaming Slack AgentOS
# ---------------------------------------------------------------------------

db = SqliteDb(
    id="slack-streaming-db",
    db_file="tmp/slack_streaming.db",
)

researcher = Agent(
    id="slack-streaming-researcher",
    name="Slack Streaming Researcher",
    model=OpenAIResponses(id="gpt-5.5"),
    db=db,
    tools=[WebSearchTools()],
    instructions=[
        "Research current questions with web search.",
        "Use more than one source when the answer benefits from comparison.",
        "Return a concise synthesis with source links.",
    ],
    add_history_to_context=True,
    num_history_runs=3,
    markdown=True,
)

agent_os = AgentOS(
    id="slack-streaming-os",
    description="AgentOS demonstrating Slack streaming presentation controls.",
    agents=[researcher],
    interfaces=[
        Slack(
            agent=researcher,
            streaming=True,
            task_display_mode="plan",
            loading_text="Researching...",
            loading_messages=[
                "Searching current sources...",
                "Comparing the evidence...",
                "Preparing a concise answer...",
            ],
            suggested_prompts=[
                {
                    "title": "Technology brief",
                    "message": "Summarize today's most important AI infrastructure news.",
                },
                {
                    "title": "Compare approaches",
                    "message": "Compare two current approaches to Python dependency management.",
                },
            ],
        )
    ],
)
app = agent_os.get_app()

# ---------------------------------------------------------------------------
# Run Streaming Slack AgentOS
# ---------------------------------------------------------------------------

if __name__ == "__main__":
    agent_os.serve(app=app)
```

## Run the Example

<Steps>
  <Snippet file="create-venv-step.mdx" />

  <Step title="Install dependencies">
    ```bash theme={null}
    uv pip install -U "agno[os,slack]" ddgs openai
    ```
  </Step>

  <Step title="Export environment variables">
    <CodeGroup>
      ```bash Mac/Linux theme={null}
      export OPENAI_API_KEY="your_openai_api_key_here"
      export SLACK_SIGNING_SECRET="your_slack_signing_secret_here"
      export SLACK_TOKEN="your_slack_token_here"
      ```

      ```bash Windows theme={null}
      $Env:OPENAI_API_KEY="your_openai_api_key_here"
      $Env:SLACK_SIGNING_SECRET="your_slack_signing_secret_here"
      $Env:SLACK_TOKEN="your_slack_token_here"
      ```
    </CodeGroup>
  </Step>

  <Step title="Run the example">
    Save the code above as `streaming_ux.py`, then run:

    ```bash theme={null}
    python streaming_ux.py
    ```
  </Step>
</Steps>

Full source: [cookbook/05\_agent\_os/17\_slack/streaming\_ux.py](https://github.com/agno-agi/agno/blob/v3.0.4/cookbook/05_agent_os/17_slack/streaming_ux.py)
