Skip to content

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:

    sh
    logbook labels preview --task shell
  • Run 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 logbook runs, lsof -nP -i -a -p <pid of logbook> (macOS and Linux) lists only a LISTEN on 127.0.0.1:<port> and loopback connections from your browser. On Linux, ss -tnp filtered for the process shows the same.

And for labelling itself:

  • During labelling, ps shows claude -p children of the labelling process, each with --model and the model you chose. Outside a labelling run there are no claude processes.
  • 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 projects folder 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.

TaskPart, in orderClip size
shell(FAILED) or (ok)not cut
command1200 characters, from the start
output tail of a failed call300 characters, from the end
tool-failuretool name as callednot cut
input400 characters, from the start
error600 characters, from the start
sessionorigin, harness, agent, project, first commandnot cut
title100 characters, from the start
first prompt900 characters, from the start
up to 3 more prompts350 characters, from the start
last assistant text400 characters, from the start
outcomeorigin, harness, agent, project, message count, goal, second goal, summarynot cut
opening ask400 characters, from the start
last two later prompts400 characters, from the start
last assistant text700 characters, from the start
assistant text before it300 characters, from the start
error of a failed model request after the last reply200 characters, from the start
promptprompt two before500 characters, from the start
reply to it500 characters, from the start
previous prompt900 characters, from the start
input of each of the previous turn last 12 tool calls140 characters, from the start
whether the human interrupted the agent or rejected a stepnot cut
previous turn last reply1500 characters, from the start
this prompt2000 characters, from the start
replyprevious reply600 characters, from the start
prompt1200 characters, from the start
input of each of the turn last 25 tool calls140 characters, from the start
reply2500 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.

FileWhat it callsStatement case
packages/engine/src/claude/claude-process.tsstarts the user's claude binary (--version, auth status --json, -p)labelling
packages/engine/src/rewrite/rewrite.tsforks the engine's rewrite processlocal
packages/core/src/subprocess.tsstarts a child process for its caller; what it starts is listed at each callerlocal
apps/cli/src/host-file.tsasks 127.0.0.1 at a port whether a Log Book host answers there, by its x-log-book headerlocal
apps/cli/src/host-server.tslistens on 127.0.0.1 only, for the web applocal
apps/cli/src/child-registry.tsstarts logbook children: process.execPath with the CLI's entry, an argument array, no shelllocal
apps/cli/src/browser.tsstarts the user's open (macOS) or xdg-open (Linux) with the page's loopback URL, an argument array, no shell, detachedlocal
packages/demo/src/import/import-demo.tsruns the built logbook CLI (doctor, then sync) as a child in the demo's sealed environmentlocal
packages/demo/src/start/start-demo.tsruns the built logbook CLI's host (logbook start on 127.0.0.1) as a child in the demo's sealed environmentlocal
packages/ci/src/tracked-files.tsruns git ls-files to list the repository's tracked files for the CI checkslocal
apps/web/src/lib/cli.tsstarts logbook commands as children of the host, through its child registry, or of the dev server under astro devlocal
apps/web/src/scripts/follow.tsthe browser fetches the Turn pane (/pane/<id>) from the page's own originlocal
apps/docs/version.tsruns git tag --points-at HEAD in the repository to name the release the documentation site is built fromlocal
apps/docs/capture/videos.tsruns ffmpeg-static's ffmpeg on the documentation build's recorded videos to encode them as MP4, an argument array, no shelllocal

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.

Source-available under the PolyForm Noncommercial License 1.0.0.