lerp Docs Why lerp GitHub latest

Reading the board

LINEAR_API_KEY=... lerp

lerp opens the TUI, and the TUI is the engine: the loop runs while it is open, and there is no daemon.

Two panels share the screen, and lerp opens focused on the Inbox: the loop runs the board on its own, so what is worth the first look is what needs you. The list owns that screen — both panels start with their pane closed, so each table opens at full width — and 2 moves to the Work panel.

1 and 2 choose a panel and tab cycles between them; / pick a row. ? opens the full key list at any time, and q quits.

The Work panel

The Work view is one list of what the machine is doing with the board, grouped by queue: every ticket sitting in each queue’s status, in the loop’s own pickup order, with the ones running now at the top of their own group.

A running row carries its state — provisioning or running — the run’s elapsed time, and the tokens it has spent, as its own log reports them, plus a dollar figure beside the tokens where its runner’s stream states one — no lerp price table stands in for a runner that stays silent on cost. Where the runner’s own log distinguishes subagents and its [runners.*] block names a context window (see lerp.toml ), the row also carries a percentage: how full the fullest agent in the run is, faint until it crosses 80%, where it turns to — a run with no configured window shows tokens only, never a guessed figure. A run inherited from a previous lerp reads as running like any other, and carries the run’s own age and the run’s own total, not the stretch since it was adopted: the log it has already written is the evidence, and lerp reads it back rather than starting the count over. Under it, once the run has a log, a second line reads how that run is going — see watching a run .

Claude settles what a run cost only at the very end, on the same line that closes its log — the moment the row itself is about to disappear — so that figure shows up on the status bar’s exit note instead, where it survives the row.

A waiting row is shown faint with the reason it waits, blocked or claimed. enter on one shows where it sits in pickup order and what gates it.

The panel title and the status bar carry the capacity, 2/3 running, which is what says whether anything can start — every live run counts against it, whichever lane it landed on, with · +1 over beside it while more runs are live than the limit allows.

Ordering is not a keystroke. To change what runs next, move tickets in Linear; to run one now regardless, see starting past the limit .

The Inbox panel

The Inbox view lists what waits on a human: unclaimed tickets, and the operator’s own claimed tickets, sitting in a status no queue serves. It is a table, one row per ticket, under a header naming its columns — the identifier, the leverage, the real Linear status, the project, the priority, and then the title, which takes whatever the panel has left. The vocabulary is Linear’s own, never a category invented by lerp.

A status the configured pipeline never names — neither a queue’s status nor any on_success or on_failure target — is marked, but only where Linear files it as started: a ticket resting in a backlog, a triage or a Todo column has not entered the pipeline, which is the ordinary state of most of a board, while one moved into a status that means work is under way by something the pipeline knows nothing about is the fingerprint of a ticket that left it. ? spells out that mark and the other two the table draws.

The panel opens on what is blocked on you — where runs fail, where they finish, and the statuses the pipeline never named the ticket into — with the intake it never left folded to one line at the foot of the table: 28 waiting to enter the pipeline — ] to browse. Being blocked-on is an interrupt, while pulling from the backlog is a sit-down motion, so only one of them owns the default view; finding tickets is the other one, and the sorting, scoping, slicing and searching that go with it. A ticket you have claimed resting in an intake status is never folded: no pass can pick it up again while the claim stands, so it is blocked on you wherever Linear files it.

The main pane

The list owns the screen until you ask for a ticket. Selecting a row and pressing enter reads it into a main pane that opens beside the table and closes again with esc — its body, where the plan lives, and the comments on it, the verdict a run left behind, so a parked ticket can be decided from that one screen. Each panel remembers its own answer about whether the pane is open.

That is a read and stays one: nothing composes, replies, or navigates on to another ticket, and o opens the ticket in Linear for everything else.

An open main pane is a surface in the tab cycle, and while it holds the keys its border says so and / scroll it a line at a time.

Colour

Colour marks state and never carries it alone: every state also has a shape or a word, so what the screen says survives a 16-colour terminal and a colour-blind operator. Which half of the palette you get, and how to turn colour off, are environment variables .