Agent Council
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.
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.
Real data. Real impact.
Emerging
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
Complete toolkit for creating and managing autonomous AI agents with Discord integration for OpenClaw.
Agent Creation:
Discord Channel Management:
# Install from ClawHub clawhub install agent-councilOr manual install
cp -r . ~/.openclaw/skills/agent-council/ openclaw gateway config.patch --raw '{ "skills": { "entries": { "agent-council": {"enabled": true} } } }'
scripts/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:
scripts/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:
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"
Image generation agent:
scripts/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:
scripts/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"
python3 scripts/setup-channel.py \ --name research \ --context "Deep research and competitive analysis"
python3 scripts/setup-channel.py \ --name <channel-name> \ --context "<channel-purpose>" \ [--category-id <discord-category-id>]
openclaw gateway config.patch --raw '{"channels": {...}}'
With category:
python3 scripts/setup-channel.py \ --name research \ --context "Deep research and competitive analysis" \ --category-id "1234567890"
Use existing channel:
python3 scripts/setup-channel.py \ --name personal-finance \ --id 1466184336901537897 \ --context "Personal finance management"
python3 scripts/rename-channel.py \ --id 1234567890 \ --old-name old-name \ --new-name new-name
python3 scripts/rename-channel.py \ --id <channel-id> \ --old-name <old-name> \ --new-name <new-name> \ [--workspace <workspace-dir>]
Apply gateway config if systemPrompt needs updating (shown by script)
Commit workspace file changes (if
--workspace used)
python3 scripts/rename-channel.py \ --id 1234567890 \ --old-name old-name \ --new-name new-name \ --workspace "$HOME/my-workspace"
This will:
Full workflow from scratch:
# 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
python3 scripts/setup-channel.py \ --name channel-name \ --context "Purpose" \ --category-id "1234567890"
Option 2: Environment variable
export 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:
{ "agents": { "list": [ { "id": "watson", "name": "Watson", "workspace": "/path/to/agents/watson", "model": { "primary": "anthropic/claude-opus-4-5" }, "identity": { "name": "Watson", "emoji": "š¬" } } ] } }
Bindings:
{ "bindings": [ { "agentId": "watson", "match": { "channel": "discord", "peer": { "kind": "channel", "id": "1234567890" } } } ] }
Channels:
{ "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:
sessions_list({ kinds: ["agent"], limit: 10, messageLimit: 3 // Show last 3 messages per agent })
Direct communication:
sessions_send({ label: "watson", // Agent ID message: "Research the competitive landscape for X" })
Wait for response:
sessions_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:
sessions_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:
sessions_history({ sessionKey: "watson-session-key", limit: 50 })
1. Direct delegation (Discord-bound agents):
2. Programmatic delegation (main agent ā sub-agent):
// 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:
// 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:
// 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:
// 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 replies
Discord-Bound Agents:
User posts in #research channel ā Watson Agent (bound to channel) ā - Sees message directly - Responds in channel - No main agent involvement
Hybrid 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 channel
Agent 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:
No automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
Ā© 2026 Torly.ai. All rights reserved.