Troika¶

Nikolai Sverchkov (1817–1898), A Troika Ride Through The Snow. Public domain, via Wikimedia Commons.
Troika turns a tracker ticket into a reviewed, QA-verified pull request. An AI coding-agent pipeline for full-stack developers — plan, implement, review, test, verify, ship — with a gate at every step. Install it as a plugin for Claude Code, Codex or Cursor, or run it from plain markdown in any agent.
Troika is an agentic development pipeline: eight specialised roles — architect, backend and frontend developers, reviewer, tester, QA, releaser, commenter — that take a ticket from your tracker and hand back a pull request with proofs attached. It automates the whole loop a full-stack developer runs by hand: requirements and planning, parallel implementation in git worktrees, automated code review, unit tests, QA verification on your real local stack, the release PR, and the CI and review-bot watch after it. Release cuts, release notes and demo builds are in the box too.
It is not a framework and not a runtime: it is plain markdown — roles, procedures and templates — that any coding agent loads by path, wired into slash commands for the three hosts that ship a plugin system.
Behind that one command: the ticket is classified first — a bug is reproduced on the base checkout before anyone fixes it, a feature is planned and a different model family reviews the plan and loops it back. Then dev roles implement in parallel worktrees, the reviewer runs nine checks on the diff, the tester runs only the tests the change developed, QA verifies on your real local stack with before/after proofs, and the releaser opens the PR and watches CI.
One optional gate waits for a person — the reporter reads what will be built, or what was
reproduced, before any code is written. /tr:dev SCRUM-123 runs the whole pipeline unattended;
/tr:dev SCRUM-123 --ask puts that gate in.
Install Troika Set up a workspace
Why Troika¶
Gates, not vibes. Every step is a gate. A plan is not approved until a reviewer on a different model family approves it; a diff is not pushed until nine checks pass; a PR is not done until CI is green and the review bots are quiet.
Attended or unattended, on purpose. Exactly one gate waits for a person, so a plain run is unattended end to end,
--askadds the one human gate — and stop conditions and the never-automatic list in your profile hold either way. The pipelineEight roles, eight contexts. Each has its own scope, model, effort and hard refusals. Dev roles write tests but never run them; the reviewer never runs anything. Roles
One tree, three hosts. The same commands are
/tr:devin Claude Code,/tr-devin Cursor, and$tr-devskill mentions in Codex — or no plugin at all, just files read by path. Running without a pluginOrganisation-neutral by construction. Nothing in the repository names a repo, command, branch, tracker, URL or person. Those live in your
.troika/PROFILE.mdand are linked by anchor. Writing the profilePer-workspace paths.
.troika/settings.jsonsays where plans, worktrees and memory live — one file per folder-of-repos, so a single installed plugin serves every client and org you work in. PathsIt is tested on itself. A structural gate checks every link, anchor and file shape; a behavioural gate plants twenty-one known defects and asserts the role that claims to catch each one does. Testing
How a ticket moves¶
flowchart TD
A[ticket] --> K{bug or feature?}
K -- bug --> R1[reproduce it<br/>on the base ref]
K -- feature --> R2[plan<br/>+ plan review]
R1 --> D[dev roles<br/>parallel worktrees]
R2 --> D
D --> V{internal review<br/>· unit tests · QA}
V -- findings --> D
V -- green --> P[releaser<br/>PR + proofs]
P --> C([CI green · PR ready])
Every loop has a cap, and every arrow back is a role handing a file to another role — never a shared context. The pipeline
What it is not¶
Troika does not run your agent, host a model, or wrap an API. There is no daemon, no scheduler and no lock-in: the executable surface is two Python scripts on the standard library, and everything else is markdown you can fork, trim, or run by hand.
It also makes no claim to work well on a codebase whose profile is not written. A vague A vague profile produces vague gates — the roles are only as sharp as the facts you give them.
Licence¶
MIT © Troika contributors.
If it saves your team time, consider
sponsoring on GitHub.