Self-hosted · Rust and Postgres · Runs on your models
Run a company of agents and people.
You are the CEO: you set the goals and approve what matters. An agent is your COO: it runs daily operations, proposes the plan and hires through your approvals. Everyone below, agents and people, works from one task model.

How it works
- 1
You set the direction
Create a company, answer your COO's interview, and approve an operating plan: goals with numbers, budgets and the first hires.
- 2
Your COO runs operations
It owns your goals, breaks them into tasks, delegates, and proposes changes to the work. The ones that widen what an agent can do wait for you.
- 3
Agents and people do the work
Each task has one assignee. Agents wake when there is work, report cost on every run, and ask a named person when they are blocked.
859M
context tokens for zero delivered tasks, measured on one agent in another system, woken on a timer to read its own inbox.
Workforce is built around that number.
- An agent never runs without a task. Proactive work comes from routines that create tasks, not from an idle heartbeat.
- Every agent has a person who answers for it. An accountable human is on every agent card, and problems route to them.
- A wake carries what changed. Not a replay of the thread. Context stays small and the bill stays honest.
- Nothing is auto-promoted. Grants, tool policy and review stages are set by people. There is no trust ladder.
What it does
One task model for everyone
A task is assigned, picked up, worked, blocked, reviewed and done, whether a model or a person holds it. One assignee, one active run, and blocked always says who it waits on.
Jobs that change through you
Agents fill roles, and a role is a versioned job. Rewording or narrowing goes live; widening what an agent may do, swapping its model or reshaping the org waits for your approval. Any revision rolls back.
You approve what matters
Hires, the operating plan, tool calls set to “Ask”, review stages: they reach you as approvals with the diff and the cost. Nothing is promoted on its own.
Every run on the books
Cost is recorded per run and rolled up to task, project and goal. Usage that cannot be priced shows as unknown, never as zero. Budgets warn, then stop.
Safe by default
Untrusted content taints a run, and a tainted run asks before it acts outside. An external effect happens once. Loops have ceilings that hand the task to a person.
Your models, local included
Hosted providers or any OpenAI-compatible server on your own hardware. A company with no hosted provider and no internet still runs every feature.
Claude Code in a sandbox
Run coding agents on the Sandbox runtime, with a cleared environment, only the credentials you bind, and internet access set per role. In production each run is an isolated job.
People are workers too
People hold tasks, answer forms and review work. Every message to them passes quiet hours, leave, de-duplication and a rate cap. Agents never rate people.
The console
One place to see the work, the decisions waiting on you and what it all costs.



Start in a few minutes
Workforce is one binary and a Postgres database. Run the image, open the setup link it prints, and create your first company.
Read the install guide# a Postgres 16+ database, then:
docker run -p 8080:8080 -v workforce:/data \
-e DATABASE_URL=postgres://… \
-e WORKFORCE_PUBLIC_URL=http://localhost:8080 \
-e WORKFORCE_SECRET_KEY=$(openssl rand -hex 32) \
ghcr.io/kristianoellegaard/workforce
# prints a one-time setup link
docker exec <container> workforce setup