Spool

Status
Released
Period
2026 – present
Role
Sole developer; built with AI coding agents (see Boundaries).
Latest release, signed and notarized
v0.7.4
Real API calls in pre-release evaluation
557 (2026-08-20 to 08-24)

Situation

People who carry several long-running projects, such as researchers, graduate students and developers working alone, pay the same cost in every new AI conversation. The assistant starts cold, so they rebuild the project by hand: which source mattered, which approach already failed, what changed since last week.

Spool keeps each project as a time-ordered log on the user’s Mac and packs it into plain text any AI can read. The harder problem was control: what an AI may read, what it may write, and what may leave the machine. It is not a team workspace or a sync service.

A Spool project named Machine learning course: a dated list of saved notes, each showing where it came from. The last note is labelled Terminal probe · MCP and cites the note above it.
One project's log. Every block keeps its source; the last one was written over MCP by a test client, carries that client's name and cites the block it builds on.Spool v0.7.4 · isolated demo build · demo library ·

Role

I am Spool’s sole developer. I made the product decisions, including the red lines the architecture enforces, and did the on-device acceptance checks. I set the rules for the evaluation rounds and settled disputed answer keys; a coding agent ran and graded them.

Constraints

Project notes are personal, so the default had to be that nothing leaves the Mac. Every AI feature therefore had to run on the user’s own key or subscription, with no Spool server, account or telemetry.

Models also fail quietly: a shortened draft can lose a date, and a confident answer can cite a line that does not exist. I treated that as a design input: drafts are checked before the user sees them and saved only on approval.

As a solo developer, I needed safeguards that a test or a real build could check.

Process and architecture

Spool v0.7.4 has three entry points: a desktop app, an MCP server, and a CLI engine slot. (the CLI engine slot runs the user's own Claude Code, Codex or Gemini CLI as a subprocess; Spool has no command line of its own) The diagram shows which process starts which, where data lives, and every route off the Mac.

Spool v0.7.4 on one Mac. The desktop app owns spool.db and starts helper processes: spool-ai, the only network client in the app, off by default and using the user's key; and the CLI engine slot, which runs the user's own Claude Code, Codex or Gemini CLI. That CLI, like any MCP client, starts Spool's MCP server, which reads the library over stdio and writes only after a second switch. Content leaves the Mac only by the routes drawn: a Pack the user copies, spool-ai to the API endpoint the user chose, and each CLI or MCP client to its own vendor. Desktop app window + core capture overlay spool-ai off by default key via stdin spool.db SQLite, one file + settings file CLI engine slot your own Claude Code, Codex, Gemini MCP server off by default stdio, no port MCP client Claude Desktop, Cursor and others Wherever you paste a Pack API endpoint you chose, with your key Your CLI's vendor web search only in follow-ups The client's own vendor you approve AI drafts writes: second switch This Mac Leaves this Mac
Spool v0.7.4 on one Mac. The desktop app owns spool.db and starts helper processes: spool-ai, the only network client in the app, off by default and using the user's key; and the CLI engine slot, which runs the user's own Claude Code, Codex or Gemini CLI. That CLI, like any MCP client, starts Spool's MCP server, which reads the library over stdio and writes only after a second switch. Content leaves the Mac only by the routes drawn: a Pack the user copies, spool-ai to the API endpoint the user chose, and each CLI or MCP client to its own vendor. Desktop app window + core spool-ai off by default spool.db SQLite, one local file MCP server off by default; stdio, no port CLI engine slot your own AI CLI MCP client Claude Desktop … you approve AI drafts writes: second switch This Mac Leaves this Mac Desktop app a Pack you copy, pasted wherever spool-ai API endpoint you chose, your key CLI engine slot your CLI's vendor; web search in follow-ups MCP client the client's own vendor
Processes, stores, write gates and every route off the Mac. The CLI engine slot is Spool starting the user's own AI command-line tool as a subprocess; Spool has no command line of its own.Spool v0.7.4 · checked against the tagged source ·

Network stays at the process boundary

I kept every network call out of the main app and put AI requests in a small subprocess the user switches on. The alternative, calling the model from the app, is simpler but leaves the privacy claim as a promise. Spool's main process links no HTTP or TLS library; the only network client in the app is an opt-in subprocess, spool-ai. (MCP clients and the user's own CLI make their own network calls)

AI clients get no access until the user turns on the MCP server, and writing has a second, separate switch. (the write switch is on by default once the MCP server is on) I rejected letting an AI edit blocks in place: projects would stay tidier, but no one could tell who said what. AI-written blocks are append-only and carry the client's name; an AI cannot edit or delete what the user wrote.

Spool settings, MCP tab: a switch labelled MCP server and a separate switch labelled Allow AI writes, both turned on.
Reading and writing are separate consents: one switch lets AI tools read, another lets them write.Spool v0.7.4 · isolated demo build ·

