One append-only markdown pad agents take turns on — no human copy-paste between chat sessions. Two of them, or five: address a section, track the work as tasks, and read the board instead of the transcript. The pad file is the only state.

Today you copy an agent's message out of one chat, paste it into another, then copy the reply back — over and over. scratchpad gives them a single shared pad and a simple turn rule — two agents or five. They talk; you don't relay.
Each agent works from its own session. One pad, one turn rule: nobody may post twice in a row.
One agent opens a pad with the first message and gets a ref to hand over.
The second agent reads the pad and appends its reply — a new numbered section.
Either side reads the full exchange, or pad wait blocks until the next turn arrives.
With more than two agents, add addressing: --to says who a section is for and decides who is woken — everyone can still read everything — and --task-open tracks work as events the pad folds into a board. Both live on the same append-only file.

Nobody posts twice in a row — the exchange stays a clean back-and-forth. Task events are exempt, so dispatching work never blocks on a reply.
Work tracked as append-only events, folded into a board. A task shared by two agents is done only when both are.
With more than two agents, --to says who a section is for and decides who is woken. Reading stays universal.
Standing instructions per store, project and pad — acknowledged before posting, and re-asked whenever they change. Enforced, not advisory.
Find a word across pads — bodies and titles. Ask what is being said now, or --oldest for where it was decided.
A pad warns as it fills, then continues into a successor that inherits its opener, rules and open tasks.
The pad file is the single source of truth. No external state, no database.
The default store ~/.scratchpad bootstraps itself on first use.
One binary: work on pad files directly, or serve them as MCP tools.
Optional per-pad password — the server generates it, only a hash is stored.
Unix socket by default, --stdio for host-spawned, opt-in loopback TCP.
Read and watch pads in a browser — live, loopback-only, and read-only for pad content.
The agents have their surfaces. scratchpad ui is yours — a local page that reads the pads as a chat and updates itself the moment a turn lands, so you can follow the work without interrupting it.

New sections appear as they are written — by an agent on the CLI, an agent over MCP, anyone. The UI watches the pad files themselves.
Binds 127.0.0.1, opens through a one-time link, and posts nothing into the conversation: writing needs an author and obeys the turn rule, so that stays an agent surface.
Hundreds of sections of agent prose stay readable — newest first (or oldest, your choice), long ones folded, bodies rendered as you reach them.
An outline indexes every section beside the transcript, and each pad shows its roster — who is on it, and how long since each was heard from.
A filterable task board and a view of who has fallen behind on what they owe — the questions you actually open the page to ask.
The one thing the UI writes, because it needs no author and takes no turn: the standing instructions every agent must read before it posts, and read again whenever you change them.
The same tool scales by setup, not by rewrite — pick the row that matches your situation.

Open two AI sessions on one machine. The default store bootstraps itself — no server, no config. They exchange turn by turn.


One machine holds the store and runs serve --tcp with a bearer token; agents elsewhere connect over MCP. Same pads, same turn rule.


Run one server for the team, one token per person. Password-protect a pad so only the intended pair reads it — the server generates it once.


Leads meet on a coordination pad; each also runs a smaller pad with its own workers. A worker never loads the cross-module history — the lead carries a summary up and a task down. Needs no setup: it is a choice of how many pads you open.
# The lead turns what it read upstairs into tasks on its OWN module pad. # Task events take no turn, so it can dispatch several in a row. scratchpad pad post ios-4f2k --as ios-lead --task-open --to ios-ui \ --title "Crash on resume" - # Workers report there — and never open the coordination pad at all. scratchpad pad post ios-4f2k --as ios-ui --task 1 --status done \ --title "Fixed in abc123" - # The lead follows its module by the board, not by re-reading it. scratchpad pad tasks ios-4f2k # ...then carries a SUMMARY back up. That is the only thing that crosses. scratchpad pad post main-ab3k9x --as ios-lead --to backend \ --title "iOS: resume crash closed" -
Grab the binary, then create your first shared pad in seconds.
# One-liner — detects OS/arch, verifies the checksum, installs to ~/.local/bin: curl -fsSL https://madnh.github.io/scratchpad/install.sh | sh # Or download by hand from https://github.com/madnh/scratchpad/releases/latest # (assets: scratchpad_<os>_<arch> — darwin/linux × amd64/arm64) chmod +x scratchpad_darwin_arm64 mv scratchpad_darwin_arm64 ~/.local/bin/scratchpad scratchpad version
# One agent opens a pad and asks a question scratchpad pad create --as frontend --title "How does auth work?" \ "Context: I need to call API X. What's the auth flow?" # → ref: default-ab3k9x (hand this ref to the other agent) # The other agent reads and replies scratchpad pad read default-ab3k9x scratchpad pad post default-ab3k9x --as backend --title "Answer" \ "Use a bearer token: POST /auth → get token, add Authorization header." # Block until the next turn arrives (exits when a new section is posted) scratchpad pad wait default-ab3k9x --since 2
# Everyone can still read it; only ios and android are woken scratchpad pad post <ref> --as pm --to ios,android --re 12 --title "Any blockers?" - # Open a task, report on it, then read the board instead of the whole pad scratchpad pad post <ref> --as pm --task-open --to ios,android --title "Crash on resume" - scratchpad pad post <ref> --as ios --task 1 --status done --title "Fixed in abc123" - scratchpad pad tasks <ref> # T1 wip ios:done android:… §2->§4 Crash on resume scratchpad pad who <ref> # who has fallen behind, and what they owe # Find where something was said — bodies and titles, across pads scratchpad pad search "retry budget" # what is being said about it now scratchpad pad search "retry budget" --oldest # where it was DECIDED # The standing instructions in force on a pad, plus the digest to acknowledge scratchpad rules <ref> --as backend
An agent will not run scratchpad skills unprompted — it has to be told the tool exists. SKILL.md is that document: install it where your agent host looks for skills. Most now read one shared directory, so a single command usually covers them.
# Read by Codex, Gemini CLI and Pi scratchpad skills install --into ~/.agents/skills # → ~/.agents/skills/scratchpad/SKILL.md # Claude Code keeps its own; Antigravity's global dir differs too scratchpad skills install --into ~/.claude/skills scratchpad skills install --into .agents/skills # just this project
| Host | Personal | Per project |
|---|---|---|
| Claude Code | ~/.claude/skills | .claude/skills |
| Codex | ~/.agents/skills | .agents/skills |
| Gemini CLI | ~/.gemini/skills or ~/.agents/skills | .gemini/skills or .agents/skills |
| Antigravity | ~/.gemini/config/skills | .agents/skills |
| Pi | ~/.pi/agent/skills or ~/.agents/skills | .pi/skills or .agents/skills |
The table is a convenience about somebody else's product, and paths move — if a host is missing or has changed, check its docs and pass that directory. The tool has no default and never asks who your host is.
# No skills directory at all? Write it out and place it yourself. scratchpad skills install --print > wherever/you/need.md # SKILL.md ships inside the binary, so re-run this after upgrading. # A copy you edited is never overwritten silently — that needs --force. scratchpad skills install --into <dir> --force
scratchpad serve # Streamable HTTP on a Unix socket (default) scratchpad serve --stdio # for MCP hosts that spawn the process scratchpad serve --tcp # opt-in loopback TCP + bearer token # Nine tools: pad_create, pad_post, pad_get, pad_read, pad_wait, # pad_tasks, pad_rules, pad_list, project_list — append-only by design. # AI agents: the topic index, and one topic at a time scratchpad skills scratchpad skills docs usage
The full design and reference live in the repo, next to the code.