mcpField
A
agent-council

agent-council

github.com/itsahedgeAgent workflows171 installsUpdated 35w ago
Repository

About agent-council

Agent Council is a skill for creating and managing autonomous AI agents through OpenClaw, with Discord integration. Scripts handle workspaces, agent registration, channel routing, category ownership, authentication profiles, and optional cron jobs.

Key features

  1. 01Create and remove agent workspaces
  2. 02Register agents with OpenClaw
  3. 03Create or bind Discord channels
  4. 04Manage Discord category ownership
  5. 05Copy authentication profiles
  6. 06Configure optional cron jobs

Use cases

  1. 01Set up an agent with a new Discord channel
  2. 02Bind an existing agent to more channels
  3. 03Assign a Discord category to an agent
  4. 04Remove an agent and optionally its workspace or channel

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/itsahedge/agent-council --skill agent-council

After installing, type/agent-councilin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

.gitignore
LICENSE
README.md
examples/
category-owners.example.json
cron-jobs-principles.md
channels-cache.example.json
scripts/
claim-category.sh
bind-channel.sh
list-agents.sh
list-categories.sh
remove-agent.sh
sync-category.sh
create-agent.sh

Details

From the project README

Agent Council

Create and manage autonomous AI agents with full Discord integration.

Updated for OpenClaw 2026.3.x — uses native CLI commands (openclaw agents add/delete/bind/unbind/bindings/set-identity) where possible, with config patching only for Discord channel-specific routing (which the CLI doesn't support yet).

What It Does

  1. Creates agent workspace (SOUL.md, HEARTBEAT.md, IDENTITY.md, memory/)
  2. Registers agent via openclaw agents add
  3. Creates Discord channel (optional) with topic
  4. Binds agent to channel (routing via config patch)
  5. Copies auth profiles (SecretRef-backed, from default agent)
  6. Sets up cron jobs (optional daily memory)

CLI Quick Reference

These native commands are available without the skill:

# List agents and bindings
openclaw agents list
openclaw agents bindings

# Add/remove agents
openclaw agents add <id> --workspace <dir> --model <model> --non-interactive
openclaw agents delete <id>

# Channel-level routing (telegram, discord — not per-Discord-channel)
openclaw agents bind --agent <id> --bind discord
openclaw agents unbind --agent <id> --bind discord

# Identity
openclaw agents set-identity --agent <id> --name "Name" --emoji "🔬"

Note: openclaw agents bind works at the channel level (discord, telegram), not per-Discord-channel-ID. For routing specific Discord channels to specific agents, the skill's config patching is still needed.

Scripts

ScriptPurpose
create-agent.shFull agent setup with Discord integration
bind-channel.shBind existing agent to additional Discord channel
list-agents.shShow all agents and their Discord bindings
remove-agent.shRemove agent (config, crons, optionally workspace/channel)
claim-category.shClaim a Discord category for an agent
sync-category.shSync all channels in a category to its owner
list-categories.shShow category ownership

Usage

Create Agent with New Discord Channel
export DISCORD_GUILD_ID="123456789012345678"

~/.openclaw/skills/agent-council/scripts/create-agent.sh \
  --id watson \
  --name "Watson" \
  --emoji "🔬" \
  --specialty "Deep research and competitive analysis" \
  --create "research" \
  --category "987654321098765432"

This will:

  • Create <workspace>/agents/watson/ with SOUL.md, HEARTBEAT.md, IDENTITY.md
  • Register agent via openclaw agents add
  • Create Discord #research channel in the specified category
  • Bind watson → #research (config patch for channel-specific routing)
  • Add #research to guild allowlist
  • Copy auth profiles from default agent (SecretRef-backed)
  • Create daily memory cron at 11:00 PM (use --no-cron to skip)
Create Agent with Existing Channel
./create-agent.sh \
  --id sage \
  --name "Sage" \
  --emoji "💰" \
  --specialty "Personal finance" \
  --channel "234567890123456789"
Bind Agent to Additional Channel
./bind-channel.sh --agent forge --channel "345678901234567890"
./bind-channel.sh --agent forge --create "defi" --category "456789012345678901"
List Current Setup
./list-agents.sh
Remove Agent
# Remove from config only (keeps workspace)
./remove-agent.sh --id test-agent

# Full removal (workspace trashed, channels deleted)
./remove-agent.sh --id test-agent --delete-workspace --delete-channel
Category Ownership
./claim-category.sh --agent chief --category 123456789012345678 --sync
./list-categories.sh
./sync-category.sh --category 123456789012345678

Agent Cron Jobs

Delivery Pattern

Option A: --announce (preferred for simple jobs)

openclaw cron add \
  --name "My Task" \
  --agent myagent \
  --cron "0 9 * * *" \
  --session isolated \
  --model sonnet \
  --announce --channel discord --to "channel:YOUR_CHANNEL_ID" \
  --message "Do the task."

Option B: delivery: none + message tool (for custom formatting)

openclaw cron add \
  --name "My Task" \
  --agent myagent \
  --cron "0 9 * * *" \
  --session isolated \
  --model sonnet \
  --message "Do the task. Then send the result to Discord using the message tool (action=send, channel=discord, target=channel:YOUR_CHANNEL_ID)."

⚠️ Common mistake: --channel expects the platform name (discord), --to expects the destination (channel:ID).

Heartbeat vs Cron
  • Heartbeat: Multiple checks batched, needs conversation context, timing can drift
  • Cron: Exact timing, task isolation, different model, one-shot reminders
Key Rules
  • delivery.mode = "none" when the payload handles its own delivery via message tool
  • Set timeoutSeconds to 90-120 for tool-using tasks (default 60 is often too tight)
  • Always check for duplicate cron names before creating: cron action=list

Options Reference

create-agent.sh
OptionRequiredDescription
--id✓Agent ID (lowercase, no spaces)
--name✓Display name
--emoji✓Agent emoji
--specialty✓What the agent does
--modelModel (default: claude-sonnet-4-6)
--channelExisting Discord channel ID
--createCreate new channel with this name
--categoryCategory ID for new channel
--topicChannel topic (auto-generated if not set)
--cronDaily memory cron time (default: 23:00)
--no-cronSkip daily memory cron setup
--tzTimezone (default: America/New_York)
--own-categoryClaim a Discord category (auto-binds all channels)

Environment Variables

VariableRequiredDescription
DISCORD_GUILD_IDFor --createYour Discord server ID
AGENT_WORKSPACE_ROOTNoAgent workspace root (default: ~/workspace/agents)

Comments

Markdown supported