arizuko

arizuko › products › Slack team agent

Slack team agent

One agent in a Slack channel, with channel-scoped persona and thread context but per-teammate memory, grants, and a full web workspace. Scale it up and it becomes a tree of them: each department shapes its own agent, and the agents hand work along the tree.

Each teammate gets storage, memory and grants

Personal cloud storage
Each teammate has a private workspace over WebDAV. Mount it with rclone and open it in Finder, VS Code or another file manager. Notes, uploads and agent outputs stay across sessions.
Web chat
A browser chat at /chat/<token>/ talks to the same agent.
Google Docs and web pages
The agent reads public web pages and Google Docs that you share. Paste a URL, and the agent fetches the content. A private document must be shared by link, because the agent has no OAuth access to your Google account.
Dashboard
Operators and teammates with dashboard access see the activity, the grants, the routes and the scheduled tasks at /dash/. Operators also see the usage at /dash/usage/.
Per-teammate memory
The agent keeps one memory file for each teammate, with preferences, recurring tasks and earlier conclusions. Alice has hers, and Bob has his.
Per-teammate grants
Grant rows decide which actions each teammate can ask the agent to do. Operators set the defaults, and each person can have own rows.
Linked identities
A teammate signs in at /auth/login with GitHub, Google or Discord. Linking a Slack identity also requires confirming a pairing link. Pairing expands grants across linked identities; memory files remain keyed by the sender identity.

A Slack channel is a group folder

Channel as workspace
A Slack channel maps to an arizuko group folder. The product supplies a persona and a package manual. The channel can add instructions in SYSTEM.md and set tool grants for its folder. So #eng-support acts differently from #design and #incidents. The folder is available over WebDAV at /dav/<folder>/.
Per-user memory
The users skill keeps one file for each sender in users/ in the channel folder, for example users/tg-123456.md. The prompt names the file of the sender. Per-user secrets are different: they live at /dash/me/secrets, and the broker on the host gives them to tools.
Per-user grants
Grant rows for each user decide which actions that user can ask the agent to do. A child folder such as eng/alice/ has its own files. It copies nothing from the parent folder.
Changes stay in place
The persona, skills and channel rules are Markdown files. Startup installs the core package and arizuko package sync updates selected packages.

One workspace can hold an agent for each department

Folders nest, for example acme/eng, acme/sales and acme/support, and each Slack channel routes to the folder of its department. Each department then shapes its own agent: its persona, its skills and its knowledge, edited by the people who own that work. Eng changes the agent of eng, and sales sees no change.

The agents reach each other through the tree. A department agent that gets a question outside its work escalates to the parent. The parent can delegate work to another child. The platform checks the grant of each call. The tools carry a depth limit of 1, but the caller supplies the depth value, so grants bound the chain and the limit does not.

#sales · routed to acme/sales

  dana   @bot can we promise SSO for the Klein deal by Q3?
  bot    Outside my lane — asking up the tree.
         [sales escalates to acme; acme delegates to acme/eng]
  bot    From eng: OIDC lands mid-Q3, SAML is still in review.
         Safe to promise OIDC-based SSO; caveat SAML.

Type @eng alone in a chat, and the chat talks to the eng agent. Type @sales, and the chat goes back. Each department keeps its files, memory and secrets in its own folder. A turn mounts its own folder and the shared directory /var/lib/share of its world, not the folders of other departments.

A shared thread keeps per-user state apart

#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    Saved the conclusion to your memory file.

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

The thread and channel share instructions. When present, the prompt names the sender's memory file, but all user files live in the same group folder that the agent can access. Do not treat those files as a private boundary between teammates.

Teammates use the pane, channels, threads and DMs

AI pane
Click the AI icon in Slack to open a private pane with the channel agent: suggested-prompt buttons, a title for each pane, and the channel context. Slack pane has the details.
In a channel
The bot is quiet by default. A mention of the bot starts a turn. With the route from the setup guide, the other messages go to #observe: the agent reads them as context and replies only when someone calls it.
In a thread
A reply to a bot message counts as a mention. The agent answers in the same thread, with the history of the thread as context.
In a DM
Every message is for the bot, so no mention is necessary. Replies come back in the same DM.
File uploads
Send a file to the bot or put it in a thread with a mention. The agent reads the file and replies in the thread.
Reactions
A reaction on a bot message arrives as verb=like or verb=dislike. A route that matches the verb starts a turn, for example for a "thumbs up to confirm" flow.

A knowledge-base channel is the support desk product

A channel that answers from a facts/ directory and cites the file is the support desk product in a Slack channel.

Files stay on your server and model calls go to Anthropic

Your server
The channel files, the per-user memory and the agent state are files under /srv/data/arizuko_<name>/groups/. The conversation history and the secrets are on the store server of the instance.
Outbound paths
Slack for the bot, Anthropic for model calls. Other traffic of the agent goes through egress and reaches only the hosts that you allow for each channel.
Channel secrets
The API keys of the tools live in the secrets table, encrypted with AES-256-GCM under SECRETS_KEY. They stay out of the guest unless a shell:env:<KEY> grant names the key. The broker on the host reads the key for each tool call, uses it in the outbound request and removes the exact value from the result.
Channel boundary
A teammate in #eng-support sees the context of that channel and the own user area. The turn does not mount the folder or the persona of #design.

The same shape works on Discord

Most of this page applies to Discord. Server channels act like Slack channels, with a JID for each room, a SYSTEM.md for each channel and per-user memory. Threads act like Slack threads. Three things differ:

No AI pane
Discord has no assistant pane like Slack, and discd shows no suggested prompts. DMs and mentions work the same.
Different mentions
Slack writes <@USERID> in the text, and Discord writes <@123456789>. The adapters replace both with @<assistant-name> before the agent sees the message.
Different JIDs
Slack: slack:T1234/channel/C5678. Discord: discord:<guild_id>/<channel_id>. The grants are the same.

To run the product on both platforms, install both adapters and route each channel to the same folder. The agent does not see a difference.

A package selection installs Slack

arizuko create -i acme --product slack-team
$EDITOR /srv/data/arizuko_acme/.env    # SLACK_BOT_TOKEN, SLACK_SIGNING_SECRET, ANTHROPIC_API_KEY

Start the instance as a service, select catalog:slakd and restart it.

arizuko package add -i acme catalog:slakd
sudo systemctl restart arizuko_acme
arizuko group -i acme add slack:T012ABCD/channel/C0ENGSUP main

The operator setup guide has every step. The Slack how-to covers the Slack details. The SYSTEM.md of each channel is in the channel folder. Edit it over WebDAV or on the server.

Seven pages give the details

primitives
The same pipeline as every agent: a channel folder, mention routing and per-teammate state.
grants
Actions limited for each user and each group.
slack pane
The AI pane, its events and the suggested prompts.
personas
How voice, skills and front matter shape the agent of one channel.
Slack
Slack details and checks.
auth
OAuth providers, linked accounts and identity.
webdav
The channel workspace over WebDAV.