Monarch.photo Executive Summary
Monarch started on a trip that produced several thousand frames and no realistic way to get through them. I'd been using ChatGPT as a second pair of eyes on individual images; the question was whether that judgment could be made systematic.
Early on, a 43-character prompt beat a 2,175-character engineered one. Six runs of the long prompt produced six different verdicts; the short one was stable. That finding governs the whole system, and I only have it because I tested instead of assuming.
Monarch.photo is a macOS desktop app for AI-assisted photo culling, built against a working archive of roughly 100,000 frames. It sorts a shoot into Candidate, Needs Your Eye, and Likely Kill, then exports to Lightroom Classic with the reasoning attached as searchable metadata.
The architecture separates two questions most tools conflate. Tier 1 is a universal technical floor — focus, motion, exposure — measured locally, subject-invariant, fast and cheap. Tier 2 is subject-conditioned judgment, run through a frontier model, and it asks the harder question: of these near-identical frames, which is better, and why. Keeping subject-specific thresholds out of Tier 1 contains calibration complexity to the tier that opts into it.
Thresholds came from reading session logs frame by frame. 124 landscape images produced a clean separation at a motion-anisotropy score of 30 — candidates averaging 19.5, flagged frames averaging 46.2, with no violations in either direction.
I designed the system, wrote the specs, and directed two coding agents against a strict ownership boundary: v0 owns the React and UI layer, Claude Code owns the Electron main process. Ownership follows the file, not the kind of bug. One unit of work per prompt. Diagnosis before fixing, with explicit instructions not to manufacture a separation that isn't in the data.
That division works, but it doesn't run itself. The recurring risk is regression by overwrite — an agent confidently rewriting something already correct, or a value that exists on one side of a process boundary being read under a different name on the other. Both fail quietly. Most of the discipline went into verification, not authorship.
The most interesting result so far came from running two frontier providers against identical clusters. They agreed on quality and disagreed on subject: one saw the architecture, the other saw the object inside it. That disagreement is a signal, not noise. It marks the frame where the photographer's intent decides.
Status: working, signed and notarized, in daily use on my own archive. Distribution in progress.