step 3/6 failed 404docs link broke 6/6 verified

Docs that work (literally).

Paste a docs URL. Your coding agent runs the quickstart in a clean container, finds the step that breaks, fixes it, and proves the fix.

Try

A partial URL works. So does a tool name. Nothing leaves your browser.

Untested Docs In. Proven Docs Out.

Every quickstart is a guess until someone runs it. FirstRun runs it first.

  • Never run by anyone
  • pip install fails at step 3
  • 404 in the install link
  • Python version never stated
  • Rage quit. No bug filed.
FirstRunthe gate
  • Failure foundthe first broken step, named
  • Fix patcheda minimal docs change
  • Proven cleana second fresh container passes
  • PR openedafter you approve once
  • Run tracedneatlogs spans
  • Session recordedan Entire checkpoint
A terminal command, firstrun run with a docs URL, above six numbered quickstart steps in a clean container

Read

FirstRun reads the page and plans one step per command.

Six quickstart steps. The first two pass and step 3, run demo, fails for a new developer

Run

Every step runs in a clean container, like a new developer. The first failure stops the run.

Break, Fix, Prove: step 3 of 6 fails, the docs fix is applied, a second clean container passes 6 of 6 steps

Prove

A fix is not done until a second clean container passes the whole quickstart.

Watch a Real Run.

Every run ends with a share link. Replay one.

$ pip install git+https://github.com/HighnessAtharva/firstrun $ firstrun https://docs.getdbt.com/guides/duckdb $ firstrun pr <run> # prints the gh commands for the docs PR

Prefer the terminal? You need Docker and a Claude token from claude setup-token.

Three Tools. One Job Each.

neatlogs logo

neatlogs

Traces every run.

The planner, executor and verifier show up as spans, so a bad run has a cause you can read.

neatlogs.com
neatlogs trace of the FirstRun planner: 3 steps in 12 seconds, with the runbook JSON it produced
The first FirstRun trace, Sat Oct 10.
Entire logo

Entire

Records every session.

Each commit carries the Claude Code session that wrote it, so any line traces to a prompt.

entire.io
Entire trails view for the firstrun repository with trail number 1 in Planning
Trail #1 for the firstrun repo.
cfo.ai logo

cfo.ai

Turns cost into a plan.

The measured cost per run from neatlogs goes to Ari, the cfo.ai agent, which models the pricing.

cfo.ai
cfo.ai chat where Ari, the AI CFO, greets Atharva
Ari, the cfo.ai agent, on day one.

One Engine, Three Answers

A clean container and stored commands answer three questions a docs owner asks.

Does my quickstart work?

Break → Fix → Prove

Runs the page in a fresh container, patches what breaks, and proves the patch.

firstrun <url> Replay a broken fixture

Which release broke it?

The dbt guide step jafgen --years 6 broke in jafgen 0.4.6, 11 months before the guide shipped.

firstrun bisect <run> --package jafgen Replay the dbt bisect

What does it silently assume?

curlca-certificatesgnupgsudoproven 5/5

The AccuKnox install steps need four packages the docs never name. A fresh container proved the list.

firstrun prereqs <run> Replay the AccuKnox proof

Bisect and Prerequisite Proof replay stored commands, so they cost $0 in model calls.

The Numbers Come From Real Runs.

4upstream docs PRs opened on 3 doc sites. Each fixes a step a new developer hits.dbt #10149 dbt #10150 Entire #2724 AccuKnox #671
5 of 5open-source quickstarts verified in a fresh container
2 → 3of 4 quickstarts finish, v1 to v2
0 → 3failed steps recovered
$0.02model cost per run, measured by neatlogs (list price, not billed)

Every PR, in Public.

Opened upstream on real doc sites. Status and stars read live from GitHub.

Screenshot of pull request 10149 on dbt-labs/docs.getdbt.com: Fixing the jafgen command in the DuckDB quickstart, status Open
dbt-labs/docs.getdbt.comOpen

Fix the jafgen command in the DuckDB quickstart #10149

Brokejafgen --years 6 fails with No such option: --years.

Fixedyears is now positional, so both mentions change.

  • +2 −2 in 1 file
  • 218 repo stars
View on GitHub
Screenshot of pull request 10150 on dbt-labs/docs.getdbt.com: Stating the Python version the DuckDB quickstart needs, status Open
dbt-labs/docs.getdbt.comOpen

