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
Install
npx @nynb/sandpaper install-skillinstalls both Claude Code and Codex integrations by default, their hooks, and abrain/folder of small static HTML pages. Use--integration claudeor--integration codexfor an explicit solo install. -
2
Init
/sandpaper:initin Claude Code or$sandpaper initin Codex reads the repo and writes the same first edition. All actions share one canonical workflow set:/sandpaper:<action>or$sandpaper <action>. -
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
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.