Steplog is build governance for solo agentic builders. It records what your agent did, surfaces drift, and renders the result into a single dashboard. It does not tell you what to focus on, it does not recommend, and it does not replace your judgement. Capture and nudge — never brain.
Solo builders working with coding agents have a coordination problem that traditional project tools don't solve. The agent moves fast; you move between tasks; the project's state lives partly in your head, partly in the codebase, partly in scattered chat scrollback. Things drift, and you find out three weeks later.
Steplog's bet: most of the value comes from a small, deliberate contract between the agent and a single canonical state file. Every meaningful unit of work — a build step, a design decision, a ship event — is recorded, with both a technical summary and a plain-language description. The dashboard renders from that file. The file is the truth; the dashboard is a view.
That's it. No queues, no prioritisation, no AI prioritising work for you. Just a clean record of what happened, surfaced in a way you can actually read.
state.json as the canonical contractOne file at .steplog/state.json. Validates against a JSON Schema at the project's schema-version pin. Sections, activities, decisions, nudges, security inventory, drift allowlist — all there. The schema is the source-of-truth contract; every agent reads and writes to it.
Steplog ships with a CLI (steplog) and a Claude Code plugin. Both wrap the same state-file operations: initialize, log an activity, validate, render, archive, migrate. Codex and Cursor and Aider can adopt the same protocol from AGENT_PROTOCOL.md — there's nothing Claude-specific about the contract. Cross-agent portability is a structural commitment, not a posture.
A single Python script reads state.json and emits BUILD_LOG.html. Every panel — the build map, the lifecycle pipeline, the activity timeline, the now panel, the nudges, the security inventory — is a pure function from state to HTML. The renderer doesn't connect to anything. No external services, no telemetry, no auto-recommendation engine. The output is a single static file you open in a browser.
Steplog deliberately ships in stages. Each stage is a full product; the next stage layers on without breaking what came before.
Three rules that the renderer, the schema, and every binding follow. They are not aspirations — they are the reason Steplog can be trusted.
The dashboard may show what is odd, stale, or contradictory. The dashboard may not tell the operator what to focus on or what is most important. Words like "should", "recommended", "priority", "must" are explicitly banned in any computed surface. A build-time assertion in the renderer enforces this on the longest-stale callout; it'd be enforced anywhere prescriptive language could leak.
Every binding produces a valid state.json from any compliant input. The standalone generator renders a valid BUILD_LOG.html from any compliant state.json without binding affordances. No agent gets special treatment; no binding can extend the schema in agent-specific ways without a corresponding schema update.
Every metric or rendered element computed from state.json (rather than read directly) is visually labelled as derived. The operator can always tell the difference between "Steplog wrote this down" and "Steplog computed this from what was written down." This is what makes the % complete number safe to show — not because the number is precise, but because its derived nature is visible.
Steplog governs Steplog. The dashboard you build with Steplog is the same dashboard used to govern Steplog's own development.
The repo at github.com/datafrogger/steplog uses Steplog itself as its build-governance layer. Six committed feature packs have shipped under self-governance:
Every commit on main has been logged through the protocol. Every prod-marking decision was made via the same mechanism the dashboard surfaces. When a contradiction was caught — a section marked stable while a lifecycle stage said in-progress — it was surfaced through the same nudge engine the dashboard ships with.
The dashboard you build with Steplog is the same dashboard we governed Steplog's development with. That's the strongest argument we know how to make.
The boundary is what makes the tool trustworthy. Steplog does one thing — capture and nudge — and refuses to drift into the things it isn't.