v0.1 · standalone app · macOS + Linux

Background sync
for your
captures.

Spool Daemon is a standalone app that quietly pulls your stars, bookmarks, saves and notes into a local SQLite database — searchable from its own UI, or paired with Spool. Plugins for the platforms you care about. Nothing leaves the machine.

 Star on GitHub
MITmacOS · Apple SiliconLinux · x86_64Spool →
Spool Daemon · running
8 connectors · next sync 4m
GitHub Stars
1,214 · synced 2m
X Bookmarks
891 · synced 12m
Reddit Saved
203 · synced 1h
Hacker News
76 · synced 8m
Xiaohongshu
42 · synced 1h
YouTube Likes
64 · synced 3h
Reddit Upvoted
418 · synced 1h
Typeless Voice
128 · live
RECENT
GitHub Stars+14 captures · 2m ago
X Bookmarks+3 bookmarks · 12m ago
Hacker News Hot+22 stories · 8m ago
Reddit Savedno changes · 1h ago
2,490 items · SQLite FTS5 · local● syncing
· Captures, synced
GitHub1.2kTwitter / X891Reddit203Hacker News76Xiaohongshu42YouTube64GitHub1.2kTwitter / X891Reddit203Hacker News76Xiaohongshu42YouTube64GitHub1.2kTwitter / X891Reddit203Hacker News76Xiaohongshu42YouTube64
01 · CONNECTORS

One connector per platform.

Each connector is a small npm package. Install from the CLI or click Install to launch directly into Spool Daemon.

X
X Bookmarks
Spool Lab

Your saved tweets on X

social·1 sourceInstall
H
Hacker News Hot
Spool Lab

Top stories on Hacker News right now

news·1 sourceInstall
T
Typeless Voice
Spool Lab

Your voice transcripts from Typeless

productivity·1 sourceInstall
G
GitHub
Spool Lab

What you star and the notifications GitHub sends you.

dev·2 sourcesInstall
R
Reddit
Spool Lab

Your saved and upvoted posts from Reddit.

social·2 sourcesInstall
X
Xiaohongshu Notes
Spool Lab

Notes you have published

social·1 sourceInstall
Y
YouTube Liked Videos
graydawnc

Videos you've liked on YouTube

media·1 sourceInstall
Write your own
@spool-lab/connector-sdk

Implement the Connector interface, publish to npm, install from anywhere. Daemon handles scheduling, retries and dedupe.

SDK·~50 linesSee the skeleton ↓
02 · LIFECYCLE

How the daemon works.

Three things, in order. Pick connectors, let them sync, search the local index — from the app, from the CLI, or both.

i.

Install plugins.

Pick connectors from the registry — install via spool-daemon install, click an spool-daemon:// deep-link, or the in-app picker.

ii.

Sync on cadence.

Each connector declares its own schedule — hourly, daily, watched. The daemon respects rate limits, backs off on failure and resumes on next wake. Your laptop stays quiet.

iii.

Search locally.

Spotlight-style search in the app, or spool-daemon search "…" from the CLI. Full-text across everything that's been synced.

03 · PLUGINS

Write your own connector.

Implement the Connector interface and publish to npm. The daemon handles scheduling, retries, rate-limit backoff, dedupe and writes to the local index.

Skeleton — the Connector class

A class with a few readonly fields, checkAuth() and fetchPage(). caps.fetch is the daemon's managed fetch (handles abort, system proxies, logging). Items emitted as CapturedItem[] get written to the local FTS5 index — no schema work for you.

Discovery — the package.json

The daemon finds your connector through the "spool" block in package.json — id, platform, label, color, capabilities. Publish to npm and anyone can spool-daemon install it. To show up in the public directory, send a PR to spool-lab/spool-daemon with one entry.

connectors/hackernews-hot/src/index.ts
1import type {
2 Connector, ConnectorCapabilities, AuthStatus,
3 PageResult, FetchContext,
4} from "@spool-lab/connector-sdk";
5
6export default class HackerNewsHot implements Connector {
7 readonly id = "hackernews-hot";
8 readonly platform = "hackernews";
9 readonly label = "Hacker News Hot";
10 readonly color = "#FF6600";
11 readonly ephemeral = true;
12
13 constructor(private readonly caps: ConnectorCapabilities) {}
14
15 async checkAuth(): Promise<AuthStatus> {
16 return { ok: true };
17 }
18
19 async fetchPage(ctx: FetchContext): Promise<PageResult> {
20 const items = await fetchTopStories(this.caps, ctx);
21 return { items, nextCursor: null };
22 }
23}
package.json
1{
2 "name": "@spool-lab/connector-hackernews-hot",
3 "version": "0.1.2",
4 "type": "module",
5 "main": "./dist/index.js",
6 "dependencies": {
7 "@spool-lab/connector-sdk": "^0.1.0"
8 },
9 "spool": {
10 "type": "connector",
11 "id": "hackernews-hot",
12 "platform": "hackernews",
13 "label": "Hacker News Hot",
14 "color": "#FF6600",
15 "ephemeral": true,
16 "capabilities": ["fetch", "log"]
17 }
18}
04 · PRINCIPLES

Rules of the house.

i.

Local, always.

One SQLite file at ~/.spool-daemon/spool-daemon.db. No cloud sync, no analytics, no profile. Inspect it with sqlite3 any time.

ii.

Plugins are npm packages.

Every connector ships on npm as @spool-lab/connector-* (or your own scope). Read the source, fork it, publish your own.

iii.

CLI and app, equal.

Search, list, show, install, sync — every action works from spool-daemon on the terminal or from the app. Pick whichever fits the moment.

iv.

Standalone or paired.

Spool Daemon runs alone — you don't need Spool to use it. Pair with Spool to make captures and sessions searchable from one box.

Captures, quietly
indexed.
 Star on GitHubRead the docs →
macOS · Apple Silicon · Linux x86_64 · MIT · Built in the open