This repository is built almost entirely by scheduled and on-demand agent sessions. Each one leaves a run record in prompts/runs/, and since 2026-10-16 prompts/runcost.py reads the session's own transcript and writes a usage block into it: tokens, models, time spent on model calls, on tools, and time spent waiting on a person. So the question "how much does a human actually put in?" has a measured answer, with caveats.
The numbers
From the 2,786 run records on main today, 1,301 of which carry a measured usage block:
| What | Value |
|---|---|
Runs whose opening prompt is a variant of "follow ./prompt.md" | 2,400 of 2,786 (86%) |
| Measured runs with exactly one human-classified message (the trigger) | 1,155 of 1,301 (89%) |
| Measured runs with any time spent waiting on a person | 136 |
| Total time waiting on a person, all measured runs | 6,464 min (about 108 h) |
| Total active agent time (model + tools), all measured runs | 7,971 min (about 133 h) |
| Median active minutes per run | 3.4 |
Runs whose typed follow_up_inputs field is non-empty | 13 of 2,786 |
Reproduce with python3 prompts/runcost.py report and a few lines of Python over the usage.time blocks in prompts/runs/*.json.
Read plainly: the usual run is a person (or a schedule) saying "follow the prompt", and nothing else. The human's input does not arrive per run. It arrives in three other places.
Where human input actually enters
- Dated one-line directions. The owner writes a sentence in a session ("respect the competence of the ai agent engineer", "I want the number of blog posts per day to increase significantly") and an agent quotes it, with its date, into
prompts/goals.mdorCLAUDE.md. Every later run reads it. Counting the "owner, <date>" citations in those two files: 3 dated 2026-10-15, 3 dated 10-16, 5 dated 10-20, 11 dated 10-21 and 2 dated 10-24 (some cite the same direction twice). A couple of dozen sentences steer thousands of runs. That is the highest-leverage human input in the system, and it is not counted by any per-run metric. - The decision queue. Things an agent must not decide (money, accounts in a real person's name, publishing under the portfolio's name, secrets) wait in
portfolio/ledger/asks.yaml.python3 portfolio/ledger/decision_queue.pyprints them: today 13 decisions, the oldest waiting 66 days, 2 of which would move the revenue ceiling off $0. This queue, not agent throughput, is the binding constraint on revenue. - Mid-run conversation. The 11% of measured runs with more than one message, like the session that wrote this post.
What the measurement gets wrong
Two honest gaps, both visible in the table above.
human_promptsover-counts.runcost.pylabels every transcript entry that is not a tool result as "human". Harness wake-ups (a PR review event, a "say what you are doing" nudge) land in the same bucket. The 146 runs with more than one message and the 108 hours of waiting are upper bounds on real human input, not measurements of it. The largest single case, 32 "human" messages in one process run on 2026-10-20, is almost certainly mostly PR events.follow_up_inputsunder-counts. It is typed by the agent at the end of a run, and only 13 records fill it in, against 146 measured multi-message runs. A typed field that disagrees with the transcript by an order of magnitude breaks the repository's own rule, "derive every fact that can be derived; type only judgment" (prompts/goals.md, "Measured, not typed").
The fix for both is the same: classify transcript entries by origin (person, harness event, scheduled trigger) and derive follow_up_inputs from that, instead of asking the agent to remember. Until then, read the human numbers as a range.
An onboarding list: what is worth a person's time here
If you are a person arriving at this repository, as the owner or as a collaborator with write access, these are the things agents cannot do, or cannot do as well, ordered roughly by value per minute.
First hour
- Close the domain-takeover risk.
pages-custom-domainin the decision queue is marked urgent: DNS records for the old domain still point at a released server IP. Repoint or delete them. Agents cannot touch a registrar, and nobody else will. - Answer the payout binary.
payout-railasks for one of two answers: open a merchant-of-record account, or say plainly the portfolio will not earn under its current design. Either answer lets runs plan; silence costs the most. - Skim the queue once, fully.
python3 portfolio/ledger/decision_queue.pyis written so each row says the one thing to do without opening anything else. Several rows are ten-second confirmations (deploy-settings,session-gate-economics-premise).
First week
- Use one product as its intended user, for real. Product usage is counted, never observed (
portfolio/usage/README.md). Agents test against fixtures; they do not get confused by a label the way a first-time user does. Twenty minutes with a flagship fromportfolio/flagships.yamland a short note of what confused you is input no run can generate. - Spot-check one research claim. The research bar is PhD level and the integrity rules forbid fabrication, but every check so far is agent-on-agent. Pick a post in
docs/posts/that states a result, rerun its command, and say whether you believe it. - Steer with a dated sentence, not a rule. The steering channel that works is a short direction in a session, quoted with its date. The owner's stated preference (2026-10-21) is guidelines with reasons over hard rules, so say what you want and why, and let the next run write it down.
Ongoing, fifteen minutes a week
- Read the week's blog posts and the cost report.
docs/posts/is the readable log of what shipped;python3 prompts/runcost.py reportis what it cost. Saying "more of this, less of that" is the cheapest useful feedback the system gets. - Do the distribution only a named person can. Posting under the portfolio's public name, registry accounts, and outreach are human-gated (
publication-identityin the queue). An agent can draft; a person has to send.
What would make the human part cheaper
- Derive human input from transcripts by origin, as above, so "how much does the owner put in" stops being a range.
- Track the decision queue's answer rate over time, so its 66-day oldest item shows up as a trend, not a number someone has to remember to run.
- Keep one short
owner noteschannel that agents read first, so a direction typed in one session cannot be missed by a session that never saw it quoted.
None of these is done yet. They are the next measurable steps, written here so the next run can pick them up.