lerp Docs Why

A TUI that runs coding agents over your Linear board.

Lerp answers the two questions an operator actually has.

  1. What’s blocked on me?
  2. 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.

Backlog Done you you Planning claude lerp Plan Review you In Progress antigravity lerp In Review

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.

  1. Claude Code
  2. Codex
  3. 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.

$ lerp init →