Appearance
Privacy and security
Log Book runs on your computer. It reads the session files your coding agents already keep, copies them into one database file in your user data folder, and shows them on a page served from your own computer at 127.0.0.1. It has no account, no server of its own, no telemetry, no crash reporting and no update check.
Syncing reads files on your disk, the page loads nothing from the internet, and the labels that need no model are made on your computer on every sync. None of that uses the network.
Model labelling is the one exception, and it runs only when you start it, with logbook labels update in a terminal or Label and then Start on Log Book's page. Log Book then runs your own Claude Code once per batch of records, as claude -p, on the model you choose (Claude Haiku unless you pick another). Each run sends excerpts of your sessions to Anthropic, or to the provider your Claude Code is set up to use, under your Claude Code login, and counts against your Claude plan's usage limits like your own sessions.
The excerpts are unredacted. They include, for example, the start of a failed command and the end of its output, the first prompts of a session, or a prompt with the steps and reply before it, from every agent Log Book reads, including sessions you ran with other providers. If a command printed a secret inside an excerpt, the secret is sent. What each request contains lists every part and its size.
With the excerpts go Log Book's fixed instructions for the task, and a few lines Claude Code adds to every request itself: its version, the temporary folder it runs in, your platform, shell and operating system version, today's date, and the email address and id of the Claude account it is logged in with.
Before the first request, Log Book shows the model, how many records of each agent it will send and an estimate of the tokens. You can preview the exact text of any batch with logbook labels preview, and stop a run at any time.
Log Book never sees your Claude login: Claude Code signs in by itself. Claude Code keeps no history of these runs, and Log Book asks it, on every run including the version and login checks before labelling, to send nothing else of its own. If your organisation manages your Claude Code, its managed settings still apply to these runs, including any hooks they define, and Log Book cannot turn those off.
mermaid
flowchart LR
files["Your agents' session files on disk"] -->|read by a sync| warehouse["The warehouse file"]
warehouse -->|shown on| page["The page at 127.0.0.1"]
warehouse -.->|only when you start it: labelling| claude["Your claude"]
claude -.->|excerpts| provider["Anthropic, or your Claude Code's provider"]The page on your machine
Log Book serves its page on 127.0.0.1 only, with no login, so while it runs any user of the same machine can open it, as with any local server. The warehouse file itself can be read only by you. The page accepts changes, such as starting a sync or a labelling run, only from its own pages, so another website open in your browser cannot trigger them.
How to check it
Three checks cover most of it:
Preview what labelling would send.
logbook labels preview --task <task>prints the exact text of the next batches without sending anything, and names the framing Claude Code adds:shlogbook labels preview --task shellRun it offline. Turn the network off, run
logbook, wait for the first sync and use the pages. Everything works; only model labelling fails, at Claude Code's first request.Look at its sockets. While
logbookruns,lsof -nP -i -a -p <pid of logbook>(macOS and Linux) lists only aLISTENon127.0.0.1:<port>and loopback connections from your browser. On Linux,ss -tnpfiltered for the process shows the same.
And for labelling itself:
- During labelling,
psshowsclaude -pchildren of the labelling process, each with--modeland the model you chose. Outside a labelling run there are noclaudeprocesses. - With a per-application firewall (Little Snitch, LuLu, OpenSnitch), the only outbound connections are those of
claude, to its API host, during labelling; none during the version and login checks. - After labelling, no new session for a temporary directory appears in Claude Code's
projectsfolder or in Log Book's conversation list.
What each request contains
Each labelling request holds a batch of items, and each item holds these parts of a record, in this order, each cut to its clip size. Nothing is redacted.
| Task | Part, in order | Clip size |
|---|---|---|
shell | (FAILED) or (ok) | not cut |
| command | 1200 characters, from the start | |
| output tail of a failed call | 300 characters, from the end | |
tool-failure | tool name as called | not cut |
| input | 400 characters, from the start | |
| error | 600 characters, from the start | |
session | origin, harness, agent, project, first command | not cut |
| title | 100 characters, from the start | |
| first prompt | 900 characters, from the start | |
| up to 3 more prompts | 350 characters, from the start | |
| last assistant text | 400 characters, from the start | |
outcome | origin, harness, agent, project, message count, goal, second goal, summary | not cut |
| opening ask | 400 characters, from the start | |
| last two later prompts | 400 characters, from the start | |
| last assistant text | 700 characters, from the start | |
| assistant text before it | 300 characters, from the start | |
| error of a failed model request after the last reply | 200 characters, from the start | |
prompt | prompt two before | 500 characters, from the start |
| reply to it | 500 characters, from the start | |
| previous prompt | 900 characters, from the start | |
| input of each of the previous turn last 12 tool calls | 140 characters, from the start | |
| whether the human interrupted the agent or rejected a step | not cut | |
| previous turn last reply | 1500 characters, from the start | |
| this prompt | 2000 characters, from the start | |
reply | previous reply | 600 characters, from the start |
| prompt | 1200 characters, from the start | |
| input of each of the turn last 25 tool calls | 140 characters, from the start | |
| reply | 2500 characters, from the start |
With the items go the task's one-line system text and its fixed instructions, about 1 to 4 KB per task, and the lines Claude Code adds itself, listed above.
Audit notes: where the code can reach the network
The one call site that can reach the network is starting claude for labelling. The others are local: the server on 127.0.0.1, the child processes Log Book starts, and the tools the repository's own build runs. A CI check fails the build when a call site appears that this list does not name.
| File | What it calls | Statement case |
|---|---|---|
packages/engine/src/claude/claude-process.ts | starts the user's claude binary (--version, auth status --json, -p) | labelling |
packages/engine/src/rewrite/rewrite.ts | forks the engine's rewrite process | local |
packages/core/src/subprocess.ts | starts a child process for its caller; what it starts is listed at each caller | local |
apps/cli/src/host-file.ts | asks 127.0.0.1 at a port whether a Log Book host answers there, by its x-log-book header | local |
apps/cli/src/host-server.ts | listens on 127.0.0.1 only, for the web app | local |
apps/cli/src/child-registry.ts | starts logbook children: process.execPath with the CLI's entry, an argument array, no shell | local |
apps/cli/src/browser.ts | starts the user's open (macOS) or xdg-open (Linux) with the page's loopback URL, an argument array, no shell, detached | local |
packages/demo/src/import/import-demo.ts | runs the built logbook CLI (doctor, then sync) as a child in the demo's sealed environment | local |
packages/demo/src/start/start-demo.ts | runs the built logbook CLI's host (logbook start on 127.0.0.1) as a child in the demo's sealed environment | local |
packages/ci/src/tracked-files.ts | runs git ls-files to list the repository's tracked files for the CI checks | local |
apps/web/src/lib/cli.ts | starts logbook commands as children of the host, through its child registry, or of the dev server under astro dev | local |
apps/web/src/scripts/follow.ts | the browser fetches the Turn pane (/pane/<id>) from the page's own origin | local |
apps/docs/version.ts | runs git tag --points-at HEAD in the repository to name the release the documentation site is built from | local |
apps/docs/capture/videos.ts | runs ffmpeg-static's ffmpeg on the documentation build's recorded videos to encode them as MP4, an argument array, no shell | local |
This website
The site sets no cookies, runs no analytics and loads nothing from another origin. GitHub Pages serves it and, like any web host, receives each visitor's IP address and request, under GitHub's privacy statement.