The operations layer for Claude Code agent teams.
WorkCenter manages the lifecycle of multi-agent Claude Code workflows on Kubernetes. It wraps the native agent team primitives -- claude --print, SendMessage, TaskCreate, and the ~/.claude/ state directory -- with process supervision, a real-time dashboard, a REST API, and a CLI. Self-hosted, ARM64-native, open-core.
- Process supervision -- spawn, monitor, kill, and restart agents with configurable restart policies and exponential backoff
- Real-time dashboard -- web UI with agent status, task DAG visualization, and message logs over WebSocket
- REST API -- full CRUD for teams, agents, tasks, and messages at
/api/v1 - CLI --
workcenter team|agent|tasksubcommands with text, JSON, and YAML output - Native state layer -- reads and writes Claude Code's own
~/.claude/state files directly - Event bus -- fsnotify-based watcher emitting typed events for all state changes
- Kubernetes-native -- ships as a Deployment with PVC, ArgoCD Application manifest included
- ARM64 + AMD64 -- multi-arch container images, primary target is bare-metal ARM64 clusters
kubectl apply -f https://raw.githubusercontent.com/workcenter/workcenter/main/k8s/Create the API key secret first:
kubectl create secret generic workcenter-secrets \
--namespace workcenter \
--from-literal=anthropic-api-key=sk-ant-...The dashboard is available at http://<node-ip>:30800.
git clone https://github.com/workcenter/workcenter.git
cd workcenter
make build-local
./dist/dashboard --state-dir ~/.claude┌──────────────────────────────────────────────────┐
│ Dashboard UI │
│ (embedded static frontend) │
└────────────────┬─────────────────┬───────────────┘
│ HTTP/WS │ REST
┌────────────────▼─────────────────▼───────────────┐
│ Dashboard Server │
│ (Go binary, port 8080) │
│ ┌──────────┐ ┌────────┐ ┌──────┐ ┌────────┐ │
│ │ REST API │ │ WS Hub │ │ Auth │ │ Static │ │
│ └────┬─────┘ └───┬────┘ └──────┘ └────────┘ │
└───────┼─────────────┼────────────────────────────┘
│ │
┌───────▼─────────────▼────────────────────────────┐
│ Orchestrator │
│ ┌──────────────┐ ┌───────────┐ ┌────────────┐ │
│ │ Agent │ │ State │ │ Event Bus │ │
│ │ Lifecycle │ │ Layer │ │ (fsnotify) │ │
│ └──────┬───────┘ └─────┬─────┘ └─────┬──────┘ │
└─────────┼────────────────┼───────────────┼────────┘
│ exec │ read/write │ watch
▼ ▼ ▼
┌──────────┐ ┌────────────┐ ┌────────────┐
│ claude │ │ ~/.claude/ │ │ ~/.claude/ │
│ --print │ │ state dir │ │ state dir │
└──────────┘ └─────┬──────┘ └────────────┘
│
┌──────▼──────┐
│ iSCSI PVC │
└─────────────┘
The orchestrator spawns claude --print processes and monitors them. The state layer reads and writes Claude Code's native JSON files. The event bus watches for file changes and pushes typed events to WebSocket subscribers.
| Variable | Default | Description |
|---|---|---|
WORKCENTER_STATE_DIR |
~/.claude |
Path to Claude Code state directory |
WORKCENTER_PORT |
8080 |
Dashboard HTTP port |
ANTHROPIC_API_KEY |
(required) | API key for spawned agents |
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS |
1 |
Enables agent team primitives |
workcenter team list
workcenter team create <name> [--description <desc>]
workcenter team get <name>
workcenter team delete <name>
workcenter agent list <team>
workcenter agent spawn <team> <name> [--model <model>] [--prompt <file>]
workcenter agent kill <team> <name>
workcenter agent nudge <team> <name> <message>
workcenter task list <team>
workcenter task create <team> --subject <s> [--description <d>] [--owner <o>]
workcenter task update <team> <id> [--status <s>] [--owner <o>]
workcenter task get <team> <id>
workcenter logs <team> [--follow]
workcenter status
Output format: --output text (default), --output json, --output yaml.
Base path: /api/v1
| Method | Path | Description |
|---|---|---|
GET |
/health |
Health check |
GET |
/teams |
List teams |
POST |
/teams |
Create team |
GET |
/teams/{name} |
Get team |
DELETE |
/teams/{name} |
Delete team |
GET |
/teams/{name}/agents |
List agents |
POST |
/teams/{name}/agents |
Spawn agent |
DELETE |
/teams/{name}/agents/{agent} |
Kill agent |
POST |
/teams/{name}/agents/{agent}/nudge |
Send message |
GET |
/teams/{name}/tasks |
List tasks |
POST |
/teams/{name}/tasks |
Create task |
PATCH |
/teams/{name}/tasks/{id} |
Update task |
DELETE |
/teams/{name}/tasks/{id} |
Delete task |
WebSocket: /ws for real-time events.
Full API documentation: ARCHITECTURE.md
| Community | Enterprise | |
|---|---|---|
| Price | Free (Apache 2.0) | $5,000 / cluster / year |
| Orchestrator, dashboard, API, CLI | Yes | Yes |
| Agent and team limits | None | None |
| RBAC, audit logging, SSO/OIDC | -- | Yes |
| Cost tracking, multi-cluster | -- | Yes |
See CLAUDE.md for build instructions, directory layout, and code style.
Apache 2.0. See LICENSE.