zoobot-admin
Skill1 starsChanged 7 months agoMITView on GitHub
Manage and operate the ZooBot system itself — agents, teams, settings, queue, tasks, daemon lifecycle, and source code. Use when the agent needs to: list/add/remove/update agents or teams, check queue status, view logs, start/stop/restart ZooBot, change settings (provider, model, channels), send messages to the queue, manage tasks, retry dead-letter messages, view recent responses, modify ZooBot source code or configuration, or perform any administrative operation on the ZooBot platform. Triggers: 'manage zoobot', 'add an agent', 'remove a team', 'check queue', 'view logs', 'restart zoobot', 'change provider', 'update settings', 'create a task', 'modify zoobot code'.
- Sends data out
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 1 is distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 177
When the API server is not running, edit ~/.zoobot/settings.json directly.
- Very specific: line 194
After editing settings.json, run zoobot restart to pick up changes.
- Very specific: line 198
When modifying ZooBot's own code (features, bug fixes, new routes, etc.):
- Distinctive: line 210
After modifying TypeScript source, rebuild:
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
ZooBot Admin
Operate and manage the ZooBot multi-agent system. This skill covers both runtime administration (via the REST API) and source code modification.
Important paths
- ZooBot home (runtime data):
~/.zoobot/settings.json— all configuration (agents, teams, channels, models, workspace)zoobot.db— SQLite queue databasetasks.json— Kanban taskspairing.json— sender allowlistlogs/— queue, daemon, and channel logschats/— team chain chat historyevents/— real-time event filesplugins/— plugin directory
- ZooBot source code: the repo where this skill is installed (check
git rev-parse --show-toplevelor look forzoobot.shin parent dirs) - Agent workspaces: configured in
settings.jsonunderworkspace.path(default:~/zoobot-workspace/{agent_id}/)
Interactivity warning
Many zoobot CLI commands are interactive (prompt for user input). Do NOT run these directly:
zoobot setup— fully interactive wizardzoobot agent add— prompts for all fieldszoobot team add— prompts for all fieldszoobot agent remove <id>— prompts[y/N]zoobot team remove <id>— prompts[y/N]zoobot team remove-agent <t> <a>— may prompt for new leader +[y/N]
Instead, use the REST API or direct settings.json edits (see below).
Non-interactive CLI commands (safe to run)
These CLI commands accept all parameters as arguments and do not prompt:
zoobot start # Start daemon
zoobot stop # Stop all processes
zoobot restart # Restart daemon
zoobot status # Show status
zoobot logs [queue|discord|telegram|whatsapp|heartbeat|daemon|all]
zoobot send "<message>" # Send message to default agent
zoobot send "@agent_id <message>" # Send to specific agent
zoobot reset <agent_id> [agent_id...] # Reset agent conversations
zoobot provider anthropic # Switch global provider
zoobot provider openai --model gpt-5.3-codex
zoobot model sonnet # Switch global model
zoobot agent list # List agents
zoobot agent show <id> # Show agent config
zoobot agent provider <id> <provider> # Set agent provider
zoobot agent provider <id> <provider> --model <model>
zoobot team list # List teams
zoobot team show <id> # Show team config
zoobot team add-agent <team_id> <agent_id> # Add agent to team (no prompts)
zoobot channels reset <channel> # Reset channel auth
zoobot pairing list # Show all pairings
zoobot pairing pending # Show pending
zoobot pairing approved # Show approved
zoobot pairing approve <code> # Approve a sender
zoobot pairing unpair <channel> <sender_id>REST API (preferred for programmatic operations)
The API server runs on http://localhost:3777 (configurable via ZOOBOT_API_PORT). The API server is available when ZooBot is running.
Agents
# List agents
curl -s http://localhost:3777/api/agents | jq
# Create or update agent (non-interactive, auto-provisions workspace)
curl -s -X PUT http://localhost:3777/api/agents/coder \
-H 'Content-Type: application/json' \
-d '{"name":"Coder","provider":"anthropic","model":"sonnet"}'
# Create agent with a system prompt (written to AGENTS.md in workspace on provisioning)
curl -s -X PUT http://localhost:3777/api/agents/coder \
-H 'Content-Type: application/json' \
-d '{"name":"Coder","provider":"anthropic","model":"sonnet","system_prompt":"You are a senior engineer. Always write tests."}'
# Optional fields: working_directory, system_prompt, prompt_file
# Delete agent
curl -s -X DELETE http://localhost:3777/api/agents/coderTeams
# List teams
curl -s http://localhost:3777/api/teams | jq
# Create or update team
curl -s -X PUT http://localhost:3777/api/teams/dev \
-H 'Content-Type: application/json' \
-d '{"name":"Dev Team","agents":["coder","reviewer"],"leader_agent":"coder"}'
# Delete team
curl -s -X DELETE http://localhost:3777/api/teams/devSettings
# Get full settings
curl -s http://localhost:3777/api/settings | jq
# Update settings (shallow merge)
curl -s -X PUT http://localhost:3777/api/settings \
-H 'Content-Type: application/json' \
-d '{"monitoring":{"heartbeat_interval":1800}}'Messages
# Send message to queue (processed by agent)
curl -s -X POST http://localhost:3777/api/message \
-H 'Content-Type: application/json' \
-d '{"message":"@coder fix the login bug","sender":"Admin","channel":"api"}'Queue
# Queue status
curl -s http://localhost:3777/api/queue/status | jq
# Recent responses
curl -s http://localhost:3777/api/responses?limit=10 | jq
# Dead-letter messages
curl -s http://localhost:3777/api/queue/dead | jq
# Retry a dead message
curl -s -X POST http://localhost:3777/api/queue/dead/123/retry
# Delete a dead message
curl -s -X DELETE http://localhost:3777/api/queue/dead/123Tasks
# List tasks
curl -s http://localhost:3777/api/tasks | jq
# Create task
curl -s -X POST http://localhost:3777/api/tasks \
-H 'Content-Type: application/json' \
-d '{"title":"Fix auth bug","description":"Login fails on mobile","status":"backlog","assignee":"coder","assigneeType":"agent"}'
# Update task
curl -s -X PUT http://localhost:3777/api/tasks/TASK_ID \
-H 'Content-Type: application/json' \
-d '{"status":"in-progress"}'
# Delete task
curl -s -X DELETE http://localhost:3777/api/tasks/TASK_IDLogs
# Recent queue logs
curl -s http://localhost:3777/api/logs?limit=50 | jqDirect settings.json editing
When the API server is not running, edit ~/.zoobot/settings.json directly. Use jq for safe atomic edits:
SETTINGS="$HOME/.zoobot/settings.json"
# Add an agent
jq --arg id "analyst" --argjson agent '{"name":"Analyst","provider":"anthropic","model":"sonnet","working_directory":"'$HOME'/zoobot-workspace/analyst"}' \
'.agents[$id] = $agent' "$SETTINGS" > "$SETTINGS.tmp" && mv "$SETTINGS.tmp" "$SETTINGS"
# Remove an agent
jq 'del(.agents["analyst"])' "$SETTINGS" > "$SETTINGS.tmp" && mv "$SETTINGS.tmp" "$SETTINGS"
# Add a team
jq --arg id "research" --argjson team '{"name":"Research Team","agents":["analyst","writer"],"leader_agent":"analyst"}' \
'.teams //= {} | .teams[$id] = $team' "$SETTINGS" > "$SETTINGS.tmp" && mv "$SETTINGS.tmp" "$SETTINGS"After editing settings.json, run zoobot restart to pick up changes.
Modifying ZooBot source code
When modifying ZooBot's own code (features, bug fixes, new routes, etc.):
- Source code:
src/directory (TypeScript)src/server/— API server (Hono framework)src/server/routes/— route handlers (agents, teams, settings, queue, tasks, messages, logs, chats)src/lib/— shared utilities (config, db, logging, types, plugins)
- Shell scripts:
lib/— bash libraries (agents.sh, teams.sh, daemon.sh, messaging.sh, etc.) - Main CLI:
zoobot.sh— command dispatcher - Compiled output:
dist/— runnpm run buildafter TypeScript changes - Skills:
.agents/skills/— skill definitions (copied to agent workspaces on provision) - Web portal:
tinyoffice/— Next.js app
After modifying TypeScript source, rebuild:
cd <zoobot-repo> && npm run buildThen restart the daemon to load changes:
zoobot restartWorkflow examples
Add a new agent and assign to a team
# 1. Create agent via API
curl -s -X PUT http://localhost:3777/api/agents/reviewer \
-H 'Content-Type: application/json' \
-d '{"name":"Code Reviewer","provider":"anthropic","model":"sonnet"}'
# 2. Add to existing team (non-interactive CLI)
zoobot team add-agent dev reviewerCheck system health
zoobot status
curl -s http://localhost:3777/api/queue/status | jq
curl -s http://localhost:3777/api/queue/dead | jq
zoobot logs queueCreate a task and assign to agent
curl -s -X POST http://localhost:3777/api/tasks \
-H 'Content-Type: application/json' \
-d '{"title":"Review PR #42","status":"backlog","assignee":"reviewer","assigneeType":"agent"}'In this repository9 other files it gives its agents.
- AGENTS.mdAGENTS.md
- docs/AGENTS.mdAGENTS.md
- agent-browserSkill
- imagegenSkill
- memorySkill
- scheduleSkill
- send-user-messageSkill
- skill-creatorSkill
- tasksSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

