A TUI that runs coding agents over your Linear board.
Lerp answers the two questions an operator actually has.
- What’s blocked on me?
- Are the agents still working?
The model is small. Any Linear status can be a queue, and a queue’s consumer is a coding agent pointed at the ticket. The agent runs to exit, and a clean exit moves the ticket to the next status. The ticket is the message, never consumed, only moved. Chain a few queues and your board is the pipeline.
Lerp is a reconciler, in the Kubernetes sense. On every pass it compares the board with the agent processes on your machine, starts what is missing, reaps what has finished, and adopts anything a previous lerp left running.
The config for the board above is one file, checked into the repo.
teams = ["LERP"]
# lerp sets $LERP_WORKSPACE per lane
provision = 'git worktree add --detach "$LERP_WORKSPACE" HEAD'
dispose = 'git worktree remove --force "$LERP_WORKSPACE"'
[runners.claude]
vendor = "claude"
[runners.antigravity]
vendor = "antigravity"
[queues.plan]
status = "Planning"
prompt = "Read {{ticket}} and post a plan as a comment."
runner = "claude"
on_success = "Plan Review"
[queues.implement]
status = "In Progress"
prompt = "Implement {{ticket}} per its plan comment. Open a PR."
runner = "antigravity"
on_success = "In Review"teams:
- LERP
# lerp sets $LERP_WORKSPACE per lane
provision: git worktree add --detach "$LERP_WORKSPACE" HEAD
dispose: git worktree remove --force "$LERP_WORKSPACE"
runners:
claude:
vendor: claude
antigravity:
vendor: antigravity
queues:
plan:
status: Planning
prompt: Read {{ticket}} and post a plan as a comment.
runner: claude
on_success: Plan Review
implement:
status: In Progress
prompt: Implement {{ticket}} per its plan comment. Open a PR.
runner: antigravity
on_success: In Review{
"teams": ["LERP"],
"provision": "git worktree add --detach \"$LERP_WORKSPACE\" HEAD",
"dispose": "git worktree remove --force \"$LERP_WORKSPACE\"",
"runners": {
"claude": {
"vendor": "claude"
},
"antigravity": {
"vendor": "antigravity"
}
},
"queues": {
"plan": {
"status": "Planning",
"prompt": "Read {{ticket}} and post a plan as a comment.",
"runner": "claude",
"on_success": "Plan Review"
},
"implement": {
"status": "In Progress",
"prompt": "Implement {{ticket}} per its plan comment. Open a PR.",
"runner": "antigravity",
"on_success": "In Review"
}
}
}Everything runs on your machine. There is no server and no daemon, and the only account involved is your Linear account. Linear is the database. Every plan, decision, and status change lands there, and lerp keeps nothing of its own but ephemeral local logs.
Lerp works with Linear and nothing else. The agent side is pluggable.
- Claude Code
- Codex
- Antigravity
Install
brew install mattwalters/tap/lerp
Check out the docs for other install methods.
The thinking behind it is in Why lerp.
lerp /lərp/ v. To interpolate linearly; to move smoothly between two points.