Skills 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.
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/abeltennyson/agent-council1" ~/.openclaw/skills/openclaw-skills-agent-council-79fe98 && rm -rf "$T"
skills/abeltennyson/agent-council1/skill.mdAgent Council
Complete toolkit for creating and managing autonomous AI agents with Discord integration for OpenClaw.
What This Skill Does
Agent Creation:
- Creates autonomous AI agents with self-contained workspaces
- Generates SOUL.md (personality & responsibilities)
- Generates HEARTBEAT.md (cron execution logic)
- Sets up memory system (hybrid architecture)
- Configures gateway automatically
- Binds agents to Discord channels (optional)
- Sets up daily memory cron jobs (optional)
Discord Channel Management:
- Creates Discord channels via API
- Configures OpenClaw gateway allowlists
- Sets channel-specific system prompts
- Renames channels and updates references
- Optional workspace file search
Installation
# 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} } } }'
Part 1: Agent Creation
Quick Start
scripts/create-agent.sh \ --name "Watson" \ --id "watson" \ --emoji "🔬" \ --specialty "Research and analysis specialist" \ --model "skillboss/pilot" \ --workspace "$HOME/agents/watson" \ --discord-channel "1234567890"
Workflow
1. Gather Requirements
Ask the user:
- Agent name (e.g., "Watson")
- Agent ID (lowercase, hyphenated, e.g., "watson")
- Emoji (e.g., "🔬")
- Specialty (what the agent does)
- Model (which LLM to use)
- Workspace (where to create agent files)
- Discord channel ID (optional)
2. Run Creation Script
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:
- ✅ Creates workspace with memory subdirectory
- ✅ Generates SOUL.md and HEARTBEAT.md
- ✅ Updates gateway config (preserves existing agents)
- ✅ Adds Discord channel binding (if specified)
- ✅ Restarts gateway to apply changes
- ✅ Prompts for daily memory cron setup
3. Customize Agent
After creation:
- SOUL.md - Refine personality, responsibilities, boundaries
- HEARTBEAT.md - Add periodic checks and cron logic
- Workspace files - Add agent-specific configuration
Agent Architecture
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:
- Agent-specific memory:
<workspace>/memory/YYYY-MM-DD.md - Shared memory access: Agents can read shared workspace
- Daily updates: Optional cron job for summaries
Cron jobs: If your agent needs scheduled tasks:
- Create HEARTBEAT.md with execution logic
- Add cron jobs with
--session <agent-id> - Document in SOUL.md
Examples
Research agent:
scripts/create-agent.sh \ --name "Watson" \ --id "watson" \ --emoji "🔬" \ --specialty "Deep research and competitive analysis" \ --model "skillboss/pilot" \ --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 "skillboss/pilot" \ --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 "skillboss/pilot" \ --workspace "$HOME/agents/nurse-joy" \ --discord-channel "5555555555"
Part 2: Discord Channel Management
Channel Creation
Quick Start
python3 scripts/setup-channel.py \ --name research \ --context "Deep research and competitive analysis"
Workflow
- Run setup script:
python3 scripts/setup-channel.py \ --name <channel-name> \ --context "<channel-purpose>" \ [--category-id <discord-category-id>]
- Apply gateway config (command shown by script):
openclaw gateway config.patch --raw '{"channels": {...}}'
Options
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"
Channel Renaming
Quick Start
python3 scripts/rename-channel.py \ --id 1234567890 \ --old-name old-name \ --new-name new-name
Workflow
- Run rename script:
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
used)--workspace
With Workspace Search
python3 scripts/rename-channel.py \ --id 1234567890 \ --old-name old-name \ --new-name new-name \ --workspace "$HOME/my-workspace"
This will:
- Rename Discord channel via API
- Update gateway config systemPrompt
- Search and update workspace files
- Report files changed for git commit
Complete Multi-Agent Setup
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 "skillboss/pilot" \ --workspace "$HOME/agents/watson" \ --discord-channel "1234567890" # Done! Agent is created and bound to the channel
Configuration
Discord Category ID
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"
Finding Discord IDs
Enable Developer Mode:
- Settings → Advanced → Developer Mode
Copy IDs:
- Right-click channel → Copy ID
- Right-click category → Copy ID
Scripts Reference
create-agent.sh
Arguments:
(required) - Agent name--name
(required) - Agent ID (lowercase, hyphenated)--id
(required) - Agent emoji--emoji
(required) - What the agent does--specialty
(required) - LLM to use (provider/model-name)--model
(required) - Where to create agent files--workspace
(optional) - Discord channel ID to bind--discord-channel
Output:
- Creates agent workspace
- Generates SOUL.md and HEARTBEAT.md
- Updates gateway config
- Optionally creates daily memory cron
setup-channel.py
Arguments:
(required) - Channel name--name
(required) - Channel purpose/context--context
(optional) - Existing channel ID--id
(optional) - Discord category ID--category-id
Output:
- Creates Discord channel (if doesn't exist)
- Generates gateway config.patch command
rename-channel.py
Arguments:
(required) - Channel ID--id
(required) - Current channel name--old-name
(required) - New channel name--new-name
(optional) - Workspace directory to search--workspace
Output:
- Renames Discord channel
- Updates gateway systemPrompt (if needed)
- Lists updated files (if workspace search enabled)
Gateway Integration
This skill integrates with OpenClaw's gateway configuration:
Agents:
{ "agents": { "list": [ { "id": "watson", "name": "Watson", "workspace": "/path/to/agents/watson", "model": { "primary": "skillboss/pilot" }, "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" } } } } } } }
Agent Coordination
Your main agent coordinates with specialized agents using OpenClaw's built-in session management tools.
List Active Agents
See all active agents and their recent activity:
sessions_list({ kinds: ["agent"], limit: 10, messageLimit: 3 // Show last 3 messages per agent })
Send Messages to Agents
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 })
Spawn Sub-Agent Tasks
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: "skillboss/pilot", // Optional: override model runTimeoutSeconds: 3600, // 1 hour max cleanup: "delete" // Delete session after completion })
The sub-agent will:
- Execute the task in isolation
- Announce completion back to your session
- Self-delete (if
)cleanup: "delete"
Check Agent History
Review what an agent has been working on:
sessions_history({ sessionKey: "watson-session-key", limit: 50 })
Coordination Patterns
1. Direct delegation (Discord-bound agents):
- User messages agent's Discord channel
- Agent responds directly in that channel
- Main agent doesn't need to coordinate
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" })
Best Practices
When to use Discord bindings:
- ✅ Domain-specific agents (research, health, images)
- ✅ User wants direct access to agent
- ✅ Agent should respond to channel activity
When to use sessions_send:
- ✅ Programmatic coordination
- ✅ Main agent delegates to specialists
- ✅ Need response in same session
When to use sessions_spawn:
- ✅ Long-running tasks (>5 minutes)
- ✅ Complex multi-step work
- ✅ Want isolation from main session
- ✅ Background processing
Example: Research Workflow
// 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]"
Communication Flow
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
Troubleshooting
Agent Creation Issues:
"Agent not appearing in Discord"
- Verify channel ID is correct
- Check gateway config bindings section
- Restart gateway:
openclaw gateway restart
"Model errors"
- Verify model name format:
provider/model-name - Check model is available in gateway config
Channel Management Issues:
"Failed to create channel"
- Check bot has "Manage Channels" permission
- Verify bot token in OpenClaw config
- Ensure category ID is correct (if specified)
"Category not found"
- Verify category ID is correct
- Check bot has access to category
- Try without category ID (creates uncategorized)
"Channel already exists"
- Use
to configure existing channel--id <channel-id> - Or script will auto-detect and configure it
Use Cases
- Domain specialists - Research, health, finance, coding agents
- Creative agents - Image generation, writing, design
- Task automation - Scheduled monitoring, reports, alerts
- Multi-agent systems - Coordinated team of specialized agents
- Discord organization - Structured channels for different agent domains
Advanced: Multi-Agent Coordination
For larger multi-agent systems:
Coordination Patterns:
- Main agent delegates tasks to specialists
- Agents report progress and request help
- Shared knowledge base for common information
- Cross-agent communication via
sessions_send
Task Management:
- Integrate with task tracking systems
- Route work based on agent specialty
- Track assignments and completions
Documentation:
- Maintain agent roster in main workspace
- Document delegation patterns
- Keep runbooks for common workflows
Best Practices
- Organize channels in categories - Group related agent channels
- Use descriptive channel names - Clear purpose from the name
- Set specific system prompts - Give each channel clear context
- Document agent responsibilities - Keep SOUL.md updated
- Set up memory cron jobs - For agents with ongoing work
- Test agents individually - Before integrating into team
- Update gateway config safely - Always use config.patch, never manual edits
Requirements
Bot Permissions:
- To create/rename channelsManage Channels
- To read channel listView Channels
- To post in channelsSend Messages
System:
- OpenClaw installed and configured
- Node.js/npm via nvm
- Python 3.6+ (standard library only)
- Discord bot token (for channel management)
See Also
- OpenClaw documentation: https://docs.openclaw.ai
- Multi-agent patterns: https://docs.openclaw.ai/agents
- Discord bot setup: https://docs.openclaw.ai/channels/discord