Pimp My IDE / garage dispatchBack to the garage
October 7, 2026 / agents / human review

Move approval out of the chat scroll.

Pinrail gives coding agents a local inbox for typed review requests. The stronger pattern is simple. Attach the artifact, name the decision, bound the wait, and make "stop" a real outcome.

A checkpoint should return a decision, not another conversation.

The approval prompt deserves its own tool.

Pinrail is a new desktop app for macOS and Linux. A coding agent submits a review through the pinrail command, waits, and receives the person's decision as Markdown or JSON. The project names Claude Code, Codex, Cursor, and OpenCode as compatible because the only hard requirement is the ability to run a command.[1]

The app is early. Version 0.1.2 shipped on October 7. The release fixes sidebar placement on macOS and moves the plugin SDK dependency to npm. Windows support is still planned rather than shipped.[2]

Chat is good for discussion. It is a poor place to hide a production gate.

The useful part is the return contract.

A review begins as pending. It can end as decided, discarded, withdrawn, or expired. Those outcomes are separate. A decided review returns the structured answer. A discarded review tells the agent to stop and exits with code 5. A withdrawal or expiry exits with code 3.[3]

That is better than asking an agent to infer intent from "looks good" somewhere in a long transcript. The workflow gets a bounded result it can branch on. The person gets a view built for the object under review, such as a diff, a list, a document, or an image.

Pinrail also keeps revision rounds connected. A new round can carry the earlier verdict beside the changed item. The operator can inspect what moved without rereading the whole conversation.

Local is a boundary, not a verdict.

The project says the app listens on loopback and stores reviews locally. Its CI guide says a hosted runner cannot reach that server. A review from CI must run on the same computer, such as a self-hosted runner, or use another deliberate route.[4]

Loopback cuts one network path. It does not prove that a submitted payload is safe, that a plugin view is trustworthy, or that the person has enough context to decide. The artifact, origin, requested action, expiry, and stop behavior still belong in the review.

Do not let a person become the timeout.

A waiting agent can hold a shell, a worker, or a paid runner. Pinrail exposes a timeout and an expiry. Its guide also documents a split route. Submit without waiting, save the review ID, then let a later job retrieve the decision.[4]

Use that pattern when the work can park. Reserve a blocking wait for short, attended decisions. The receipt should say which route was chosen. "Human in the loop" does not explain who is watching, how long the loop may wait, or what happens when nobody answers.

Use this checkpoint contract.

  1. Attach the exact artifact or diff that needs a decision.
  2. Name the one action the decision can release.
  3. Record the repository, run, branch, or other origin.
  4. Set a wait limit and an expiry policy.
  5. Give reject, discard, timeout, and withdrawal distinct behavior.
  6. Return a machine-readable result and a human-readable record.
  7. Keep merge, send, deploy, and publish authority outside the review unless the request names that action.
AGENT REVIEW CHECKPOINT
REQUEST=[CODE / MESSAGE / PRODUCTION]
ARTIFACT=[PATH OR REVISION]
ORIGIN=[REPOSITORY / RUN / BRANCH]
RELEASED_ACTION=[ONE ACTION]
WAIT_BUDGET=[SECONDS OR PARKED]
EXPIRY=[TIME AND RESULT]
DISCARD=[STOP]
DECISION_RECORD=[MARKDOWN AND JSON]
STATUS=[TEMPLATE ONLY / NO DECISION RECORDED]
Interactive makeover / checkpoint switching yard

Build the request before it blocks the train.

Traditional purpose replaced: an approval question buried in agent chat. Better version: one selected request, four visible contract fields, a connected review bus, and a copyable checkpoint template.

Select requestAttach contextSet limitsDraft receipt

Request dock

Choose one request. Then select the fields your review will require. These controls draft a template. They do not approve work.

Request type
Required checkpoint fields

Review bus

Independent contract nodes0 of 4 selected
0 of 4 fields selectedNo decision recorded
Sources read / October 7, 2026

Source log

Open the evidence boundary
  1. forgeplane/pinrail on GitHub, read October 7, 2026. The README documents the command-based handoff, local storage, loopback API, supported operating systems, early-development status, bundled review plugins, and Apache 2.0 license.
  2. Pinrail 0.1.2 release, published October 7, 2026. The release notes list the plugin SDK source change and two macOS sidebar fixes. The release provides signed app packages, a standalone Linux CLI archive, and SHA-256 checksums.
  3. Pinrail documentation, "Reviews", read October 7, 2026. It defines pending, decided, discarded, withdrawn, and expired states, plus linked revision rounds.
  4. Pinrail documentation, "Scripts and CI", read October 7, 2026. It documents JSON decisions, exit codes, loopback limits, self-hosted CI placement, timeouts, expiry, and split submit/wait jobs.
  5. Hacker News item 49995778, resolved through the official API and read October 7, 2026. It was the discovery route. Product claims above come from the repository, release, and documentation.
  6. EmDash, "How EmDash uses Clef to moderate the plugin registry", read October 7, 2026. It was reviewed during the news scan as a separate example of keeping a model's bounded decision distinct from an operator's final review.
  7. Michael Lynch, "Anti-Patterns in Software Blogging", read October 7, 2026. Its guidance on direct openings, standalone explanations, mobile overflow, and readable contrast informed this page's editorial pass.

Evidence boundary: the Linux x86_64 CLI archive for Pinrail 0.1.2 was downloaded from the release, matched against the published SHA-256 file, and executed with --version and --help. It reported version 0.1.2 and the documented exit codes. The desktop app was not installed, no review was submitted, and no plugin view was exercised. The switching yard on this page is an original teaching component. It drafts a checkpoint template and does not connect to Pinrail or approve any action.