Kontora runs coding agents on markdown tickets.

Each ticket runs through a pipeline of stages, in its own git worktree, branch, and tmux session.

$ brew install kontora
go install github.com/worksonmyai/kontora/cmd/kontora@latest | Go 1.26+

Or give it to a coding agent: "Help me install and set up Kontora: llms.txt"

127.0.0.1:8080 1 agent running
The Kontora web dashboard showing a kanban board of tickets
columns open in progress human review done cancelled a ticket in human review, or with a paused stage, waits for you
the ticket

Tickets are markdown files.

The YAML frontmatter holds the id, the status, the pipeline, and the path to the repository to work in. Write the file by hand or run kontora new. Kontora picks up any ticket with status: todo, but runs nothing until kontora: true is set.

~/.kontora/tickets/kon-q88f.md
---
id: kon-q88f
kontora: true
status: todo
pipeline: implement-review-commit
path: ~/projects/kontora
---

# Add a health check endpoint
the pipeline

A pipeline is a list of stages.

A stage is a prompt template with a timeout and a model. The pipeline runs its stages in order, and each stage says what to do on success and on failure. Stages share one worktree, so one stage writes PLAN.md and the next one reads it.

implement

agent: claude on_success: next on_failure: pause

Kontora creates the worktree, sends the ticket description as the prompt, and starts the agent in a tmux session.

review

max_retries: 1 on_failure: retry

A second agent runs over the same worktree, usually on a different model. It sees the files the first stage wrote.

commit

agent: claude on_success: human_review

The agent stages, commits, and pushes. The ticket then moves to human review, with the log of every stage attached.

kontora start example output
14:02:11 INFO picked up pipeline=implement-review-commit
14:02:11 INFO generated branch branch=kontora/kon-q88f
14:02:12 INFO spawning agent agent=claude stage=implement
14:09:48 INFO advancing from=implement to=review
14:13:02 INFO retrying stage=review attempt=1
14:18:30 INFO worktree removed
14:18:31 $ kontora attach kon-q88f
ticket terminal dashboard
The Kontora dashboard with a ticket open on its terminal tab, showing live agent output
01

One worktree per ticket

Every ticket gets its own git worktree and branch, so agents never touch each other's files or your checkout. Three run at a time by default.

02

Any agent with a CLI

Claude Code, Pi, OpenCode, or any binary that takes a prompt. You declare the binary and its arguments once in the config. A stage can override the model.

03

Board in the browser or the terminal

The same board runs as a web dashboard and as a terminal UI. From either one you can attach to a running agent's tmux session.

04

Drive it from another machine

The CLI talks to the daemon over the same HTTP API as the dashboard. Set KONTORA_URL to a host on your tailnet and attach to a live session.

Getting started

Kontora needs git, tmux, and one agent CLI. Run kontora doctor to see what is missing.

Read the docs
1$ kontora setup
2$ kontora start # daemon and dashboard
3$ kontora new 'Add a health check endpoint'
4$ kontora attach # the agent's tmux session