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

# Slack

> Deploy agents in Slack with out of the box context management, human in the loop approvals, and file handling.

Slack is where your team already gets work done. Put your agent in the same place and it picks up all that context, joining conversations, remembering what was said, and replying like a teammate who has been following along.

<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-studio-tools-doc/deBcuBANRxcagGon/videos/slack-coda-demo.mp4?fit=max&auto=format&n=deBcuBANRxcagGon&q=85&s=008b40a9f8cc3bf1f582899ff8728fae" data-path="videos/slack-coda-demo.mp4" />
</Frame>

The Slack interface solves the problems that appear when an agent moves from a script into a shared workspace:

1. **Context management:** History, memory, and user identity tracked across threads and DMs
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

## 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="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 SLACK_TOKEN="xoxb-..."
    export SLACK_SIGNING_SECRET="..."
    ```
  </Step>

  <Step title="Run">
    ```bash theme={null}
    python agent.py
    ```
  </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>