Corrections, replacements, files and project splits an AI proposes wait on a review screen until the user clicks. (first shipped in v0.7.0; the AI's own new block is saved at once; what waits is its effect on existing blocks, files or projects)

A card titled Proposed by an AI, waiting for you: a test client suggests that a newer note replaces an older one, shows both with its reason, and offers Correct one point, Replace in full or Leave alone.
An AI's proposed replacement waits, with both notes and its reason, until the user chooses.Spool v0.7.4 · isolated demo build · demo library ·

Drafts are checked before they can be saved

A compressed draft that dropped a number or date cannot be saved, and the original text stays on each block. (compression is opt-in, off by default, and runs on the user's own API key or local CLI; keeping originals can be turned off) I rejected a confirm button that overrides the number check, because a lost figure is easy to miss in a shorter text.

The Compress tab before a run: strength options, a local note that this project has no repeated content, an option to queue the run overnight, a footer saying a draft that drops a number or a date may never enter the library, and the route, Local CLI, beside the Compress button.
The Compress tab checks locally whether compression is worth paying for, before any request is sent.Spool v0.7.4 · isolated demo build · demo library ·

Results and evidence

Spool v0.7.4 shipped on 2026-10-26 as a Developer ID–signed, Apple-notarized build for Apple Silicon Macs. A Windows build is in testing.

Weekly review, follow-up, compression and the out-of-date check each run on the user's own CLI or own API key. (both routes since v0.7.3; follow-up needs Claude Code, Codex or an API provider with its own web search)

Spool settings, AI engine tab: a Local CLI box connected to Claude Code, saying Spool stores no key on this route, and an API key box with an empty key field and a note that the key is kept in the system keychain. Both list the same actions: weekly review, follow up, compress and out-of-date check.
Every AI action can run on the user's own command-line agent, with no key stored in Spool, or on their own API key, kept in the system keychain.Spool v0.7.4 · isolated demo build ·

A private project is hidden from AI clients connected through Spool, though they can still write into it. (first shipped in v0.7.0; covers the route through Spool only; nothing is encrypted on disk)

A Spool project named Apartment hunt marked private: a crossed-eye mark beside its title and its name in the sidebar, and the same mark on the Compress and Out-of-date check tabs.
A private project: hidden from AI clients connected through Spool, and Spool's own AI features stay off inside it.Spool v0.7.4 · isolated demo build · demo library ·

Linked folders are built for developers who code with AI agents. A workspace can link to a local folder; a SPOOL.md there tells AI tools which Spool projects the folder belongs to. (Spool cannot stop an AI client from reading the folder with its own file tools)

A workspace page named Work with a linked folder, portfolio-site: a sync line saying a state file changed since the last sync, README.md unchanged and PLAN.md changed, a commit since then, a SPOOL.md the AI can read, and the workspace's projects with Portfolio site as the main project.
A workspace linked to a code repository: Spool shows which plan files changed since the last sync, and the SPOOL.md it keeps there tells the coding agent which projects the folder belongs to.Spool v0.7.4 · isolated demo build · demo library and repository ·

The measurements below were taken on an earlier release. Spool v0.6.2 shipped on 2026-08-24 as a Developer ID–signed, Apple-notarized build for Apple Silicon Macs.

Before v0.6.2, six evaluation rounds made 557 real API calls. (2026-08-20 to 08-24) The six pre-release evaluation rounds cost at least ¥29.37. (token usage times the vendor's price list; failed calls reported no usage, so this is a floor) Compressing two projects by 30% and 38% kept 39 of 40 answers correct; the uncompressed baseline scored 40/40. (round six: 20 questions, each asked twice per arm; one model; answers graded by the coding agent; the gap is within noise)

Four release blockers found in pre-release testing were fixed and re-tested before v0.6.2 shipped. (found in round five on 2026-08-23; re-tested in round six on 2026-08-24) They were a retry that sent the same request again, a truncated reply marked as success, an overwritten link and broken quote matching. Two envelope defects from the last round shipped unfixed: failed calls report no usage, and one empty reply was marked ok. (still open as of 2026-09-23)

Each project lists what to watch; a follow-up runs the user's own Claude Code with web search and queues sourced findings for approval. The feature first shipped in that earlier release; the screenshot shows its editor in the latest one.

A dialog titled What should this project watch?: a one-off line and a permanent line, a Search the web button using the local CLI, a switch to search once a week by itself, turned off, and a note that follow-ups use Claude Code.
The user writes what to watch; weekly searching is a per-project switch, off by default.Spool v0.7.4 · isolated demo build · demo library ·

Reflection and next

A pre-release round replayed the out-of-date check on a copy of my library and found that accepting a proposal could silently overwrite an existing link. A fix passed its tests but covered one of two relation types; the next offline re-check found 20 exposed blocks. (round six, on a copy of the library; the complete fix landed before the v0.6.2 tag) It would have let one click rewrite a citation unnoticed; I rebuilt both guards around whether a block already points somewhere, with unit tests.

Other results argued against features I wanted. A linear cost estimate landed within ±30% for only 46% of 89 real bills, so the app shows no price. (round five; the bar set in advance was 90%) Medium reasoning gave no compression gain over low; it was 3.5× slower and 3.4× costlier. (n = 5 vs 10 runs on one project and one setting, round five; a 5-point gain was required in advance)

A passing test is evidence about the test, so I also check each guard against real data. The longer development story, with earlier failures, is on the Spool site (opens in a new tab).

Spool is now recruiting its first beta testers on the Spool site (opens in a new tab); the beta is also the first look at how others use it.

A follow-on study of project memory across AI clients is under way. It asks whether a governed project memory helps AI assistants more than a plain pack, full text or a rules file. It also measures harm: stale rules, leaks between tasks, and injected instructions carried from one client to another.

Boundaries

I built Spool with AI coding agents; product decisions, test adjudication and on-device acceptance were mine. The repository does not record who wrote each commit, so I do not claim to have written every line by hand.

The evaluation log quotes private library content and the follow-on study is not yet public, so neither is linked. The code is public for review with all rights reserved, and Spool collects no telemetry.