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.
what you get
- Personal cloud storage. Each teammate gets a private workspace accessible via WebDAV. Mount it in Finder, VS Code, or any file manager. Store notes, uploads, agent outputs — persistent across sessions.
-
Web interface. A browser-based chat at
/chat/<token>/against the same agent. Take the conversation off Slack onto a phone or laptop without losing context. - Google Docs and web page access. The agent can read public web pages and Google Docs you share with it — paste a URL and it fetches the content. Private docs require sharing the link; no OAuth into your Google account.
-
Dashboard. Operators and teammates with dashboard access
see usage, privileges, routing rules, and scheduled tasks at
/dash/. Per-teammate usage tracking shows turns, tokens, and tool calls. - Per-teammate memory. The agent maintains a memory file per teammate — preferences, recurring tasks, prior conclusions. Alice has hers, Bob has his.
- Per-teammate grants. Grant rules decide which actions each teammate can ask the agent to take. Operators set defaults; individuals can have overrides.
-
Linked identities. Channel use needs no sign-in
— workspace membership is the fence. A teammate who signs in
at
/auth/loginwith GitHub, Google, or Discord links that identity to their Slack user, so the same person reaches the same memory and grants from the web chat, a DM, or another channel.
system shape
-
Channel as workspace. A Slack channel maps to an
arizuko group folder. The product ships its base persona and rules in
~/.claude/CLAUDE.md; the channel’s own~/CLAUDE.mdoverrides and extends them — allowed tools, citation rules, refusals, voice for this channel. #eng-support behaves differently from #design from #incidents. The folder mounts at/dav/<channel>/over WebDAV — edit in Finder,rclone, or any editor. -
Per-user memory. Auto-created on a teammate’s
first message as
users/<sub>.mdinside the channel folder — preferences, recurring tasks, prior conclusions. Not shared with the channel; not visible to other teammates. (Per-user secrets — distinct from memory — are spec 7/Y, not yet shipped; folder-scoped secrets work today.) -
Per-user grants. Per-user grant rules decide which
actions each member can ask the agent to take. A teammate’s
sub-folder (e.g.
eng/alice/) inherits from the channel and overrides only what differs — tweak one skill, keep everything else. - Customisable, upgradable in place. Persona, skills, and channel rules are plain Markdown edited via WebDAV or chat. Each release ships migrations the agent applies as a per-group 3-way merge, preserving local edits.
departments: one workspace, many agents
The single-channel setup generalizes to a whole org without new
machinery. Folders nest — acme/eng,
acme/sales, acme/support — and each
Slack channel routes to its department’s folder. Every
department then shapes its own agent: its own persona, its own
skills, its own knowledge, edited by the people who own that lane.
Eng tunes eng’s agent; sales never notices.
The agents still reach each other — through the tree, not a free-for-all. A department agent that gets a question outside its lane escalates to the parent; the parent can delegate specialist work down to another child. Both hops are permission-checked and depth-capped, and the answer comes back in the chat where the question was asked.
#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.
People move as freely as the work does: type @eng in
any chat and it now talks to the eng agent; type
@sales and you’re back. Same thread surface,
different specialist. Isolation stays structural throughout —
each department’s files, memory, and secrets live in its own
folder, and a compromised or misbehaving agent in one folder reaches
nothing in another.
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.
how teammates use it
- AI sidebar pane. Click the AI icon in Slack to open a private pane against the channel agent — suggested-prompt buttons, a per-pane title, and full channel context. Details: slack pane.
-
In a channel. The bot stays quiet by default.
@botmentions fire a turn. With the recommended routing rule (see setup), channel chatter lands in#observe— agent reads for context but doesn’t reply unless called on. - In a thread. Replying to one of the bot’s messages counts as a mention — the agent answers in the same thread, with the thread’s history as context.
- In a DM. Every message is for the bot. No mention needed; replies come back in the same DM.
- File uploads. Drop a file on the bot or in a mentioned thread. The agent reads it via the file-read skill and replies in-thread.
- Reactions. An emoji reaction on a bot message can fire a turn if the route table is set up for it — handy for “thumbs up to confirm” flows.
use cases
support and analysis agent
A support agent answers questions from a knowledge base, cites sources, and escalates when it doesn't know. Useful for internal help desks, customer-facing support channels, or documentation Q&A.
- Searches a
facts/directory of markdown files for answers - Cites the source file and line number
- Says "I don't know" rather than guessing
- Can triage and tag issues, track resolution status
- Escalates to human operators when stuck or when the user requests it
#eng-support
user How do I reset my API key?
bot To reset your API key:
1. Go to Settings → API Keys
2. Click "Regenerate" next to the key you want to reset
3. Copy the new key immediately — it won't be shown again
source: docs/api-keys.md:45
user What about enterprise SSO setup?
bot I don't have documentation on enterprise SSO in my knowledge base.
I've flagged this for the team. Someone will follow up.
trading and market analysis agent
A collaborative research agent that ingests news, tracks market data, and synthesizes analysis. Works best when multiple teammates contribute observations and the agent aggregates them.
- Fetches and summarizes news from URLs you paste
- Tracks observations teammates share over time
- Maintains a shared research diary with timestamped entries
- Cross-references multiple sources to identify patterns
- Produces synthesis reports on request
#market-watch
alice https://example.com/article-about-earnings
bot Summarized: Q2 earnings beat estimates by 12%. Key drivers:
cloud revenue +34% YoY, hardware flat. Guidance raised for Q3.
Logged to research diary.
bob I noticed unusual options activity on XYZ today
bot Noted. Adding to today's observations. You've logged 3 observations
this week on XYZ — want me to compile a summary?
alice Yes, give us the weekly synthesis
bot Weekly synthesis for XYZ:
- Monday: Earnings beat, guidance raised (source: earnings article)
- Wednesday: Insider filing showed CEO sold 10k shares
- Today: Unusual options activity (Bob's observation)
Pattern: Mixed signals. Fundamentals strong but insider selling
and options activity suggest caution.
general team assistant
The default configuration: Q&A, summarization, file processing, and task tracking for a team channel.
data & trust
-
Your server. Conversation history, channel files,
per-user memory, channel-scoped secrets, agent state — all live
under
/srv/data/arizuko_<name>/. Backup is onetarof the directory; no DB dump. - Default outbound paths. Slack for bot traffic; Anthropic for model calls. Any extra agent egress goes through crackbox and only reaches hosts you allowlist per channel.
-
Channel-scoped secrets. API keys for tools the agent
calls live in the
secretstable, AES-256-GCM encrypted at rest underSECRETS_KEY. Folder-scoped values are merged into the container's spawn env; Slack channels get folder secrets only (per-user overlay is 1:1-chat only). - Channel boundary. A teammate in #eng-support sees that channel’s context and their own user area; #design’s files and persona are inaccessible unless granted explicitly.
same shape on Discord
Most of this maps to Discord 1:1 — guild channels behave like
Slack channels (room JID, per-channel CLAUDE.md,
per-user memory), threads behave like Slack threads. Three
deltas worth flagging:
-
No AI sidebar. Discord has no equivalent of
Slack's assistant pane. Suggested-prompt buttons land on
Discord via interaction components (different mechanism, not
yet ported to
discd). DM + mention flow works the same. -
Mentions look different. Slack uses
<@USERID>in body; Discord uses<@123…>. Both are normalized to@<assistant-name>before reaching the agent. -
Routing JIDs differ. Slack:
slack:T1234/channel/C5678. Discord:discord:guild/channel. Same grant primitive, different namespace.
Run the same product over both: install both adapters, route each channel to the same folder, agent doesn't care.
setup
arizuko create acme --product slack-team
cd /srv/data/arizuko_acme
$EDITOR .env # SLACK_BOT_TOKEN, SLACK_SIGNING_SECRET, ANTHROPIC_API_KEY
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
operator setup guide;
the Slack adapter how-to covers
Slack-specific quirks. Per-channel CLAUDE.md override
lives in the channel folder; edit via WebDAV or directly on the
server.
go deeper
- primitives — the same pipeline as every other agent: a channel-scoped folder (Agent), mention Routing, per-teammate State. The platform overview is on the landing
- grants — per-user and per-group action scoping
- slack pane — the AI sidebar surface, pane-open events, suggested prompts
- personas — how voice + skills + frontmatter shape one channel’s agent
- Slack adapter how-to — Slack-specific quirks and verification steps
- auth — OAuth providers, account linking, identity resolution
- webdav — mounting the channel workspace
- crackbox — per-channel egress isolation
- deployment guide — first instance, first channel, first invite