Privacy Policy

Last updated: 2026-10-26 (Spool v0.7.4). This English translation is provided for convenience; the Chinese original is authoritative.

The one-sentence version

Spool keeps your data on your computer, and Spool's own process never opens a network connection. Capture, filing, packing, and search all happen on your machine. No account, no telemetry. The app's content-security policy (CSP) structurally forbids all external network connections from the webview, and the Spool binary contains no HTTP client at all.

One route does reach a model provider, and Spool is the one that starts it. If you switch the API engine on (by pasting a key of your own under Settings → AI engine → API key — it is off until you do), Spool runs a small bundled subprocess that makes the request, using a key you gave it and your own quota. That route and the three hand-offs you perform yourself are all listed below; nothing else leaves this machine.

What we collect

Nothing. Spool has no server. There is no account system, no usage analytics, no crash reporting, no advertising identifiers. The developer cannot see any of your content.

One exception, and it is a link rather than a part of the app. The feedback section of the website offers a short survey hosted by SurveyMars, a third-party form service. If you follow that link and fill it in, your answers are stored on their servers under their privacy policy — they do not pass through spoolapp.org and they never touch the Spool application. This site contacts them only if you click; nothing is loaded from them otherwise. Email and GitHub remain available if you would rather not involve a third party at all.

Where your data lives

Deleting that directory removes all Spool data completely; “Settings → Clear all data” inside the app does the same.

When data can leave your computer

Content can reach another program in four ways, and every one of them is off until you turn it on. In the first three you hand the content over, and the receiving program — not Spool — decides whether it then reaches a network service. The fourth is the API engine: there the request is made on your behalf, by a subprocess Spool starts:

FeatureWhere data goesNotes
Pack and paste The app or service where you paste the Pack Spool assembles the Pack locally and places it on your clipboard. Copying stays on your own machine; pasting into another program is your deliberate hand-off, and that program's privacy terms apply from there.
MCP service (Settings → MCP, off by default) The AI client you installed and configured yourself (Claude Desktop, Codex — including a Codex conversation inside the ChatGPT desktop app — Cursor, …) Your AI client reads project content over local inter-process communication; Spool listens on no network port. A file you added to a project yourself can be read by an AI by default — the text Spool extracted from it, not the file itself. Each file has its own switch you can turn off at any time; after that an AI can only ask you for it. An AI can also be handed the pictures in a block themselves (to read what a screenshot says). Private projects (right-click a project in the sidebar to make it private) do not exist for an AI connected through Spool: it cannot read them or see them in any list, files and pictures included. It can still write into one (a project it created as private, say), but cannot read back what it wrote. Spool's own AI features (weekly review, follow-up, compression, the out-of-date check) leave private projects alone too. Private covers the route through Spool only: an AI that can already read files on your computer directly (a command-line tool given file access, say) is not stopped from reading the database file. If a workspace is linked to a folder, an AI can also read where that folder is, the text of the state files you chose, and the names of files changed and the commit titles since the last sync; Spool hands over no other file's contents. A client that has its own file tools can still read that folder directly — Spool cannot control that. Where those clients send content is governed by that client and your agreement with its provider.
Follow Up, Weekly Review, drafting follow-up goals, compression, or the out-of-date check (Settings → AI engine → Local CLI; requires a supported CLI installed and logged in, plus the required MCP permissions) The command-line AI you installed and logged into yourself (Claude Code, Codex CLI, or Gemini CLI — or, when you have no Codex of your own, the copy built into the ChatGPT desktop app; Gemini does not run Follow Up) Spool starts that CLI as a local subprocess and hands it the relevant project content. The network request happens inside that subprocess, on your own account's quota — on this route Spool stores no API key, and its own process makes no HTTP request. When compression or the out-of-date check runs this way, the CLI gets no tools at all and no connection to Spool: one piece of text goes in, one comes out. If a workspace is linked to a folder, it can also read the folder information described in the row above.
Weekly Review, Follow Up, drafting follow-up goals, compression, or the out-of-date check (Settings → AI engine → API key, none until you paste one) The provider your key belongs to (one of OpenAI, Claude, Gemini, DeepSeek, Kimi, Qwen, Zhipu GLM or OpenRouter), or an HTTPS endpoint you entered yourself This is the one route Spool runs itself. The project content involved is sent to that provider, and the run is billed to your own key — including a run you cancel partway, because the provider still charges for what it already produced. Following up this way uses that provider's own web search (OpenAI, Claude, Gemini, Kimi and Qwen have one; the others cannot be used for Follow Up). The request is made by a bundled subprocess (spool-ai) that Spool starts and that exits when the run ends; Spool's own process still makes no HTTP request. Plain http:// endpoints are refused. It changes nothing you already have: follow-up findings wait in the review queue, and compression and out-of-date results take effect only when you approve them on screen.

