kardboard: a kanban board that summons coding agents
Write a card, and about a minute later a coding agent clones the repo, does the work, and opens a pull request. My job becomes reviewing.
I hit a point where I had a dozen coding agent threads open across a few projects and no idea what any project still needed. Each thread held one task. The picture of the whole project lived nowhere. I was doing project management inside a scrollback buffer.
kardboard is what I built to get out of that. It is a kanban board with six columns and one unusual property: about a minute after you create, edit, comment on, or move a card, an agent starts working on it.

What a card does
A card holds a description in Markdown, its comments, and eventually a pull request link and a preview URL. When you save one, kardboard waits a minute so a second edit does not start a second session, then starts a throwaway container. The container clones the repository on a branch named after the card and starts Claude Code or Codex with a workflow prompt and an MCP server that lets it read every card, comment, and attachment on the board, and comment, move, or create cards of its own.
The agent reads the request, does the work, runs the repository's acceptance command, pushes, and opens a pull request. Then it leaves one comment on the card and moves it to Review. If the request was unclear it moves the card to Blocked with a question. That branch turns out to carry most of the value. A bad card gets a question back within a minute, before anyone spends twenty on a wrong pull request.

When I press Approve, kardboard squash-merges, deletes the branch, and moves the card to Done. The agent has a name and an avatar, Milo by default. That sounded like a gimmick until I had a board with more than one person on it and needed to tell at a glance who did what.
The parts I would not run without
Agents can push branches. They can never merge. Merging goes through a second GitHub app that only kardboard holds, so a session that goes off the rails still ends at a pull request a person has to approve.
An approval is bound to the exact commit the reviewer looked at. If the branch gets another push after you approve, the approval is void and the card waits for you again.
The agent container never sees my provider credentials. An egress proxy adds the API key on the way out. That gave me something I had not planned for: when my Claude subscription hits its usage limit, the proxy sees the refusal and the card gets picked up again on Codex. The board keeps moving while I am asleep.
Every session runs with a CPU and memory limit, a wall clock, and a repository token that expires after an hour.
Previews and big requests
In preview mode, kardboard builds the branch's Dockerfile and hosts it at the card's own hostname. A card about a footer form comes back with a link where you can click the footer form. Only board members can open it, and it is torn down when the card reaches Done.
A request too large for one pull request gets split into child cards. Each child starts its own session as soon as it exists, the parent waits in Blocked, and it wakes itself when the children finish, told which were merged and which were closed without a change.
What changed for me
I still describe work in plain English, the same way I used to write prompts. The difference shows up months later. When I want to know why a feature was built the way it was, or what it cost, I open the card. The description, the questions, the pull request, and the full session transcript are all still there. A chat thread would be gone.
It runs at kardboard.cc, invite-only. kardboard is itself a board on kardboard, and some of its own pull requests come from Milo.
