Local Loop Engineering,
let them build while you sleep
A loop builds a brief, runs your checks and has different models review the change, round after round, until the checks pass and no P1 finding is open. Loops in different repositories run side by side. The board shows where each one is, and by default none of them stops to ask.
$ brew install partyline-sh/tap/partylinethe Loops board, ctrl-\ l. d deletes a loop or its batch.
five columns
needs you
What waits on a person. By default loops decide for themselves; turn on “ask me” and briefs to approve and disputes to rule on stop here.
planned
Batch steps not started yet. Partyline runs a headless builder for each step in turn.
in progress
A builder at work: your own session, or a batch step's builder (⚙). The pips show rounds used out of the maximum.
in review
Your checks, then each reviewer reading the change read-only. A ✓ lands next to each one as it reports.
done
PR ready, failed or stopped. Finished batch steps are committed; nothing is pushed, merged or opened as a PR.
inside a card
checks
Partyline runs the brief's checks. A check that fails and did not fail before the change sends the round back.
review
Reviewers on different models, Claude and Codex, read the change read-only and rank findings P1, P2, P3.
dispute
The builder can dispute a finding. A model that did not build the work reads the code and rules fix or dismiss.
repeat
Open P1s go back to the builder. When the checks pass and no P1 is open, the loop is PR ready.
what you're wondering
one loop per repository?
Yes, one at a time, and worktrees of a repository count as that repository. Loops in different repositories run in parallel, which is what fills the board.
who picks the models?
You do, once, in settings (ctrl-\ ,): the builder and the reviewers, each with an engine, model and effort. Engines today are Claude and Codex.
what stops a builder going too far?
Builders run with your own CLAUDE.md or AGENTS.md, settings and tools, plus two guards: they cannot push or merge, and they cannot read or write ~/.partyline. A loop also stops at its maximum number of rounds.
start a loop, then go do something else.
$ brew install partyline-sh/tap/partylineloops are part of ptln. partyline never pushes or merges.