The root cause was twofold: 1. Raw (unsanitized) agent responses were stored in the conversation history DB. On subsequent calls, these paths were fed back to the agent as context, causing it to reproduce full paths regardless of Discord-side sanitization. 2. repoRoot (workspace_path) was not passed to sanitizeForDiscord, so workspace-specific paths were only partially masked via the home directory fallback. Fix: sanitize the full response once before both sending to Discord and storing in the DB. Pass workspace_path as repoRoot for precise path replacement. Add Windows path tests. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| .claude/commands | ||
| .forgejo | ||
| .obsidian | ||
| docs | ||
| scripts | ||
| src | ||
| tasks | ||
| tests | ||
| .env.example | ||
| .eslintrc.cjs | ||
| .gitignore | ||
| ARCHITECTURE.md | ||
| CLAUDE.md | ||
| disclaw.yaml | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
| vitest.config.mts | ||
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.
Quick Start
npm install
cp .env.example .env # add DISCORD_BOT_TOKEN and DISCORD_GUILD_ID
npm run build
npm run start
Configuration
Edit disclaw.yaml to customise global settings:
| Key | Default | Description |
|---|---|---|
workspaces_root |
~/.disclaw/workspaces |
Directory where agent workspaces are created |
management_channel |
disclaw |
Discord channel name for bot management |
claude_command |
claude |
Path or name of the Claude Code CLI binary |
claude_timeout_seconds |
120 |
Timeout for each Claude CLI invocation |
Secrets go in .env:
DISCORD_BOT_TOKEN=your-token-here
DISCORD_GUILD_ID=your-guild-id # optional, speeds up slash-command registration
CLAUDE_PATH=/path/to/claude # optional, overrides claude_command
Architecture
See ARCHITECTURE.md for a detailed breakdown of the component design.
Development
npm install # install dependencies
npm run build # compile TypeScript
npm test # run unit tests (Vitest)
npm run dev # build + start in one step
Migration bestehender Workspaces
Ab dieser Version werden Workspaces standardmaessig unter ~/.disclaw/workspaces/ angelegt
(konfigurierbar via disclaw.yaml -> workspaces_root).
Bestehende Workspaces unter ./workspaces/ muessen manuell verschoben werden:
mv ./workspaces/* ~/.disclaw/workspaces/
Danach die DB-Eintraege in data/disclaw.db (Tabelle workspaces, Spalte workspace_path) aktualisieren.
CI
Jeder Pull Request gegen main durchläuft automatisch:
npm run build— TypeScript-Kompilierung (Linux + Windows)npm test— Vitest Unit- und Integration-Tests (Linux + Windows)npm run lint— ESLint mitshell:true-Guard
Pipeline-Konfiguration: .forgejo/workflows/ci.yml