for repos built with Claude Code or Codex · open source

Your repo can
explain itself.

Sandpaper puts a small website inside your repo — the plan, the decisions, the history — and your Claude Code or Codex agent stamps it fresh after every working session. That site is the brain: plain static HTML, publish it anywhere.

A real stamp of the repo's brain/ pages — entry w-0193 in the live log.

P80 grit · coarse

The work survives.
The context doesn't.

The scrollback dies

You built it in a rush of terminal sessions. Close the window and the reasoning is gone.

Decisions live nowhere

Three weeks in, nobody remembers why anything is the way it is — including the agent.

Hand-written docs rot

By Friday they describe a different project. Everyone knows it, so nobody reads them.

Three weeks from now, you're the stranger in your own repo.

P240 · first pass

One brain, either agent.

  1. 1

    Install

    npx @nynb/sandpaper install-skill installs both Claude Code and Codex integrations by default, their hooks, and a brain/ folder of small static HTML pages. Use --integration claude or --integration codex for an explicit solo install.

  2. 2

    Init

    /sandpaper:init in Claude Code or $sandpaper init in Codex reads the repo and writes the same first edition. All actions share one canonical workflow set: /sandpaper:<action> or $sandpaper <action>.

  3. 3

    Work

    Just build. After every real session the agent stamps the brain; a hook won't let the session end unstamped. A stamp is a few templated edits — seconds, not a rewrite.

  4. 4

    Read & steer

    Open the brain anywhere. You steer the next session instead of reconstructing the last one.

P600 · taking shape

Not docs you write —
a record the work leaves behind.

And it's written for two readers: you, and the agent itself. Every fresh session rehydrates from the brain's digest before its first turn — the same pages that keep you oriented keep the agent from starting cold.

NOW

One present-tense line: what's happening in the repo, right now. Rewritten every stamp.

Canvas

Rich explanations land here as boards — diagrams, comparisons, walkthroughs — instead of dying in scrollback.

Plan

Initiatives and tasks with honest progress bars, derived from status. Never hand-tinted.

Log

One line per session, newest first. Append-only, never rewritten: the heartbeat.

Decisions

Why it's built this way: each call, what it replaced, and the question it answered.

Learnings

The gotchas that bit, so they only bite once — for you and the agent.

Every entry links to the real source — never a copy — so it can't rot the way copied docs do.

P1200 · fine

On your machine, the page is an editing surface.

Serve the brain locally and every element becomes refinable — the file on disk stays the single source of truth, the page live-reloads from it.

Sand

Point at any element, say the change in plain words. The agent edits the file.

Hands

Edit text directly on the page — no AI, just you. Saved straight to disk.

Sling

Too big for a tweak? Sling it: a terminal-ready instruction, copied and ready to paste into your next session.

Claude Code and Codex are both first-class toolbar providers. The local manifest supplies the default, a CLI flag can override only that launch, and each tab keeps a tab-local selection; Make default is explicit. There is no silent fallback, and switching performs no hidden context handoff. Each provider resumes only its own page-scoped session and project/page/provider-scoped transcript; New session clears that scope only after server success.

Provider processes have directory-level write access. The server hashes the selected document's actual bytes for Saved/Replied and Undo truth. External reported paths are best-effort detection only: Sandpaper cannot verify or undo them. Codex reuses saved codex login authentication in its controlled embedded runtime. Claude shows supplied cost; Codex shows supplied total tokens; neither measure is estimated or converted.

The toolbar exists only when served locally. A published brain is read-only, by design.

P2000 · polish

General notes.

Opinions, held firmly — the invariants everything above obeys.

  • Link, never copy. Entries point at the canonical anchor in your spec or source. No second copy to drift.
  • The disk is the truth. The page reflects the file — never ahead of it, never instead of it.
  • Zero dependencies. Node ≥ 18 built-ins only. Nothing to audit, nothing to break.
  • Always publishable. No build step. Point any static host at the folder and it works.
  • Local-first. Everything runs on 127.0.0.1. Publishing is your call, not the default.

Sandpaper is built with Sandpaper.

Its own brain is public — every decision, every gotcha, every stamped session of the project you're reading about, kept by the agent that built it.

drawing schedule · counts live in the brain · rev 2026-07-02

Run it on your repo

then use /sandpaper:init in Claude Code or $sandpaper init in Codex — and npx @nynb/sandpaper open to view. No account needed — npx github:codevalley/sandpaper install-skill works too.

Want to help? It's plain HTML and zero-dependency Node — read AGENTS.md or CLAUDE.md, open an issue, or send a PR.