⚠️ Follow up is the one action that deliberately searches the web. It takes the lines you wrote yourself describing what to watch for, and hands them to the route you chose — your CLI, or your API provider's own web search — to go look for news, so those lines and the context it needs reach that provider. Weekly Review, drafting follow-up goals, compression and the out-of-date check do not receive web-search tools, but the project content they need is still handed to the CLI or API provider and may reach it. Follow up runs only when you press it, unless you switch on Search once a week by itself for a project in its follow-up editor — then Spool runs it for that project once a week, on the route Follow Up is set to and on your own quota, and only something new reaches your review. The switch is per project and off by default. Likewise, when the out-of-date check covers a whole workspace you can switch on Check all of “…” once a month: Spool then hands that workspace's unfinished, non-private projects (sub-workspaces included) to the route the out-of-date check is set to, about every 30 days, and the results only appear on the out-of-date tab for you to look at. That switch is per workspace and off by default. Both run only while Spool is open.

In other words: content leaves this machine only along a route you switched on — a manual paste, an MCP client you enabled, a CLI action you ran, or the API engine you gave a key to (including a weekly follow-up you switched on for a project, or a monthly out-of-date check you switched on for a workspace). With the API engine off, Spool makes no network request at all; with it on, the request comes from a separate subprocess, on your own key and quota, to the provider you picked.

The other direction — an AI writing into your library — only arises once you have turned the MCP server on. The “allow AI writes” switch underneath it is on by default and can be turned off at any time; what an AI writes can only be added, never edited over anything you wrote, and every entry carries a source label (“Claude · MCP”, say) so it reads as theirs, not yours. If an AI thinks something already there needs correcting, it can only propose the correction, which waits for you in the review queue; it cannot retire a note for you. Three more kinds of proposal work the same way, taking effect only when you approve them there: attaching a file from your computer to a project (the AI names its full path; system folders, hidden folders and the like are refused outright), replacing an older version of a file with a newer one (the old one is kept, folded under the new), and splitting a long project into sub-projects (a finished project has to be reopened by you first).

System permissions

PermissionPurposeIf declined
Input monitoring (double-tap ⌥ capture) Detecting the Option-key double-tap gesture Double-tap ⌥ unavailable; a custom capture shortcut can be set in Settings
Accessibility (optional) Two things: keeps the capture gesture exclusive to Spool — when a capture fires, the second ⌥ press is removed from the event stream so other apps using the same gesture (such as Claude Desktop) don't pop up alongside — and hands the confirmation the keyboard, so the note box can be typed into without clicking it first Capture works exactly the same; other apps using the same gesture fire together with Spool, and the note box has to be clicked before it takes typing
Automation (browser) Reading the current tab title as a source label Source falls back to the application name
Clipboard Reading the clipboard's text, picture, or copied picture files at capture time Capture unavailable
The folder screenshots go to (the Desktop by default) When you double-tap ⌥ right after a screenshot (⌘⇧3, ⌘⇧4, ⌘⇧5), reading the one just written; macOS asks the first time Screenshots saved as files cannot be captured; ones sent to the clipboard (⌃⌘⇧4, say) still can

Permissions are used only when the corresponding feature fires — no background monitoring. The clipboard is read exactly once, at the moment you press the capture shortcut; the screenshot folder is looked at only when you double-tap ⌥ to capture, for the picture just taken.

Contact

Questions or concerns: open an issue on GitHub, or write to jinhz0531@gmail.com.