SOURCE ON GITHUB ↗

A DESIGN SKETCH · FROM 33 NIGHTS

The morning, as a Claude Code feature.

Over 33 nights the machine was rarely the bottleneck. I was. A night took 8 minutes of machine time; the morning took as long as I let it, and when I skipped it the next night had nothing to do. Today my morning is a markdown file. This is what I would build so it takes five minutes.

A design sketch. Every line in it comes from a real morning.

~/loops · claude morning
Morning · Wed Oct 14   3 loops ran · 22 min · $9.41 · 0 escapes

NEEDS YOU · 3                       sorted by what waiting costs
▸ 1  Merge     Fan-site update    blocks tonight’s run · 3 files · screenshot ✓ 
         m merge   d diff   v view page
  2  Decision  Permit research    count rows per permit or per building?
         a per permit (run recommends)   b per building
  3  Login     Permit research    state portal needs you; the fence denied it
         o open portal   s skip it tonight

DONE, NOTHING TO DO · 2
  ✓  Changelog watch    no changes on 3 sites       ↵ evidence
  ✓  Launch checklist   14 of 14 boxes match repo   ↵ evidence

FROM THE RUNNER, NOT THE AGENT
  refused calls 2, both expected (git push) · tasks left running 0
  quota used last night 6% of the week · login good for 23 days

You answered “per permit” 3 times. Make it a standing Decision?  y yes  n keep asking

tab next · ↵ evidence · q done · 1 of 3 cleared in 0m 40s

Five choices, each from a night it went wrong

1. Sort by what waiting costs, not by loop. A weekly fan-site update sat on an unmerged branch for eight days, and one project collected 19 unmerged night branches. A branch that blocks tonight's run goes to the top, above a question that can wait a week.

2. One keystroke per Decision. 37 Decisions queued over the run; 12 were still open at the end. A run that hands back a Decision has to write the options, and its own recommendation, so answering takes one key press.

3. Facts come from the runner, in their own panel. One report said a run took “~33 minutes”; it took 6. Another said “Blocked by the fence: none” on a night with 34 refused calls. Time, cost, refusals and quota are printed by the runner, never summarized by the agent.

4. Done means evidence. One loop ran 63 identical rechecks and called each one progress. Every “done” row opens the diff, the file or the page that proves it, and a row with nothing to open is not done.

5. Get to zero without hiding anything. My first counted morning had 13 interventions; the next 12 averaged 2.9. The cheap way to zero is to stop asking, which is how a system quietly takes decisions away from the person. Instead, when I answer the same Decision the same way three times, the screen offers to make it standing. I approve the rule once, it is listed and revocable, and approving it counts as an intervention that day. The count should fall only because the work got easier.

How I would know it worked

  • Time to clear the morning, median under five minutes. This is the number that matters most.
  • Decisions waiting more than a day: zero.
  • Mornings skipped, and whether the next night still had work to do.
  • Standing Decisions revoked within a week, as the check that rule-making is not too eager.

Not doing

  • Auto-merge. Only a person merges. The screen makes it one key press.
  • Pings at 3am. Nothing reaches me before the morning unless a run is stuck and spending.
  • A hosted dashboard. The review lives in the terminal, next to the code it is about.

The numbers here come from the essay and the receipts. The pieces Claude Code would need underneath, such as refusals in the output, no exit with work pending, and a readable quota, are in the asks.

Claude helped draft this sketch from the run record. The calls are mine (Harrison Johnson).

MORNING01 / 5

drag to scroll