> ## Documentation Index
> Fetch the complete documentation index at: https://phidatainc.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Slack

> Run agents, teams, and workflows in Slack with session routing, streaming, file handling, and human-in-the-loop approvals.

The Slack interface routes messages from Slack users and threads to agents, teams, or workflows in AgentOS.

<Frame caption="Coda, a code review agent in Slack">
  <video autoPlay muted loop playsInline controls className="w-full rounded-lg" src="https://mintcdn.com/phidatainc/GD1ROZtIJiAfofVV/videos/slack-coda-demo.mp4?fit=max&auto=format&n=GD1ROZtIJiAfofVV&q=85&s=b44555179aa1e23e2597e8e48bfa9781" data-path="videos/slack-coda-demo.mp4" />
</Frame>

The Slack interface provides:

1. **Session routing:** Slack users and threads map to AgentOS user and session IDs
2. **File handling:** Uploads and downloads work out of the box
3. **Human in the loop:** Pause for approvals before sensitive actions
4. **Streaming:** Responses stream live with task cards showing progress

Add a database and enable history or memory on the agent or team when replies need context from earlier runs.

## Quick start

<Tabs>
  <Tab title="Agent">
    ```python agent.py theme={null}
    from agno.agent import Agent
    from agno.models.openai import OpenAIResponses
    from agno.os.app import AgentOS
    from agno.os.interfaces.slack import Slack

    agent = Agent(name="Support Bot", model=OpenAIResponses(id="gpt-5.4"))

    agent_os = AgentOS(
        agents=[agent],
        interfaces=[Slack(agent=agent)],
    )
    app = agent_os.get_app()

    if __name__ == "__main__":
        agent_os.serve(app="agent:app", reload=True)
    ```
  </Tab>

  <Tab title="Team">
    ```python team.py theme={null}
    from agno.agent import Agent
    from agno.team import Team
    from agno.models.openai import OpenAIResponses
    from agno.os.app import AgentOS
    from agno.os.interfaces.slack import Slack

    researcher = Agent(name="Researcher", role="Find information", model=OpenAIResponses(id="gpt-5.4"))
    writer = Agent(name="Writer", role="Draft responses", model=OpenAIResponses(id="gpt-5.4"))

    support_team = Team(
        name="Support Team",
        mode="coordinate",
        members=[researcher, writer],
        model=OpenAIResponses(id="gpt-5.4"),
    )

    agent_os = AgentOS(
        teams=[support_team],
        interfaces=[Slack(team=support_team)],
    )
    app = agent_os.get_app()

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

    The team coordinator routes messages to the right specialist. Each thread is one session belonging to the team.
  </Tab>

  <Tab title="Workflow">
    ```python workflow.py theme={null}
    from agno.agent import Agent
    from agno.workflow import Step, Workflow
    from agno.models.openai import OpenAIResponses
    from agno.os.app import AgentOS
    from agno.os.interfaces.slack import Slack

    researcher = Agent(name="Researcher", model=OpenAIResponses(id="gpt-5.4"))
    writer = Agent(name="Writer", model=OpenAIResponses(id="gpt-5.4"))

    research_flow = Workflow(
        name="Research",
        steps=[
            Step(name="Research", agent=researcher),
            Step(name="Write", agent=writer),
        ],
    )

    agent_os = AgentOS(
        workflows=[research_flow],
        interfaces=[Slack(workflow=research_flow)],
    )
    app = agent_os.get_app()

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

    Each message triggers the workflow. Task cards show step progress as the workflow moves through stages.
  </Tab>
</Tabs>

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

  <Step title="Create Slack App">
    Follow the [setup guide](/agent-os/interfaces/slack/setup) to create your app and get credentials.
  </Step>

  <Step title="Set credentials">
    ```bash theme={null}
    export OPENAI_API_KEY="..."
    export SLACK_TOKEN="xoxb-..."
    export SLACK_SIGNING_SECRET="..."
    ```
  </Step>

  <Step title="Run">
    Run the file from the tab you used:

    <CodeGroup>
      ```bash Agent theme={null}
      python agent.py
      ```

      ```bash Team theme={null}
      python team.py
      ```

      ```bash Workflow theme={null}
      python workflow.py
      ```
    </CodeGroup>
  </Step>
</Steps>

<Info>
  See [more examples](/agent-os/usage/interfaces/slack/basic) including [streaming](/agent-os/usage/interfaces/slack/streaming), [teams](/agent-os/usage/interfaces/slack/support-team), [workflows](/agent-os/usage/interfaces/slack/workflow), and [multiple bots](/agent-os/usage/interfaces/slack/multi-bot).
</Info>

## Multiple bots

Run multiple agents on the same server, each with its own Slack App. Useful when you need separate bots for different functions (support vs. sales) or different workspaces.

<Tabs>
  <Tab title="Agent">
    ```python multi_bot.py theme={null}
    agent_os = AgentOS(
        agents=[ace_agent, dash_agent],
        interfaces=[
            Slack(
                agent=ace_agent,
                prefix="/ace",
                token=getenv("ACE_SLACK_TOKEN"),
                signing_secret=getenv("ACE_SLACK_SIGNING_SECRET"),
            ),
            Slack(
                agent=dash_agent,
                prefix="/dash",
                token=getenv("DASH_SLACK_TOKEN"),
                signing_secret=getenv("DASH_SLACK_SIGNING_SECRET"),
            ),
        ],
    )
    ```
  </Tab>

  <Tab title="Team">
    ```python multi_team.py theme={null}
    agent_os = AgentOS(
        teams=[support_team, research_team],
        interfaces=[
            Slack(
                team=support_team,
                prefix="/support",
                token=getenv("SUPPORT_SLACK_TOKEN"),
                signing_secret=getenv("SUPPORT_SLACK_SIGNING_SECRET"),
            ),
            Slack(
                team=research_team,
                prefix="/research",
                token=getenv("RESEARCH_SLACK_TOKEN"),
                signing_secret=getenv("RESEARCH_SLACK_SIGNING_SECRET"),
            ),
        ],
    )
    ```
  </Tab>

  <Tab title="Workflow">
    ```python multi_workflow.py theme={null}
    agent_os = AgentOS(
        workflows=[review_flow, publish_flow],
        interfaces=[
            Slack(
                workflow=review_flow,
                prefix="/review",
                token=getenv("REVIEW_SLACK_TOKEN"),
                signing_secret=getenv("REVIEW_SLACK_SIGNING_SECRET"),
            ),
            Slack(
                workflow=publish_flow,
                prefix="/publish",
                token=getenv("PUBLISH_SLACK_TOKEN"),
                signing_secret=getenv("PUBLISH_SLACK_SIGNING_SECRET"),
            ),
        ],
    )
    ```
  </Tab>
</Tabs>

<Tip>
  Each interface mounts on its own prefix. Set each Slack App's Request URL accordingly (`/ace/events`, `/dash/events`, etc.).
</Tip>

## Next steps

<CardGroup cols={2}>
  <Card title="Setup Guide" icon="rocket" href="/agent-os/interfaces/slack/setup">
    Create a Slack App from scratch
  </Card>

  <Card title="Features" icon="sparkles" href="/agent-os/interfaces/slack/features">
    Sessions, files, teams, and more
  </Card>

  <Card title="Human-in-the-Loop" icon="shield-check" href="/agent-os/interfaces/slack/hitl">
    Pause for approval before actions
  </Card>

  <Card title="Reference" icon="book" href="/agent-os/interfaces/slack/reference">
    All parameters and endpoints
  </Card>
</CardGroup>
