OpenClaw skill
agent-council
An OpenClaw skill named agent-council that enables the primary agent to summon a council of specialized sub-agents for deliberating on tasks. The council members discuss the query from unique perspectives, propose solutions, and vote to select the best response. The skill outputs the winning proposal with supporting rationale from the council.
Files
Review the files below to add this skill to your agents.
Security notice: review the SKILL.md file and repository content first before using any third-party skill.
SKILL.md content
---
name: agent-council
description: 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.
---
# Agent 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
```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}
}
}
}'
```
## Part 1: Agent Creation
### Quick Start
```bash
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"
```
### 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
```bash
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:
1. Create HEARTBEAT.md with execution logic
2. Add cron jobs with `--session <agent-id>`
3. Document in SOUL.md
### Examples
**Research agent:**
```bash
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:**
```bash
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:**
```bash
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"
```
## Part 2: Discord Channel Management
### Channel Creation
#### Quick Start
```bash
python3 scripts/setup-channel.py \
--name research \
--context "Deep research and competitive analysis"
```
#### Workflow
1. Run setup script:
```bash
python3 scripts/setup-channel.py \
--name <channel-name> \
--context "<channel-purpose>" \
[--category-id <discord-category-id>]
```
2. Apply gateway config (command shown by script):
```bash
openclaw gateway config.patch --raw '{"channels": {...}}'
```
#### Options
**With category:**
```bash
python3 scripts/setup-channel.py \
--name research \
--context "Deep research and competitive analysis" \
--category-id "1234567890"
```
**Use existing channel:**
```bash
python3 scripts/setup-channel.py \
--name personal-finance \
--id 1466184336901537897 \
--context "Personal finance management"
```
### Channel Renaming
#### Quick Start
```bash
python3 scripts/rename-channel.py \
--id 1234567890 \
--old-name old-name \
--new-name new-name
```
#### Workflow
1. Run rename script:
```bash
python3 scripts/rename-channel.py \
--id <channel-id> \
--old-name <old-name> \
--new-name <new-name> \
[--workspace <workspace-dir>]
```
2. Apply gateway config if systemPrompt needs updating (shown by script)
3. Commit workspace file changes (if `--workspace` used)
#### With Workspace Search
```bash
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:**
```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
```
## Configuration
### Discord Category ID
**Option 1: Command line**
```bash
python3 scripts/setup-channel.py \
--name channel-name \
--context "Purpose" \
--category-id "1234567890"
```
**Option 2: Environment variable**
```bash
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:**
- `--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 bind
**Output:**
- Creates agent workspace
- Generates SOUL.md and HEARTBEAT.md
- Updates gateway config
- Optionally creates daily memory cron
### setup-channel.py
**Arguments:**
- `--name` (required) - Channel name
- `--context` (required) - Channel purpose/context
- `--id` (optional) - Existing channel ID
- `--category-id` (optional) - Discord category ID
**Output:**
- Creates Discord channel (if doesn't exist)
- Generates gateway config.patch command
### rename-channel.py
**Arguments:**
- `--id` (required) - Channel ID
- `--old-name` (required) - Current channel name
- `--new-name` (required) - New channel name
- `--workspace` (optional) - Workspace directory to search
**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:**
```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"
}
}
}
}
}
}
}
```
## 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:
```typescript
sessions_list({
kinds: ["agent"],
limit: 10,
messageLimit: 3 // Show last 3 messages per agent
})
```
### Send Messages to Agents
**Direct communication:**
```typescript
sessions_send({
label: "watson", // Agent ID
message: "Research the competitive landscape for X"
})
```
**Wait for response:**
```typescript
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:
```typescript
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:
1. Execute the task in isolation
2. Announce completion back to your session
3. Self-delete (if `cleanup: "delete"`)
### Check Agent History
Review what an agent has been working on:
```typescript
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):**
```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"
})
```
### 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
```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]"
```
### 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 `--id <channel-id>` to configure existing channel
- 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
1. **Organize channels in categories** - Group related agent channels
2. **Use descriptive channel names** - Clear purpose from the name
3. **Set specific system prompts** - Give each channel clear context
4. **Document agent responsibilities** - Keep SOUL.md updated
5. **Set up memory cron jobs** - For agents with ongoing work
6. **Test agents individually** - Before integrating into team
7. **Update gateway config safely** - Always use config.patch, never manual edits
## Requirements
**Bot Permissions:**
- `Manage Channels` - To create/rename channels
- `View Channels` - To read channel list
- `Send Messages` - To post in channels
**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
How this skill works
- Instantiates each agent using OpenClaw's agent framework with the provided config
- Runs a deliberation loop for the specified number of rounds
- In each round of the loop, provides the current context (question + all previous messages) to every agent
- In each round, each agent generates a response proposing their view or updating based on others
- In each round, appends all responses to the shared context
- In the final voting round, prompts agents to vote for the best proposal (their own or others')
- Tallies votes and selects the proposal with the most votes (ties broken by first agent)
- Outputs the winning decision and the full conversation log
When to use it
- When assembling a council of agents with specified roles to deliberate on a query
- When facilitating rounds of discussion, rebuttals, and voting among agents to reach consensus
- When requiring a structured multi-agent process to generate a final council decision on complex topics
Best practices
- Start with 3-5 council members to balance diversity and efficiency
- Use diverse models across council members for varied viewpoints
- Monitor token consumption for large councils
- Define council members with distinct roles covering different perspectives
- Set voting_threshold appropriately for the use case
- Increase max_rounds for contentious topics
- Always review the final vote and rationale before acting
- Ensure each council member has a unique name
- Enable logging to capture full debate transcripts when needed
Example use cases
- Collaborative deliberation on complex problems: Assembles a council of AI agents with specific roles to discuss a given topic, propose solutions, vote, and reach a consensus decision.
- Multi-agent decision making for strategic tasks: Enables specialized agents (e.g., CEO, CTO, CFO) to debate and decide on business or technical strategies like product launches.
- Diverse perspective analysis: Leverages agents with unique expertise to provide multiple viewpoints, deliberate, and synthesize a final output on challenging topics.
FAQs
What is the Agent Council skill?
A skill that orchestrates a council of LLM agents to deliberate and vote on the best course of action for a given query.
What inputs does the Agent Council skill require?
query (string): The question or task for the council to deliberate on. agents (array): List of agent configurations, each with name, instructions, model.
What are the agent configurations in the Agent Council skill?
Each agent has: name (string), instructions (string): Role and behavior, model (string, default 'gpt-4o-mini').
What outputs does the Agent Council skill produce?
decision (string): The final council decision. reasoning (string): Summary of the deliberation process. votes (array): Each agent's vote and rationale.
What is the default model for council agents?
gpt-4o-mini
How does the Agent Council skill deliberation process work?
1. Moderator poses the query. 2. Agents propose solutions. 3. Agents score and critique proposals. 4. Agents vote on the best proposal. 5. Moderator synthesizes the final decision.
What example council members are provided?
Advocate, Devil's Advocate, Researcher, Synthesizer.
More similar skills to explore
- achurch
An OpenClaw skill for church administration that handles member management, event scheduling, sermon retrieval, and donation processing. It provides tools to list members, add new members, schedule events, fetch sermons, and record donations.
- agent-config
An OpenClaw skill that enables agents to manage their configuration by loading from files, environment variables, or remote sources. It supports retrieving, setting, and validating configuration values. The skill allows for hot-reloading of configurations.
- agent-identity-kit
An OpenClaw skill that equips agents with tools to craft, manage, and evolve digital identities, including generating personas, bios, avatars, and communication styles. It supports creating detailed agent personas with name, background, goals, personality traits; crafting bios for specific platforms; designing avatars; tuning voice and style; and adapting identities to new contexts.
- agenticflow-skill
An OpenClaw skill that provides tools for interacting with Agentic Flow. The tools enable agents to create agentic flows with defined tasks, execute existing flows, and retrieve flow status and outputs.
- agentlens
AgentLens is an OpenClaw skill that enables agents to inspect the internal cognition and actions of other agents. It provides visibility into reasoning traces (thoughts), tool calls and arguments, retrieved memories, and response generation. The skill supports analysis in multi-agent conversations via the "inspect" action targeting a specific agent.
- agentskills-io
An OpenClaw skill that integrates agents with the AgentSkills.io platform. It enables agents to search and browse available skills, install them directly into the agent's environment, and manage installed skills including updates and uninstallations.