Taskcell

Cards in. PRs out.

Taskcell is a self-hosted software factory. Every card is built in its own sealed sandbox cell, has to pass your gates and a review, and lands as a pull request. You merge.

Get it on GitHub Open source, MIT. Your machine, your AI plan.
  • Self-hosted
  • Claude Code · Codex · Cursor
  • GitHub · GitLab · Linear
  • Desktop app · coming
An isometric factory floor: an intake dock, four glass sandbox cells with cards inside, gates labelled tests, types, secrets and spec, a review tower and an outbound dock stacked with pull requests.

Swap the source: GitHub, GitLab, Linear or a GitHub Projects board. Swap the engine: Claude Code, Codex, Cursor or a model through OpenRouter. The line stays the same.

How it works

From card to pull request

Six stations, the same for every card. You set the trigger and you merge; Taskcell does the toil in between.

  1. Card

    Label an issue on GitHub, GitLab or Linear, or move a card on a GitHub Projects board. A card too vague to build goes back as needs info before any model runs.

  2. Spec

    A planner reads the code and writes a tech spec with acceptance criteria. It is posted on the issue, and you get a window to read it before the build starts.

  3. Sealed cell

    The agent builds the card in a Docker container of its own: non-root, no new privileges, a minimal capability set, no repository token, one git worktree per card.

  4. Gates

    Your verify script runs and the host scans the diff for secrets. A red gate sends the card back for a repair, at most twice; the second can run on a stronger model.

  5. Review

    A reviewer reads the diff in a fresh context and fixes what it finds. Give it a second model, for example Codex reviewing Claude's work.

  6. Pull request

    The host pushes the branch and opens the PR: ready for review when every gate passed, a draft when one did not. On GitHub, your review comments go back for a revision. You merge.

Swappable parts

Bring your tracker. Bring your model.

The source and the engine are plug-in parts on the line. Change either one with a flag; the cell, the gates and the review stay the same.

Source

Where cards come from.

  • GitHub Issues--github owner/repo#nPull requests on GitHub, with revisions from your review comments.
  • GitHub Projects--source projectMoving a card to Todo starts the build.
  • GitLab--source gitlabgitlab.com or self-hosted, through glab. Merge requests instead of PRs.
  • Linear--linear TES-1Through the linear CLI. A workflow state is the trigger.

Engine

Who writes the code, on the plan or keys you already have.

  • Claude Code--provider claudeThe default. A Claude subscription token or an API key.
  • Codex--provider codexAn OpenAI API key, or a ChatGPT plan.
  • Cursor--provider cursorThe Cursor CLI, added to the sandbox image on request.
  • OpenRouter, z.ai--provider openrouterOther models through Anthropic-compatible endpoints.

Claude builds, Codex reviews

vanguard run --github you/app#42 --repo ../app --provider claude --review-provider codex

Security

The agent is treated as hostile

It reads text anyone can write: issues, repository files, dependencies. So it works inside a cell, and everything that can do damage stays outside.

The host

Your machine or server. Only it holds what can do damage.

  • The GitHub or GitLab token
  • The real model key, inside the LLM proxy
  • The secret scan of every diff
  • Dropping edits to CI config
  • Pushing the branch and opening the PR

The cell

One container per card.

  • Non-root, no new privileges, minimal capabilities
  • No repository token
  • A one-run nonce instead of your model key
  • Secrets in RAM, never in argv or on disk

Out of the cell

  • registry.npmjs.orgallowed
  • pypi.orgallowed
  • github.comallowed, no token
  • api.anthropic.comvia the proxy
  • anything elserefused

With the egress allowlist on. Without it, the cell's network is open.

No third-party audit yet. The boundaries are written down in the README and in a self-hosted security review in the repository. Found a hole? Report it privately; you get an answer within 7 days.

Self-host

Your machine. Your plan.

Taskcell runs where Node 24 and Docker run: a laptop, a home server, a VPS. It uses the AI subscription or API keys you already pay for.

Install from source

git clone https://github.com/spietrza/taskcell.git
cd taskcell
pnpm install && pnpm build
docker/build.sh       # the sandbox image
pnpm link --global    # puts vanguard on your PATH

Also needed: gh for GitHub, glab for GitLab or the linear CLI for Linear.

The Hub

Your factory, on one screen

vanguard hub shows your projects, the task board and the cost of every run. The live factory floor is coming to it; this is how it will look.

Preview with sample data. Projects, the board and cost per run are in the Hub today; the floor panel is not yet.

Taskcell HubPreview, sample data

Factory floor acme/billing

The same factory floor, as a panel in the Hub.

Projects this week

acme/billing$9.84GitHub · 3 running · 12 runsspend
acme/infra$3.10GitLab, self-hosted · 1 running · 4 runsspend
acme/web$0.00GitHub · idlespend

Cost per run last five

CardModelsCacheCost
TC-44Claude, Codex review97%$0.84
TC-45Claude, Codex review98%$0.61
TC-43Claude, 1 repair96%$1.27
TC-42Codex, Claude review95%$0.93
TC-41Claude, Codex review98%$0.58

Task board acme/billing

Todo

  • TC-52Rate-limit the export endpoint
  • TC-53Dark mode for settings

Spec

  • TC-50 for you to readPaginate the audit log

In a cell

  • TC-47Retry webhooks with backoff
  • TC-48Show VAT on invoice PDFs
  • TC-49Export filter for currency

Review

  • TC-46Archive paid invoices

Pull request

  • TC-44 #212Add CSV export to invoices
  • TC-45 #213Fix rounding in totals

FAQ

Questions

What does it cost?

Taskcell is open source under the MIT license. You pay your model provider, through the plan or the API keys you already have. Each run records its tokens, cache use and cost, and a per-run budget cap stops a run that gets too expensive (on the engines that run the Claude CLI; not yet on Codex or Cursor).

Will it merge anything on its own?

No. It opens pull requests and a person merges them. A failed gate makes the PR a draft rather than hiding the failure.

Do I need a Claude subscription?

No. Claude Code runs on a Claude subscription token or an API key; Codex on an OpenAI key or a ChatGPT plan; Cursor, OpenRouter and z.ai on their own keys. A run that uses only Codex or Cursor needs no Anthropic credential.

Where does my code go?

Your repository is checked out on your host and the agent works on it inside the cell. What the agent sends to its model provider goes there, as with any coding agent. One opt-in feature, the difficulty probe, sends issue text to a decision-model endpoint; it is off unless you turn it on.

What happens when the tests fail?

The card goes back for a repair, at most twice. If it is still red, the PR opens as a draft with a verify-failed label, so you see the failure instead of a green-looking PR.

Why is the command called vanguard?

Taskcell used to be called Vanguard. The CLI, the VANGUARD_* variables, the vanguard:* labels and the .vanguard/ folder keep that name for now; the old repository URL redirects to the new one.

Can it run in CI instead of on my machine?

Yes. Reusable GitHub Actions workflows run the same factory when you label an issue, and the Hub can import those runs' records to show them.

Is it audited?

Not by a third party. The security model and its limits are documented in the repository, and vulnerabilities can be reported privately through GitHub.

Get Taskcell

Put one card through it this week.

Get it on GitHub

Open source, MIT. The command is still vanguard.