getting started

← hub

what this is

arizuko is a multitenant Claude agent router. Channel adapters (telegram, discord, web, …) push messages over HTTP; the router routes each message to a per-group containerized Claude agent and streams the reply back.

One deployment, many groups, many channels. The agent in each group is a Claude Code CLI process — full tool use, MCP, skills, hooks.

what you can do here

glossary

group
A workspace. Files, diary, skills, and one agent live here.
agent
The Claude Code instance for a group. Runs in a Docker container, started on demand.
channel
Where messages flow in and out: telegram, discord, web, email, and so on. Adapters are independent daemons.
skill
A markdown file the agent loads on start. Encodes one capability or convention.
slink
A shareable chat link bound to a group, and the public HTTP protocol behind it. Anyone with the URL can talk to the agent — no login.

deploy guides

audit mode (mute outbound)

Two instance-wide env vars on the gateway let you run a group or a whole platform in shadow mode: the agent keeps producing turns, every outbound is persisted to the messages table, but nothing is forwarded to the channel adapter. Useful for dry-running a new persona, a routing change, or a fresh group before unmuting.

SEND_DISABLED_GROUPS
CSV of folder names. Outbound from any matching group is recorded but not sent. Example: SEND_DISABLED_GROUPS=atlas,research.
SEND_DISABLED_CHANNELS
CSV of platform prefixes (the part before : in a JID). Mutes outbound for an entire platform across all groups. Example: SEND_DISABLED_CHANNELS=discord.

Behaviour:

Recipe — deploy a new Discord group in shadow mode:

# 1. enable the Discord adapter (DISCORD_TOKEN etc.) so messages flow inbound
# 2. add the mute knob to the instance .env
echo 'SEND_DISABLED_GROUPS=atlas' >> /srv/data/arizuko_<name>/.env

# 3. restart the instance so gateway picks up the new env
sudo systemctl restart arizuko_<name>

# 4. send a test message; confirm a row lands in messages without
#    anything appearing in the Discord channel
sqlite3 /srv/data/arizuko_<name>/store/messages.db \
  "SELECT id, sender, routed_to, status FROM messages \
   WHERE bot_msg=1 ORDER BY timestamp DESC LIMIT 5;"

Source — gateway enforcement: gateway/gateway.go:821 (group mute), gateway/gateway.go:1141 (platform mute). Config parsing: core/config.go:140. Test that locks the behaviour: gateway/gateway_test.go:1052 (TestMakeOutputCallback_MutedGroup).

more

concepts — how arizuko thinks, primitive by primitive.