Skip to content

Repository files navigation

Booked

Search your X bookmarks on your own machine.

Imports every bookmark, sorts it, and makes it searchable.

Local-first Node 22.13+ V1.1

Booked

Every bookmark is a node. Tags ring the middle, categories sit inside, and the lines between them are the tags each post actually carries.

Reading a bookmark

Point at a node to see what it is; click to read it in full and see what else it connects to.

What you get

  • Every bookmark imported. No X API, no password. Booked drives a dedicated Chrome profile you sign into yourself.
  • Sorted automatically. Each post gets a headline, a category, and a few shared tags.
  • Search that understands meaning. café finds the corgi cafe thread, 32 finds esp32. Searching something you never saved returns nothing, on purpose.
  • A knowledge graph. Categories, topics, and posts, with the edges between them.
  • Ask your library. Answers come only from what you saved, with citations that open the post.

Requirements

Node.js 22.13+ uses node:sqlite and runs TypeScript directly
Google Chrome Booked opens its own profile; your normal browsing is untouched
Claude Code or Codex CLI installed and signed in. This does the sorting and the answering
An X account you sign in during setup

Run it

git clone https://github.com/Entrepenulian/Booked.git
cd booked
npm install
npm run dev

Open localhost:4177. That starts two processes: the interface on 4177 and a local agent on 4179 that does the work a browser can't.

Or let an agent do it

Paste this into any coding agent, from the directory where you want Booked installed.

Set up Booked, a local-first app that turns my X bookmarks into a searchable
knowledge graph. Repo: https://github.com/Entrepenulian/Booked

Do this in order, and stop and tell me if a check fails rather than working
around it:

1. Check prerequisites and report what is missing before changing anything:
   - `node --version` must be 22.13 or newer. It uses `node:sqlite` and runs
     TypeScript with no build step, so older versions fail at runtime, not at
     install.
   - Google Chrome must be installed. Booked drives its own Chrome profile to
     read my bookmarks.
   - Either `claude` or `codex` must be on PATH and already signed in. This is
     what sorts the bookmarks and answers questions. Without one, the app
     installs fine and then silently does nothing.

2. Clone into the current directory and install:
   `git clone https://github.com/Entrepenulian/Booked.git && cd booked && npm install`

3. Start it with `npm run dev`. This runs two processes: the interface on port
   4177 and a local agent on 4179. Both must stay running.

4. Verify before telling me it works:
   - `curl -s http://127.0.0.1:4179/health` returns JSON with `"ok":true`
   - `curl -s -o /dev/null -w "%{http_code}" http://localhost:4177` returns 200
   If either fails, show me the output rather than guessing.

5. Tell me to open http://localhost:4177 and walk the four setup steps. A
   Chrome window opens for me to sign in to X — you cannot do that part.

Notes:
- Everything is stored in `~/.booked`. Nothing is uploaded to any server.
- Sorting my bookmarks calls the CLI from step 1, so it uses my own plan.
- Do not add dependencies, change ports, or edit files. This is an install.

Setup, step by step

Four steps, about a minute for a few hundred bookmarks.

  1. Connect. Booked opens a Chrome window. Sign in to X there.
  2. Confirm your account. It detects who you're signed in as.
  3. Pick an engine. Claude Code or Codex. Importing runs while you choose.
  4. You're in. The library opens once the first batch is sorted; the rest fills in behind you.

Timing. Import moves about 20 bookmarks per second. Sorting runs four model calls at a time, roughly 30 seconds per 20 bookmarks, in the background. The rail footer shows Sorting 40 of 74 while you use the app.

Usage. Sorting runs through your own CLI, so it uses the plan you already have there: a handful of short prompts per bookmark, once, never again for that bookmark. Pick the model in Settings.

Use it from another assistant

Booked ships an MCP server, so any agent that speaks the protocol — Claude Code, Codex, or your own — can read your library as native tools. Booked has to be running; the tools talk to the same local agent the app does.

claude mcp add booked -- node agent/mcp.ts

For any other client, it's a standard stdio MCP server. Use an absolute path — a client that launches from its own directory can't find a relative one:

{
  "mcpServers": {
    "booked": {
      "command": "node",
      "args": ["/absolute/path/to/booked/agent/mcp.ts"]
    }
  }
}
Tool What it does
search_bookmarks keyword + meaning search. Instant, local, free
browse_bookmarks filter by category, tag or type with no search term — "what did I save recently"
get_bookmark one post in full, with author, tags, media and its link
ask_bookmarks a synthesised answer with citations. Runs your CLI, so it costs and takes seconds
library_overview counts, categories, top tags, content types

Then: "what did I save about hardware recently?" or "find me things to do in San Francisco from my bookmarks."

Prefer search_bookmarks — it answers most questions without a model call. ask_bookmarks is for questions that need reading across several posts.

What leaves your machine

Never leaves: your bookmarks and everything built from them, including the database, search index, and graph. Embeddings are computed locally. There is no Booked server to send anything to.

Sent to your model provider: sorting a bookmark, or asking a question about one, sends that post's text through the CLI you chose, like any prompt you type into it. Nothing else.

How it works

X bookmarks ──▶ local import ──▶ sorted + tagged ──▶ search · graph · chat
                Chrome + CDP      your CLI            all local

The interface runs in workerd, which can't spawn processes or touch a disk. The real work lives in a small Node agent: SQLite with FTS5 for keyword search, a local embedding model for meaning, and your CLI for judgement.

Notes

Booked is a V1. It reads X through the signed-in web experience, so expect maintenance when X changes.

Everything lives in ~/.booked. Delete that directory and it's gone.

Product overview · Design system

About

Turn saved X bookmarks into a searchable, connected knowledge library.

Topics

Resources

Stars

14 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages