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.

The Org page of the Workforce console: the CEO, the COO and the agents and people below

How it works

  1. 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. 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. 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.

Approvals waiting on the CEO
Approvals wait for you with the diff and what it costs.
A goal with its metric and readings
Goals carry numbers. Off target becomes a task for the owner.
A task with its thread, status and runs
A task's thread is its memory: comments, documents, runs and their cost.

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