arizuko › products › Slack team agent

Slack team agent

One agent in your team’s Slack, but not one shared user. arizuko keeps the channel’s persona and thread context shared while each teammate gets their own memory, grant rules, and private web chat. The whole system runs on your server; default outbound traffic is the chat platform and the Anthropic API.

why existing options miss

Most team Slack bots collapse everyone into one prompt or push everyone back into separate per-seat chat apps. Neither is what you want once a team starts depending on an agent.

system shape

example: shared thread, user-scoped state

#eng-support · thread

  alice  @bot summarize the fix from the cold-start runbook for this thread
  bot    Bundle growth after deploy is coming from broad SDK imports.
         Recommended: switch back to per-service imports.
         source: /docs/runbooks/lambda-cold-start.md:67

  bob    @bot save that conclusion to my notes
  bot    Wrote notes/lambda-cold-start.md in your user area.

  alice  @bot remember: prefer per-service imports for any new lambda
  bot    Saved to your memory.

Same thread, same channel CLAUDE.md, different resolved user state. The answer is visible to the team; Bob’s write lands in Bob’s user area; Alice’s preference lands in her memory file. Shared deliberation, user-scoped state. None of Bob’s notes are visible to Alice; none of either user’s memory leaks into the channel’s shared context.

data & trust

setup

arizuko create acme
cd /srv/data/arizuko_acme
$EDITOR .env             # set Slack/Discord/Telegram tokens; enable the adapters you want
arizuko run acme

# in Slack:
#   create the Slack App, set bot token + signing secret in .env
#   subscribe events to https://<your-host>/slack/events
#   invite the bot to a channel; teammates sign in via OAuth at /auth/login
#   linked identities resolve to the same user record; per-user state goes live

Full step-by-step is in the deployment guide. Per-channel CLAUDE.md override lives in the channel folder; edit via WebDAV or directly on the server. Channel-scoped API keys live in the encrypted secrets table; the egress proxy substitutes them into outbound requests so the container itself never holds them.

go deeper