State the Python version the DuckDB quickstart needs #10150

Brokethe cloned repo pins networkx==3.7, which needs Python 3.12.

Fixedthe guide now names the Python version.

  • +1 −0 in 1 file
  • 218 repo stars
View on GitHub
Screenshot of pull request 2724 on entireio/cli: Saying where install.sh puts entire on Linux, status Open
entireio/cliOpen

Say where install.sh puts entire on Linux #2724

Brokeafter a good install, entire version fails with command not found.

Fixedthe docs say the binaries land in ~/.local/bin, which a clean shell lacks on PATH.

  • +2 −0 in 1 file
  • 5,169 repo stars
View on GitHub
Screenshot of pull request 671 on accuknox/help: Pointing knoxctl install at the latest release and listing APT prerequisites, status Open
accuknox/helpOpen

knoxctl install: point at the latest release and list APT prerequisites #671

Brokethe page names knoxctl 0.9.0 as latest, but the installer already fetches 0.9.58.

Fixedthe version line and four download links move to 0.9.58, and the APT steps list curl, gnupg and sudo.

  • +7 −5 in 1 file
View on GitHub
Also run, no PR needed MkDocs verified 9/10 Dagster verified, no docs PR after a source check

How FirstRun Compares.

FeatureFirstRunClaude CodeGitHub ActionsGitHub AgentsCustom workflow
Runs the quickstart as a new developerYes. Every step runs in a fresh Docker containerRuns on your machine unless you set up a sandbox [FILL: sandbox setup]Yes. A fresh runner per job, but you script each step[FILL: execution environment]Depends on the build [FILL: environment]
Plans steps from a docs URLYes. The planner writes one step per commandYes, when you prompt itNo. You write each step[FILL: input it accepts]You write the parser
Improvises when a step failsStands outYes. It classifies the failure, patches, and retries up to 3 times per stepYes, inside one sessionNo. The job fails and stops[FILL: retry behavior]Only what you code
Proves the fixYes. A second clean container must pass the whole quickstartOnly if you askOnly if you script it[FILL: verification step]Only if you code it
Telemetry per runStands outYes. neatlogs spans for planner, executor and verifier. Measured cost of $0.02 per run[FILL: telemetry setup]Logs and run history. No agent traces[FILL: telemetry]You build it
Opens the docs PRYes, after you approve onceYes, when you askOnly if you script it[FILL: PR behavior]Only if you code it
Ease of useStands outPaste a docs URL, then paste the prompt into your coding agentOne prompt, no failure classesA YAML file per quickstart[FILL: setup steps]Highest effort
Proof in public repos4 upstream PRs, all open (see the record above)[FILL: examples][FILL: examples][FILL: examples][FILL: examples]

FirstRun reads a docs quickstart and runs every step in a clean container, the way a new developer would. It stops at the first failure and classifies it. It tries a fix up to 3 times, then proves the fix with a second clean run. It asks once before it opens a PR.

FirstRun opened 4 upstream docs PRs, and all are open today. The dbt DuckDB quickstart had a broken jafgen command (#10149) and no stated Python version (#10150). The Entire CLI installer put entire on a path that a clean shell lacks (entireio/cli#2724). The AccuKnox knoxctl page named 0.9.0 as the latest release while its installer fetched 0.9.58, and its APT steps assume curl, gnupg and sudo (accuknox/help#671). MkDocs and Dagster passed with no docs change, so a run also shows when docs hold up.

Every run is a neatlogs trace, so a bad run has a readable cause. A docs bug surfaces in a run instead of in a reader who leaves without filing an issue. [FILL: merge status after the maintainers respond]

The Build, in Public.

Every step is a post on @cultist_dev.

  1. Sat Oct 10, 10:45
  2. Sat Oct 10, 12:30
  3. Sat Oct 10, 13:14
  4. Sat Oct 10, 13:26
  5. Sat Oct 10, 15:15
Portrait of Atharva Shah
solo build

Atharva Shah

Atharva is a DevRel engineer. He owns developer docs at AccuKnox and works with Altimate AI.

A quickstart that breaks without a sound is a docs bug nobody reports. FirstRun is his answer. He built it alone during the hackathon, in public.