Skip to content

Latest commit

 

History

History

README.md

WorkCenter

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.

Features

  • 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|task subcommands 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

Quick Start

kubectl

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.

From Source

git clone https://github.com/workcenter/workcenter.git
cd workcenter
make build-local
./dist/dashboard --state-dir ~/.claude

Architecture

┌──────────────────────────────────────────────────┐
│                  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.

Configuration

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

CLI

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.

API

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 vs Enterprise

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

Contributing

See CLAUDE.md for build instructions, directory layout, and code style.

License

Apache 2.0. See LICENSE.