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/loginwith 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.mdand 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
usersskill keeps one file for each sender inusers/in the channel folder, for exampleusers/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 syncupdates 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=likeorverb=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
secretstable, encrypted with AES-256-GCM underSECRETS_KEY. They stay out of the guest unless ashell: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
discdshows 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.