krasnoperov.me

Aleksei Krasnoperov · October 2026

The software factory behind my products

Everything I build ships through one factory: seven live products and the factory itself. Each agent works its own line: patchrelay from Linear, Claude Code and Codex from sessions I start. Every pull request now goes through review-quill, and merge-steward merges all of them into one queue. The figure below is a simulation, not a live feed.

PATCHRELAYLINEARCLAUDE CODECODEXUSERTOLD
Issue card, then pull request; the heavy outline is the one followedStacked candidate, built on the one below; its gauge fills as CI runsGreen CIChanges requested: lifted back to its machine. Red in the queue: repaired in placesimulated ·

Stations

  1. 01

    Intake

    Issues live in Linear. Delegating one to the patchrelay app lets it write the feature; undelegating pauses it. Once a PR is approved and green, patchrelay may still repair its merge candidate, never the branch.

  2. 02

    Triage

    I triage and plan in an ordinary Claude Code or Codex session: split the work into issues and set blockedBy between the ones that touch the same ground. When patchrelay picks an issue up, a short Codex pass only decides whether it is implementation or an umbrella that coordinates child issues.

  3. 03

    Dev

    One durable worktree per issue. patchrelay drives Codex straight from Linear; I pick up the rest in Claude Code or Codex. Every path ends in a pull request.

  4. 04

    Review

    review-quill checks out the exact head, reads it against the repo’s REVIEW_WORKFLOW.md, and posts a plain GitHub approve or request changes. Requested changes come back as a review_fix run when patchrelay wrote the code, or land in the waiting ship-pr session when I did.

  5. 05

    Merge queue

    merge-steward admits a PR approved on its exact head with green checks, then builds future-main candidates, each on top of the one ahead, and runs CI on those SHAs in parallel. A candidate that conflicts with the ones below, or goes red, is repaired in place on its candidate ref, rechecked by a narrow integration review, and tested again; the approved PR head stays frozen, and nothing is stacked on a conflict until it has a candidate.

  6. 06

    Main

    Landing is a fast-forward of main to the SHA that passed. If main moved first, the candidate is rebuilt on the new tip and tested again, not reviewed again.

  7. 07

    Deploy

    A push to main runs the repo’s own Actions: stage and production on Cloudflare Workers, from the same SHA at once. On UserTold each runs a smoke test, and the issue is Done only when both pass.

  8. 08

    Feedback

    UserTold interviews the people using what shipped. Interviews become evidence, evidence becomes findings, and the findings I send land in Linear’s Triage as the next work on the line.

  9. —

    Human Needed

    Every repair loop (review_fix, ci_repair, queue and integration repair) has a budget, ten tries each on my repos. When one runs out, the issue moves to Human Needed. The agents are told to stop and ask before touching auth, migrations, bindings or dependencies.

  10. —

    GitHub, the bus

    The services never call each other. A webhook only wakes them; every decision is re-read from GitHub: head SHA, reviews, checks, refs.

Evals

11

review-quill replays

Eleven frozen cases from seven PRs in UserTold, MakeFX, Inventory and Subtitles, replayed through the real prompt in a throwaway worktree. Each is graded on the verdict, how many concerns it raised, no nits where none belong, findings anchored to changed lines, and required or forbidden markers.

34

merge-steward scenarios

patchrelay has no model eval yet. What it has around it is 34 merge-steward scenario suites (speculative cascades, a CI failure mid-chain, crash recovery, a broken main) and 134 test files in its own repo.

Running on the line

pull requests merged across 11 repositories, the products below added up
6,863
of them reviewed by review-quill and landed by merge-steward
83%
review passes; about half asked for changes
14,284
written by agents in the last 30 days
96%
463Mar836Apr1,335May1,399Jun1,270Jul599Aug701Sep238Oct 1–17
from a person’s accountby patchrelay (Codex)by agent sessions I start6,841 merged since March by people and agents; 14 bot PRs and 8 from 2025 are left out.

Since Opus 5.5, a Claude Code session carries an issue to a pull request on its own, and those sessions have taken over most of what patchrelay’s Codex runs used to do: in October every agent PR came from one. The delivery pipeline stayed. Review, the merge queue and the deploy are still what land the work, whoever wrote it. The spring and summer peak includes building two products twice; both first versions are still counted.

  • Voice interviews with your real users, inside your product.

    usertold.ai1,565 PRs

  • MakeFXlive

    Images, video and audio made with your agent on one canvas.

    makefx.app290 PRs · rebuilt from Make Effects, 1,234 PRs

  • A Spanish notebook for speaking, not just understanding.

    learnspeakrepeat.com178 PRs · rebuilt from v1, 2,534 PRs

  • A cozy farm game for Spanish vocabulary.

    granja.learnspeakrepeat.com35 PRs

  • A landscape of founders, drawn only from what they wrote themselves.

    fellowmakers.app99 PRs

  • A game-master app for Mafia and Werewolf nights.

    mafia.elen.red194 PRs

  • This site, figure included.

    krasnoperov.me73 PRs

  • patchrelayopen source

    The factory itself: patchrelay, review-quill and merge-steward.

    github.com/krasnoperov/patchrelay650 PRs

  • UserTold CLIopen source

    Review interview evidence and turn it into prioritized work.

    usertold.ai/docs/cli11 PRs

Counts from GitHub and from review-quill’s and merge-steward’s own records, October 17, 2026.