Moving a card runs Git.

The card says done. The branch is still open.

Start with one repositoryon the repositories you already have

A delivery board whose columns are your branches. Pick a card up and the branch is cut. Push, and the pull request opens. Move it to the last column and the merge happens — with the tag and the changelog behind it.

Or sit on the card and write it here — with an agent beside you, in a sealed container, until it leaves as a pull request.

Backlog
#42Search the customer list
In development
In production
  1. ——————picked up from the backlog
  2. 8f2a1c4branch cut from mainfeature/42-search-the-customer-list
  3. 3d91b07pull request openedon the first push
  4. c04e7a9checks passedthe stage requires green
  5. b71e3f2merged into mainsquash
  6. v1.4.3tagged, with its changelog
The Tylon board. Four columns — In development, In review, Staging, In production — and on each card the branch it holds in every repository, the pull request, and what the last build said.
one workspace, four stages, three repositories — and every card carrying its own branches

a1f0c93refs/heads/main — the flow, described once

Statuses across the top. Repositories down the side.

Each cell of that matrix answers two questions: where a branch is cut from when work enters the stage, and where it merges when it leaves. A cell you leave empty means the stage does not touch that repository. That is the whole setup, and you do it once.

The flow of a project: each status in order, and under it every repository with the branch it is cut from and the branch it merges into.
In development cuts from main. Staging merges into staging. In review leaves every cell empty — a stage that touches no repository, and the board is honest about it.

8f2a1c4a card enters a stage

Then the board writes the Git

The branch appears, named the way your team names them. The first push opens the pull request — a provider will not take one with no commits, so it waits for the commit rather than forging an empty one. Promoting the card merges it into wherever the next stage points.

card → In development
git branch feature/42-… main
first push
pull request opened
card → In production
merge, tag, changelog
card ← dragged back
revert opened, card waits for it

3d91b07and where it refuses

A board that will not lie about what shipped

A stage can require green checks, a minimum role, an approval. A red build, a branch somebody deleted by hand, a merge that will not apply — the card does not move, and the reason is written on it. Dragging a card out of production is not a status change either: the revert is opened, and the card stays where it is until that revert actually merges. Until it does, the code is still out there.

A card that did not move, with the provider's own refusal written across the top of it and the failing repository named.
the card did not move, and the reason is the provider's own sentence — not our summary of it

c47e2dathree repositories, one piece of work

Front and back move together, or neither moves

A card holds a branch in each repository it touches and a pull request in each. It is promoted across all of them at once — and refused across all of them, which is the half that keeps them honest.

webapijobs
one card · three branches · one promotion

6b05f81a branch opened by somebody who is not a person

It reads the card, writes the code, and hands you a pull request

Hand it the card, or sit with it. Give it a model, a key and a list of what it may do. It joins the workspace as a member, picks up a card like anybody else, and works in a container with no unrestricted route to the internet.

agent run · card #42 · sealed container, no route out
  1. list_filessrc/34 files · 2 levels
  2. read_filesrc/semver.ts118 lines
  3. searchcompare(3 matches, with context
  4. edit_filesrc/semver.ts4 lines became 9
  5. run_commandnpm testexit 1 — 1 failing: leading "v" not stripped
  6. read_filetest/semver.test.tslines 40–72 of 210
  7. edit_filesrc/semver.ts2 lines became 3
  8. run_commandnpm testexit 0 — 24 passing · no network in here
  9. proposeagent/42-compare-semver-rangespull request opened — waiting for a person
One run of an agent, opened on the file it wrote: the model, what woke it, the turns, the tokens and what it cost across the top, the patch itself below, and the tree of everything it touched beside it.
the change it is offering, in the run that produced it — with what that run cost beside it

Dependencies leave through a proxy that allows only the registries its language uses. Runtime access is limited to exact, receipted destinations a maintainer declares — never ambient internet.

It proposes on a branch, as itself. When the build goes red it hears about it and tries again. When somebody asks for a change in review, it reads the review. What it never does is merge — unless merging is one of the things you gave it.

  • whatever the repository is written inGo, Python, Rust, Node, Java — read from your devcontainer, or from the manifest at the root.
  • a ceiling on what it may spendPer organization and per run, in money. It stops at the ceiling instead of you finding out afterwards.
  • nothing lands without a diff you readEvery run is a proposal, with what it cost and what it touched. A secret found in a diff is refused, not warned about.

a1d5c0ea session on a card — the checkout, in the browser

Sit on the card and write it

The card's own checkout, open in the browser: a real editor, and a terminal in the same sealed container the agent works in. Ask the agent for the next slice and it writes in the same tree. When you are done, finish — the pull request opens into the card's branch.

Every save and every command is a line on the card — file, command, who, when. Stop stops the command, inside the container, and the line says so. Drafts survive a refresh; the open tabs come back the next morning.

Nobody writes blind. A save carries the version it was written against, so a file that moved under you — the agent rewrote it — is refused with the other version beside yours, never overwritten.

  • metered by the hour, shown before it is chargedA session holds a container and a checkout. The hours are on the screen while they count, and pausing stops them without losing the tree.
  • no way around the pull requestThe container holds no credential. A git push typed in the terminal is refused, and points at the button that pushes as you.
  • the card can say who changed whatPerson or agent, per edit and per command — readable afterwards by somebody who was never in the room.

0e73ba2what it will never do

It orchestrates above your repository, never underneath it

If the repository forbids squash merges, Tylon does not offer them. If a protection rule refuses a merge, the card stops and shows the refusal in the provider's own words rather than working around it. And nothing of yours leaves with us: delete the organization and every branch, pull request, tag and release it made stays exactly where it is, in the repository that was always yours.

59cd410what it costs

The board is free. The agent is twenty-nine dollars a month.

People, projects, workspaces and repositories are never counted, on either plan — invite the designer, the two PMs, the client. What Pro pays for is the agent and the machine it runs on: one comes with it, and a bigger one or a second one is on the price list.

free

$0

  • the whole board: cards, flow, branches, pull requests, releases, trunk
  • as many people as you like
  • as many projects, workspaces and repositories as you like
  • no agent — that is what Pro is

pro

$29 /month, per organization

  • the agent, on your own model key: sessions and runs
  • a machine of your own — 2 GB, 2 vCPU — one session at a time
  • a bigger one from $19 a month, or a second one; resize any time
  • $24 a month if you pay annually

14 days of Pro to start, no card, on the included machine. Nothing is taken away when it ends — the agent waits, and what you made with it stays.

v1.0.0tag — where the account gets made

Start with one repository and one board

An email and a password, or the GitHub or GitLab account you already sign in with everywhere else.

Start with one repositorynothing to install in your repository