Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Complete toolkit for creating autonomous AI agents and managing Discord channels for OpenClaw. Use when setting up multi-agent systems, creating new agents, or managing Discord channel organization.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | 219% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 179% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 223% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 169% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 363% | 0% |
Complete toolkit for creating and managing autonomous AI agents with Discord integration for OpenClaw.
Agent Creation:
Discord Channel Management:
bash# Install from ClawHub clawhub install agent-council # Or manual install cp -r . ~/.openclaw/skills/agent-council/ openclaw gateway config.patch --raw '{ "skills": { "entries": { "agent-council": {"enabled": true} } } }'
bashscripts/create-agent.sh \ --name "Watson" \ --id "watson" \ --emoji "🔬" \ --specialty "Research and analysis specialist" \ --model "anthropic/claude-opus-4-5" \ --workspace "$HOME/agents/watson" \ --discord-channel "1234567890"
Ask the user:
bashscripts/create-agent.sh \ --name "Agent Name" \ --id "agent-id" \ --emoji "🤖" \ --specialty "What this agent does" \ --model "provider/model-name" \ --workspace "/path/to/workspace" \ --discord-channel "1234567890" # Optional
The script automatically:
After creation:
Self-contained structure:
agents/
├── watson/
│ ├── SOUL.md # Personality and responsibilities
│ ├── HEARTBEAT.md # Cron execution logic
│ ├── memory/ # Agent-specific memory
│ │ ├── 2026-02-01.md # Daily memory logs
│ │ └── 2026-02-02.md
│ └── .openclaw/
│ └── skills/ # Agent-specific skills (optional)Memory system:
<workspace>/memory/YYYY-MM-DD.mdCron jobs: If your agent needs scheduled tasks:
--session <agent-id>Research agent:
bashscripts/create-agent.sh \ --name "Watson" \ --id "watson" \ --emoji "🔬" \ --specialty "Deep research and competitive analysis" \ --model "anthropic/claude-opus-4-5" \ --workspace "$HOME/agents/watson" \ --discord-channel "1234567890"
Image generation agent:
bashscripts/create-agent.sh \ --name "Picasso" \ --id "picasso" \ --emoji "🎨" \ --specialty "Image generation and editing specialist" \ --model "google/gemini-3-flash-preview" \ --workspace "$HOME/agents/picasso" \ --discord-channel "9876543210"
Health tracking agent:
bashscripts/create-agent.sh \ --name "Nurse Joy" \ --id "nurse-joy" \ --emoji "💊" \ --specialty "Health tracking and wellness monitoring" \ --model "anthropic/claude-opus-4-5" \ --workspace "$HOME/agents/nurse-joy" \ --discord-channel "5555555555"
bashpython3 scripts/setup-channel.py \ --name research \ --context "Deep research and competitive analysis"
bashpython3 scripts/setup-channel.py \ --name <channel-name> \ --context "<channel-purpose>" \ [--category-id <discord-category-id>]
bashopenclaw gateway config.patch --raw '{"channels": {...}}'
With category:
bashpython3 scripts/setup-channel.py \ --name research \ --context "Deep research and competitive analysis" \ --category-id "1234567890"
Use existing channel:
bashpython3 scripts/setup-channel.py \ --name personal-finance \ --id 1466184336901537897 \ --context "Personal finance management"
bashpython3 scripts/rename-channel.py \ --id 1234567890 \ --old-name old-name \ --new-name new-name
bashpython3 scripts/rename-channel.py \ --id <channel-id> \ --old-name <old-name> \ --new-name <new-name> \ [--workspace <workspace-dir>]
--workspace used)bashpython3 scripts/rename-channel.py \ --id 1234567890 \ --old-name old-name \ --new-name new-name \ --workspace "$HOME/my-workspace"
This will:
Full workflow from scratch:
bash# 1. Create Discord channel python3 scripts/setup-channel.py \ --name research \ --context "Deep research and competitive analysis" \ --category-id "1234567890" # (Note the channel ID from output) # 2. Apply gateway config for channel openclaw gateway config.patch --raw '{"channels": {...}}' # 3. Create agent bound to that channel scripts/create-agent.sh \ --name "Watson" \ --id "watson" \ --emoji "🔬" \ --specialty "Deep research and competitive analysis" \ --model "anthropic/claude-opus-4-5" \ --workspace "$HOME/agents/watson" \ --discord-channel "1234567890" # Done! Agent is created and bound to the channel
Option 1: Command line
bashpython3 scripts/setup-channel.py \ --name channel-name \ --context "Purpose" \ --category-id "1234567890"
Option 2: Environment variable
bashexport DISCORD_CATEGORY_ID="1234567890" python3 scripts/setup-channel.py --name channel-name --context "Purpose"
Enable Developer Mode:
Copy IDs:
Arguments:
--name (required) - Agent name--id (required) - Agent ID (lowercase, hyphenated)--emoji (required) - Agent emoji--specialty (required) - What the agent does--model (required) - LLM to use (provider/model-name)--workspace (required) - Where to create agent files--discord-channel (optional) - Discord channel ID to bindOutput:
Arguments:
--name (required) - Channel name--context (required) - Channel purpose/context--id (optional) - Existing channel ID--category-id (optional) - Discord category IDOutput:
Arguments:
--id (required) - Channel ID--old-name (required) - Current channel name--new-name (required) - New channel name--workspace (optional) - Workspace directory to searchOutput:
This skill integrates with OpenClaw's gateway configuration:
Agents:
json{ "agents": { "list": [ { "id": "watson", "name": "Watson", "workspace": "/path/to/agents/watson", "model": { "primary": "anthropic/claude-opus-4-5" }, "identity": { "name": "Watson", "emoji": "🔬" } } ] } }
Bindings:
json{ "bindings": [ { "agentId": "watson", "match": { "channel": "discord", "peer": { "kind": "channel", "id": "1234567890" } } } ] }
Channels:
json{ "channels": { "discord": { "guilds": { "YOUR_GUILD_ID": { "channels": { "1234567890": { "allow": true, "requireMention": false, "systemPrompt": "Deep research and competitive analysis" } } } } } } }
Your main agent coordinates with specialized agents using OpenClaw's built-in session management tools.
See all active agents and their recent activity:
typescriptsessions_list({ kinds: ["agent"], limit: 10, messageLimit: 3 // Show last 3 messages per agent })
Direct communication:
typescriptsessions_send({ label: "watson", // Agent ID message: "Research the competitive landscape for X" })
Wait for response:
typescriptsessions_send({ label: "watson", message: "What did you find about X?", timeoutSeconds: 300 // Wait up to 5 minutes })
For complex work, spawn a sub-agent in an isolated session:
typescriptsessions_spawn({ agentId: "watson", // Optional: use specific agent task: "Research competitive landscape for X and write a report", model: "anthropic/claude-opus-4-5", // Optional: override model runTimeoutSeconds: 3600, // 1 hour max cleanup: "delete" // Delete session after completion })
The sub-agent will:
cleanup: "delete")Review what an agent has been working on:
typescriptsessions_history({ sessionKey: "watson-session-key", limit: 50 })
1. Direct delegation (Discord-bound agents):
2. Programmatic delegation (main agent → sub-agent):
typescript// Main agent delegates task sessions_send({ label: "watson", message: "Research X and update memory/research-X.md" }) // Watson works independently, updates files // Main agent checks later or Watson reports back
3. Spawn for complex tasks:
typescript// For longer-running, isolated work sessions_spawn({ agentId: "watson", task: "Deep dive: analyze competitors A, B, C. Write report to reports/competitors.md", runTimeoutSeconds: 7200, cleanup: "keep" // Keep session for review })
4. Agent-to-agent communication: Agents can send messages to each other:
typescript// In Watson's context sessions_send({ label: "picasso", message: "Create an infographic from data in reports/research.md" })
When to use Discord bindings:
When to use sessions_send:
When to use sessions_spawn:
typescript// Main agent receives request: "Research competitor X" // 1. Check if Watson is active const agents = sessions_list({ kinds: ["agent"] }) // 2. Delegate to Watson sessions_send({ label: "watson", message: "Research competitor X: products, pricing, market position. Write findings to memory/research-X.md" }) // 3. Watson works independently: // - Searches web // - Analyzes data // - Updates memory file // - Reports back when done // 4. Main agent retrieves results const results = Read("agents/watson/memory/research-X.md") // 5. Share with user "Research complete! Watson found: [summary]"
Main Agent (You) ↔ Specialized Agents:
User Request
↓
Main Agent (Claire)
↓
sessions_send("watson", "Research X")
↓
Watson Agent
↓
- Uses web_search
- Uses web_fetch
- Updates memory files
↓
Responds to main session
↓
Main Agent synthesizes and repliesDiscord-Bound Agents:
User posts in #research channel
↓
Watson Agent (bound to channel)
↓
- Sees message directly
- Responds in channel
- No main agent involvementHybrid Approach:
User: "Research X" (main channel)
↓
Main Agent delegates to Watson
↓
Watson researches and reports back
↓
Main Agent: "Done! Watson found..."
↓
User: "Show me more details"
↓
Main Agent: "@watson post your full findings in #research"
↓
Watson posts detailed report in #research channelAgent Creation Issues:
"Agent not appearing in Discord"
openclaw gateway restart"Model errors"
provider/model-nameChannel Management Issues:
"Failed to create channel"
"Category not found"
"Channel already exists"
--id <channel-id> to configure existing channelFor larger multi-agent systems:
Coordination Patterns:
sessions_sendTask Management:
Documentation:
Bot Permissions:
Manage Channels - To create/rename channelsView Channels - To read channel listSend Messages - To post in channelsSystem:
Other measured skills in the registry, with their headline benchmark lift.