The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Spool listing page.
思簿 — a context hub for long-running projects. Logo: a spool viewed from above, its thread pulling free — watch it assemble.
spoolapp.org ·
Download for macOS ·
Download for Windows
The site walks the whole loop in an interactive demo (English / 中文) — no install needed.
macOS: a signed, Apple-notarized .dmg. Windows: an x64 installer, not code-signed yet.
Free, offline, no account.
At the moment you naturally produce a fragment of information — a good answer from an AI, a decision buried in an email, a link to a document, a half-formed thought — Spool lets you capture that fragment effortlessly, files fragments under a two-tier Workspace → Project structure, and packs any project into a paste-ready briefing on demand — so you can re-enter a project, or re-brief an AI, instantly.
LLMs do not remember your project. Every new conversation, you re-explain the context. Across multiple AIs, multiple tabs, multiple emails, spanning many days, a project's context gets shredded — and reassembling it falls on your memory.
Spool compresses "re-explaining" into "a single paste."
v0.5.0 — feature-complete and shipping on macOS and Windows. The two builds run the same library, the same pack, and the same capture gesture: a double-tap of one modifier key, ⌥ on macOS and Ctrl on Windows. What did not cross over is the macOS-specific work around focus handling and browser tab-title capture, so a Windows capture records the source application rather than the page. Linux is not implemented.
.dmg, straight from Releases. Not on the Mac App Store — sandboxing conflicts structurally with the global capture trigger.INDEX.md plus one .md per project, sub-workspaces as sub-directories) that an AI opens a piece at a time. Nothing is summarized away to fit a budget.The optional external-AI routes below add no keys or accounts to Spool: they drive a CLI you installed and logged into yourself. (Spool's own API engine, added in v0.6.2, is the one route that does hold a key — see The API engine.)
ai note: in a pack and can never be read as your own judgement — that distinction is the whole point of the authority header.All twelve phases of the original implementation roadmap were landed in v0.3.0:
| Phase | Surface |
|---|---|
| 1 | Data layer (SQLite + workspaces / projects / blocks / attachments + FTS5) |
| 2 | UI skeleton + project view |
| 3 | Global shortcut capture |
| 4 | Context packer (the crown feature) — pure function, paste-ready Markdown |
| 5 | Capture hardening: always-on-top overlay window, double-tap ⌥ trigger, editable source badge, browser tab-title auto-detection |
| 6 | Block workbench: file / folder / URL attachments, inline edit, annotations, smart truncation, drag-to-attach |
| 7 | Full-text search: FTS5 trigram tokenizer (Chinese-correct) + short-query LIKE fallback, contextual three-line snippets |
| 8 | Deadlines, active / parked / done status, three-section sidebar (summary + cross-workspace focus + workspace tree), drag-between-workspaces, shortcut configuration UI |
| 9 | Project completion + digest view (conclusion · pinned blocks · files & links) |
| 10 | @-mention references between projects in the same workspace |
| 11 | |
| 12 | Settings panel (shortcuts, language, MCP hookup, autostart, clear data), unified toast surface, tail-window for long projects, packaging |
spool-ai), with your own key and quota — the boundary is the process, not a promise.The full product constitution, rejected ideas, and the feature filter are in PLAN_EN.md §2.
tauri-plugin-sql, FTS5 with the trigram tokenizerspool --mcp, stdio, default OFF): the AI surface — 19 tools, 12 read (list/search/dedup/pack) plus 7 consented, attributed write toolsclaude, codex, or gemini runs as a local subprocess for Follow Up, Weekly Review, and follow-up-goal drafting — detected on disk, never bundled, never given a keyRequirements: Node 20+, Rust toolchain (stable), Tauri 2 system dependencies (see the Tauri docs for your OS).
On macOS, the double-tap-⌥ capture trigger requires Input Monitoring permission (System Settings → Privacy & Security). Spool checks its status at launch and shows a setup banner while it is missing; using that banner's capture setup action triggers the macOS request, and the grant takes effect after restarting Spool. Accessibility is optional and does two things. First, it makes a consumed double-tap exclusive: when Spool captures, it deletes the second ⌥ press from the event stream, so other apps bound to the same gesture (Claude Desktop's quick entry, for one) do not also fire. Second, it is what hands the capture toast the keyboard, so the note box can be typed into straight away — macOS delivers keystrokes only to the active app, and AXFrontmost is the one route to activation that is honoured immediately rather than deferred. Without Accessibility, capture still works, but those apps may fire alongside it and the note box has to be clicked before it will take typing. A bare double-tap with nothing freshly copied is still passed through to them untouched. A user-bound capture shortcut (Settings → Shortcuts) works without either permission. On first capture from a browser, macOS will prompt once for Automation permission against that browser — granting it lets Spool tag captures with the active tab title instead of just the app name.
On Windows there is nothing to grant. The double-tap of Ctrl is read through Raw Input, which asks for no permission and is not a keyboard hook. There is no tab-title equivalent: a capture records the application you copied from.
This route ships no built-in AI — nothing to configure, and no key: your client brings its own. (Spool does have one route of its own that takes a key, and it is off until you turn it on — see The API engine.) Spool speaks the Model Context Protocol: your own AI client (Claude Desktop, Codex — including a Codex conversation inside the ChatGPT desktop app — Cursor, or another MCP-capable tool) connects to spool --mcp over stdio and works with your projects directly. An ordinary ChatGPT conversation runs remotely and cannot reach a local stdio server.
You do not need any of this to use Spool with an AI. ⌘⇧P (Ctrl+Shift+P) packs a project into Markdown you paste into a browser tab — nothing to install, nothing to connect, and no feature is withheld from you for skipping it. MCP buys exactly one thing: your AI fetches the context itself instead of waiting for you to paste it, and can file conclusions back with its name on them.
Claude · MCP) and shows a distinct badge in the GUI; an AI can never overwrite a summary you wrote by hand, never retire one of your blocks, and never write a note that reads as if you wrote it.You talk to your AI in plain language — no tool names, no menus, and nothing to paste to set it
up. The server states its own rules and the phrasings you are likely to use in the initialize
instructions it sends every client, so a freshly connected AI opens by naming what it can do with
your actual projects. That copy arrives whether or not anyone remembered to hand it over.
Reading through a chat client is one half. The other half is checking what changed while you were
away — and for that Spool can drive a coding CLI you already own. If claude (Claude Code),
codex (Codex CLI), or gemini (Gemini CLI) is on your machine and logged in, Spool detects it
and offers these actions:
| Action | What it does | Reaches the web |
|---|---|---|
| Follow up | Search for news against lines you wrote describing what to watch; findings queue for your review | yes |
| Weekly review | One review across every project, kept in the dedicated Weekly Review screen | no |
| Draft follow-up goals | Suggest the lines worth watching for one project; you decide what to keep | no |
Three things make this safe to leave switched on, and all three are deliberate:
The actions require the MCP service and AI-write permission, at least one supported CLI installed and logged in, and a per-run time limit you set. If several CLIs are available, you can choose between them. Codex has one honest limitation Spool states in the UI rather than hiding: its built-in shell tool cannot be removed the way Claude Code's can, so Spool runs it read-only sandboxed instead. Gemini can run Weekly Review and draft goals, but not Follow Up.
The two routes above borrow someone else's connection — your MCP client's, or a CLI you logged into. The API engine is the one route where Spool holds the key itself. It is off until you switch it on in Settings → Engine, and with it off nothing here runs and nothing is stored.
| Action | What it does |
|---|---|
| Compress | Rewrites a project's pack shorter, and shows you a side-by-side check of what changed before anything is saved |
| Out-of-date check | Looks for older blocks a newer block has replaced, and asks you what to do about each one — merge, let the new one stand, or nothing |
What is worth knowing before you turn it on:
Your own key, your own bill. You paste a key for an OpenAI-compatible endpoint (DeepSeek by default; any HTTPS endpoint works). Every run spends your money, including a run you cancel partway — the provider still charges for what it already produced.
The request comes from a subprocess, not from Spool. Spool's own process still has no HTTP client in it, and you can check that rather than take our word for it:
The network call is made by a small bundled binary, spool-ai, which Spool starts, talks to over
stdin/stdout, and which exits when the run ends. It refuses plain http://, and the key reaches it
only through stdin — never through the command line, where any process on the machine could read it.
Where the key lives. macOS: the system Keychain. Windows: a 0600 file in Spool's own data
directory. It is never written to settings.json, and never printed to a log or an error message.
Nothing is written to your library without you. Compression shows the check screen first; the out-of-date check hands you one decision per pair. A block's pre-compression wording stays in the library and can be read back at any time.
Spool spells these with the modifier your platform actually prints: ⌘ on macOS, Ctrl on Windows.
| macOS | Windows | Action |
|---|---|---|
| Double-tap ⌥ | Double-tap Ctrl | Capture clipboard, then just type to leave a note (system-global) |
| ⌘⇧F | Ctrl+Shift+F | Global search |
| ⌘⇧P | Ctrl+Shift+P | Pack the active project |
| ⌘N | Ctrl+N | New project in the current workspace |
| ⌘, | Ctrl+, | Settings |
| ⌘Z | Ctrl+Z | Undo the last action (in an empty composer) |
| @ | @ | Mention another project inside the composer |
| Enter / Shift+Enter | Enter / Shift+Enter | Send / newline in the composer |
| Esc | Esc | Dismiss any overlay, modal, or inline edit |
The global search shortcut is user-rebindable under Settings → Shortcuts; an optional capture shortcut (unbound by default) can be recorded there too.
PLAN_EN.md defines what Spool is, what it isn't, the phase-by-phase roadmap, and the explicit non-goals. Read §2 (Product Constitution) before opening a PR or proposing a feature.
Taken with a library built purely for demonstration — the projects and notes in them are invented, so nothing personal appears.
One project, five fragments. A course reference, a note used as the next block's title, an AI-chat explanation, your revision plan, and a conclusion filed by an AI — each keeping its number, time, source, and author. The fixed project rail stays on the left; the AI activity rail stays on the right.

The capture confirmation keeps the saved text, its Study / Machine learning course destination, the detected source, an active note box, and undo/redo in one compact overlay. The main window never has to come forward.

Pack turns those five blocks into paste-ready Markdown: scope controls stay visible, the authority instructions explain how to read each source, and anything an AI wrote remains marked.

A finished project, condensed to the conclusion you chose, with a one-click path to reopen it.

Project management stays a list, not another tree. Active work is ordered by deadline or creation date, workspace and block count stay scannable, and completed work keeps its conclusion.

Through MCP, your own AI reads the library directly — this read-only Codex CLI run queried the isolated demo server and reported its current totals without a pack or a paste.

And when it files something back, it signs its name. Block 5 is appended below the user's block 4 — never over it — labelled Claude · MCP, with a ↩ line pointing at the exact fragment it answers.

Not licensed yet — all rights reserved until a license is chosen.
Ocean Jin · @KIM-ocean-HZ