A multi-agent orchestration system with tool access control, Docker isolation, planner-driven workspace generation, mission Kanban board, specialist council insights, and real-time communication.
Agent Dashboard is a production-ready multi-agent orchestration platform that allows you to:
- Spawn specialized AI agents with isolated workspaces
- Control tool access per agent (security + specialization)
- Run agents in Docker containers (optional isolation)
- Manage projects via Mission Control Kanban board
- Get specialist insights from rotating council per project
- Real-time communication via channels, DMs, and project war-rooms
- Planner-driven setup generates agent workspaces automatically
- Frontend: Next.js 15, React 19, Tailwind CSS
- API: Express + Socket.IO for real-time updates
- Runner: TypeScript agent runner with planner integration
- Database: PostgreSQL + Prisma ORM
- Monorepo: npm workspaces
agent-dashboard/
├── apps/
│ ├── api/ # Express API server + WebSocket
│ ├── runner/ # Agent spawning + workspace planner
│ └── web/ # Next.js dashboard UI
├── packages/
│ └── db/ # Prisma schema, migrations, client
├── agent-workspaces/
│ ├── .template/ # Base template for agents
│ │ ├── agent-types.json # 6 agent type definitions
│ │ └── SOUL.md, MISSION.md, etc.
│ └── <agent-id>/ # Generated agent workspaces (git-ignored)
├── tools.json # Tool registry (24 tools, 6 presets)
├── migrate-tools-docker.sh # Migration script
└── start.sh # Startup script
- Node.js 20+
- PostgreSQL (local or remote)
- npm 10+
# Clone and install
git clone <your-repo>
cd agent-dashboard
npm install
# Create database
createdb agent_dashboard
# Run migrations
npm run db:generate
npm run db:migrate./start.shAccess points:
- Dashboard:
http://localhost:3001 - Mission Control:
http://localhost:3001/mission-control - Communication Hub:
http://localhost:3001/comms - API:
http://localhost:4001
LAN URLs are printed on startup for mobile/tablet access.
Every agent has fine-grained control over which tools they can use.
| Preset | Tools | Use Case |
|---|---|---|
| minimal | read, web_search, web_fetch, session_status | Read-only, safest |
| standard | + write, edit, sessions_send | Most agents |
| developer | + exec, process | Full dev access |
| researcher | + browser, image | Research tasks |
| orchestrator | sessions_*, agents_list | Multi-agent coordination |
| unrestricted | * (all tools) |
Tools are resolved in this priority:
- Custom allowlist (explicit per-agent)
- Preset (from tools.json)
- Agent type defaults (from agent-types.json)
Spawn agent with minimal tools:
curl -X POST http://localhost:4001/api/agents/spawn \
-H "Content-Type: application/json" \
-d '{
"name": "Safe Bot",
"type": "research-agent",
"task": "Research AI safety papers",
"toolPreset": "minimal"
}'Update agent to developer tools:
curl -X PATCH http://localhost:4001/api/agents/{agent-id}/tools \
-H "Content-Type: application/json" \
-d '{"preset": "developer"}'Custom tool allowlist:
curl -X PATCH http://localhost:4001/api/agents/{agent-id}/tools \
-H "Content-Type: application/json" \
-d '{"allowedTools": ["read", "write", "web_search", "exec"]}'The tools.json file contains metadata for all 24 OpenClaw tools:
- Tool metadata: name, category, description
- Risk levels: low, medium, high, critical
- Categories: filesystem, shell, network, automation, system, orchestration, AI, memory
- Common usage: which agent types typically need each tool
Available tools:
- Filesystem:
read,write,edit - Shell:
exec,process - Network:
web_search,web_fetch,browser - Orchestration:
sessions_spawn,sessions_send,sessions_list,sessions_history,agents_list - AI:
image,tts - Memory:
memory_search,memory_get - System:
gateway,nodes,cron,message,canvas,session_status
Agents can optionally run inside Docker containers for isolation and security.
- Isolation: Separate filesystem and network
- Security: Limit system access
- Reproducibility: Consistent environment across runs
- Resource control: CPU/memory limits
| Image | Description | Use Case |
|---|---|---|
openclaw/agent-node:latest |
Standard Node.js env | Most agents |
openclaw/agent-devops:latest |
DevOps tools (Docker, kubectl) | DevOps agents |
openclaw/agent-python:latest |
Python 3.11+ with ML libs | ML/data agents |
openclaw/agent-minimal:latest |
Alpine minimal | Lightweight tasks |
Enable Docker for existing agent:
curl -X PATCH http://localhost:4001/api/agents/{agent-id}/docker \
-H "Content-Type: application/json" \
-d '{
"enabled": true,
"image": "openclaw/agent-node:latest"
}'Spawn agent with Docker:
curl -X POST http://localhost:4001/api/agents/spawn \
-H "Content-Type: application/json" \
-d '{
"name": "Isolated Bot",
"type": "devops-agent",
"task": "Monitor system health",
"useDocker": true,
"dockerImage": "openclaw/agent-devops:latest",
"dockerConfig": {
"volumes": ["/var/run/docker.sock:/var/run/docker.sock:ro"],
"environment": {
"DOCKER_HOST": "unix:///var/run/docker.sock"
}
}
}'Docker config supports:
- Custom image: Override default per agent
- Volume mounts: Share directories (use
:rofor read-only) - Environment variables: Pass config to container
- Resource limits: CPU/memory constraints
- Network mode: bridge, host, none, etc.
Six pre-configured agent types (in agent-workspaces/.template/agent-types.json):
- Specialization: Software development, refactoring, debugging
- Default tools: developer preset
- Skills: github, skill-creator, codex-helper
- Docker: Optional (Node.js image)
- Specialization: Blog posts, social media, documentation
- Default tools: standard preset
- Skills: bird (Twitter CLI)
- Docker: Optional (Node.js image)
- Specialization: Information gathering, analysis
- Default tools: researcher preset
- Skills: search-reddit, blogwatcher
- Docker: Optional (Node.js image)
- Specialization: Workout tracking, nutrition
- Default tools: developer preset
- Skills: fitness-tracker (PostgreSQL access)
- Docker: Optional (Node.js + DB env vars)
- Specialization: System monitoring, deployment
- Default tools: developer preset
- Skills: None (system-level)
- Docker: Enabled by default (DevOps image with Docker socket)
- Specialization: GSoC guidance, contribution strategy
- Default tools: researcher preset
- Skills: github, search-reddit
- Docker: Optional (Node.js image)
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/agents |
List all agents |
| GET | /api/agents/:id |
Get single agent |
| POST | /api/agents/spawn |
Spawn new agent (recommended) |
| POST | /api/agents/:id/start |
Start agent session |
| POST | /api/agents/:id/stop |
Stop agent session |
| POST | /api/agents/:id/message |
Send message to agent |
| PATCH | /api/agents/:id |
Update agent config |
| DELETE | /api/agents/:id |
Delete agent |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/tools |
Get full tools registry |
| GET | /api/tools/presets |
List available presets |
| GET | /api/agents/:id/tools |
Get agent's tools |
| PATCH | /api/agents/:id/tools |
Update agent tools |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/agents/:id/docker |
Get Docker config |
| PATCH | /api/agents/:id/docker |
Update Docker config |
| GET | /api/docker/images |
List available images |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/projects |
List all projects |
| GET | /api/projects/:id |
Get single project |
| POST | /api/projects |
Create project |
| PATCH | /api/projects/:id |
Update project |
| GET | /api/projects/:id/insights |
Get specialist insights |
| POST | /api/projects/:id/scan |
Trigger council scan |
| GET | /api/projects/:id/chat |
Get war-room messages |
| POST | /api/projects/:id/chat |
Post to war-room |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/messages |
Get messages (with filters) |
| POST | /api/messages |
Send message |
| GET | /api/channels/:name |
Get channel messages |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/spawn-requests |
Get pending spawns (for Friday polling) |
| POST | /api/agents/:id/request-spawn |
Request spawn |
| POST | /api/spawn-requests/:id/update |
Update spawn status |
| GET | /api/agents/:id/spawn-status |
Get spawn status |
# Start dev servers (API + Web)
npm run dev
# Build all workspaces
npm run build
# Database operations
npm run db:migrate # Run migrations
npm run db:generate # Generate Prisma client
npm run db:seed # Seed database
# Individual workspace commands
npm run dev --workspace apps/api
npm run dev --workspace apps/webCreate .env files in respective apps:
packages/db/.env:
DATABASE_URL="postgresql://user:password@localhost:5432/agent_dashboard"apps/api/.env:
DATABASE_URL="postgresql://user:password@localhost:5432/agent_dashboard"
GATEWAY_URL="http://localhost:3721" # Optional: OpenClaw gateway
FRONTEND_URL="http://localhost:3001" # Optional: explicit CORSapps/web/.env.local:
NEXT_PUBLIC_API_URL="http://localhost:4001" # Optional: force API URLThese features were added Feb 2026 and require a database migration.
Automated:
./migrate-tools-docker.shManual:
npm run db:generate
npx prisma migrate dev --name add_tools_and_docker
npm run devDatabase columns (Agent model):
allowed_tools(JSON) — Tool allowlistuse_docker(boolean) — Docker spawn toggledocker_image(string) — Docker image namedocker_config(JSON) — Docker configuration
Files:
tools.json— Tool registry with 24 tools
Agent types updated:
- All 6 agent types now have
toolPresetanddockerconfig
# Test endpoints
curl http://localhost:4001/api/tools | jq .
curl http://localhost:4001/api/tools/presets | jq .
curl http://localhost:4001/api/docker/images | jq .
# Spawn test agent
curl -X POST http://localhost:4001/api/agents/spawn \
-H "Content-Type: application/json" \
-d '{
"name": "Test Bot",
"type": "research-agent",
"task": "Test task",
"toolPreset": "minimal"
}' | jq .- Start minimal: Use
minimalorstandardpresets by default - Add incrementally: Grant tools only when needed
- Avoid wildcards:
["*"]grants full access — use sparingly - Review dangerous tools: Be cautious with
exec,browser,message,gateway,cron
- Use Docker for untrusted code: Especially agents executing external code
- Limit volumes: Only mount necessary paths, prefer read-only (
:ro) - No privileged mode: Unless absolutely required
- Set resource limits: Prevent resource exhaustion
- Use minimal images: Smaller attack surface
- Every project gets a lead agent (auto-assigned or manual)
- Rotating council of 3 specialist agents per project
- Council scans every 15 minutes, generates insights
- Insights posted to project war-room automatically
Six specialist domains:
- Architecture — System design, boundaries, integration
- Design — UI/UX, visual hierarchy, affordances
- SEO & Content — Discoverability, metadata, search intent
- Analytics — Decision-grade metrics, KPIs
- Onboarding — First-run experience, activation
- Reliability — Error handling, retries, fallbacks
Each domain contributes:
- Angle: Specialist perspective
- Proposal: Actionable recommendation
- Question: Critical question for lead/owner
Real-time updates via Socket.IO:
agent:created— New agent spawnedagent:updated— Agent status/config changedagent:deleted— Agent removedagent:status— Agent status changeproject:created— New project addedproject:updated— Project modifiedproject:insight— New council insightproject:chat— War-room messagemessage:new— New message in any channelmessage:sent— Message delivery confirmedtask:created— Task assignedtask:updated— Task status changed
- Source code (
apps/,packages/) - Agent templates (
agent-workspaces/.template/) - Tool registry (
tools.json) - Scripts (
start.sh,migrate-tools-docker.sh) - Documentation (
README.md)
- Generated workspaces (
agent-workspaces/<agent-id>/) - Build outputs (
.next/,dist/) - Dependencies (
node_modules/) - Environment files (
.env,.env.local) - Runtime files (
logs/)
start.sh automatically detects and prints LAN URLs for access from other devices on your network:
✅ Agent Dashboard running:
Local: http://localhost:3001
LAN: http://192.168.1.100:3001
curl -X POST http://localhost:4001/api/agents/spawn \
-H "Content-Type: application/json" \
-d '{
"name": "Code Assistant",
"type": "code-agent",
"task": "Review PRs and suggest improvements",
"toolPreset": "developer",
"useDocker": false
}'curl -X POST http://localhost:4001/api/projects \
-H "Content-Type: application/json" \
-d '{
"title": "Build Agent Dashboard",
"brief": "Multi-agent orchestration system with tool control",
"priority": 1,
"tags": ["agents", "orchestration", "tools"]
}'curl -X POST http://localhost:4001/api/projects/{project-id}/scan# Give agent more tools
curl -X PATCH http://localhost:4001/api/agents/{agent-id}/tools \
-H "Content-Type: application/json" \
-d '{"preset": "developer"}'# 1. Health check
curl http://localhost:4001/health
# 2. List agents
curl http://localhost:4001/api/agents | jq .
# 3. Get tools registry
curl http://localhost:4001/api/tools | jq .
# 4. Spawn test agent
curl -X POST http://localhost:4001/api/agents/spawn \
-H "Content-Type: application/json" \
-d '{"name":"Test","type":"research-agent","task":"Test","toolPreset":"minimal"}' | jq .# Open Prisma Studio
npx prisma studio
# Or use psql
psql $DATABASE_URL -c "SELECT id, name, status FROM agents;"- Fork the repo
- Create feature branch:
git checkout -b feature/amazing-feature - Commit changes:
git commit -m 'Add amazing feature' - Push:
git push origin feature/amazing-feature - Open Pull Request
[Add your license here]
# Check PostgreSQL is running
pg_isready
# Verify DATABASE_URL
echo $DATABASE_URL
# Recreate database
dropdb agent_dashboard
createdb agent_dashboard
npm run db:migrate# Reset database (⚠️ deletes all data)
npx prisma migrate reset --force
npm run db:generate
npm run db:migrate- Check agent type exists in
agent-workspaces/.template/agent-types.json - Verify tools preset is valid (check
tools.json) - Ensure workspace directory is writable
# Kill processes on ports 3001/4001
lsof -ti:3001 | xargs kill -9
lsof -ti:4001 | xargs kill -9
# Or use different ports
PORT=3002 npm run dev --workspace apps/web
PORT=4002 npm run dev --workspace apps/apiBuilt with ❤️ for autonomous agent orchestration