3.9 KiB
3.9 KiB
DisClaw
DisClaw is a Discord-bot-powered multi-agent workspace manager built on Claude Code. It turns a Discord server into a multi-agent development environment where each channel maps to a local workspace folder with its own Claude Code agent identity.
How It Works
- A Node.js Discord bot receives messages and slash commands
- Messages in agent channels are routed to the Claude Code CLI
- Each agent workspace has its own
CLAUDE.mdthat defines the agent's identity - Claude Code reads the workspace's
CLAUDE.mdautomatically -- no API key needed - Responses are sent back to the Discord channel
Architecture
Discord Server
|
v
Discord Bot (Node.js, discord.js v14)
|
v
Message Router (channel_id -> workspace mapping via SQLite)
|
+---> Management Channel (#disclaw) ---> /new-agent command handler
|
+---> Agent Channel ---> Claude Code CLI (spawned as child process)
|
v
Workspace Directory
- CLAUDE.md (agent identity)
- agent.yaml (DisClaw metadata)
- .claude/ (Claude Code config)
- ... (agent work files)
Project Structure
disclaw/
src/
index.ts Entry point -- load config, init DB, start bot
bot.ts Discord bot setup and event handlers
router.ts Message router -- channel_id to agent dispatch
commands/
new-agent.ts /new-agent slash command handler
agent/
runner.ts Spawns claude CLI as child process
identity.ts Creates/loads agent.yaml, CLAUDE.md, .claude/ config
db/
database.ts SQLite connection and queries (better-sqlite3)
config/
loader.ts Loads .env and disclaw.yaml configuration
workspaces/ One subdirectory per agent (created dynamically)
agent-name/
CLAUDE.md Agent identity (read by Claude Code automatically)
agent.yaml DisClaw routing metadata (name, role, channel_id)
.claude/
commands/ Agent-specific custom slash commands
settings.json Agent-specific Claude Code settings
.claude/
commands/
setup.md /setup -- guided first-time setup
new-agent.md /new-agent -- create agent from CLI
disclaw.yaml Global configuration
.env DISCORD_BOT_TOKEN, DISCORD_GUILD_ID, CLAUDE_PATH
package.json
tsconfig.json
ARCHITECTURE.md Detailed architecture documentation
Key Design Decisions
- Claude Code CLI as engine: No API key needed. Works with Claude Pro/Max subscription.
The
claude -p "prompt" --output-format jsoncommand is spawned per message. - CLAUDE.md as identity: Each workspace's CLAUDE.md defines the agent's personality, role, and instructions. Claude Code reads it automatically.
- SQLite for state: Channel-to-workspace mappings and conversation history are stored in SQLite via better-sqlite3. Synchronous API matches the message handler model.
- Single process: One Node.js bot process manages all agents. Claude CLI processes are spawned on demand and terminate after each response.
Custom Commands
/setup-- Guided setup walkthrough (prerequisites, Discord bot creation, config)/new-agent-- Create a new agent workspace from the CLI (without Discord)
Development
npm install # Install dependencies
npm run build # Compile TypeScript
npm run start # Start the bot
npm run dev # Build and start in one step
Configuration
disclaw.yaml-- Global settings (workspace root, management channel, claude command).env-- Secrets (Discord bot token, optional guild ID, optional claude path)- Per-workspace
agent.yaml-- Agent routing metadata - Per-workspace
CLAUDE.md-- Agent identity and instructions