What Claude Code is doing between your prompt and its answer, drawn live from the logs it already writes: every model call, every tool, each subagent on its own context window and its own model, and what the session produced. Local and read-only — your session content never leaves the machine.
45
stars
181
commits
TypeScript
primary language
Sep 5, 2026
updated
Claude Code writes a session log to disk as it runs. seedeep tails that log and
rebuilds the turn while it is still happening: the context window filling, every API
call with its latency and token split, every tool call and its result, and each
subagent folded under the spawn that launched it. The same view is there afterwards
to walk through.
Read-only. No proxy, no daemon, no session content leaves the machine.
npm i -g seedeep && seedeep # Node or Bun; binaries below for neither

One turn, from 3% to 26% of the window: six subagents on three different models, 2.9M tokens billed, 2.5M of them the same context read again.
Eight things a Claude Code session does not report, and what seedeep shows instead.
/model mid-session moves it, and a Haiku subagent is measured against
200k inside a session running on 1M.docs/features.md, so you can run
it on your own sessions.seedeep is under active development.
The complete tour of every surface →
Every capture below is a synthetic session on a fictional project. No real path, prompt or project name appears in any frame.

One row per turn: how many steps it took, how long it ran, whether a step failed, and the subagent rounds it spawned. It fills in as the session works, rather than being assembled once the turn is over. (rules)

A native menu-bar client polling the same local server. It reports what the session is doing right now, which subagents are running and on which model, and how full the window is, with no browser tab open. (rules)
Three events are worth interrupting you for, and each has its own switch. Nothing else notifies: not a subagent finishing, not a tool error.
| Banner | Ships | Why |
|---|---|---|
| Waiting for your approval | on | the session cannot continue until you answer |
| The last API call failed | on | it has stopped, and nothing on screen says so |
| Turn finished | off | routine news, off by default so the two above stay unmuted |
Each banner is one title and one line: which session, and what happened. The command awaiting approval and the error text stay in the panel, because a banner is not actionable and the webhook channel sends its payload off your machine.
seedeep ships unsigned, so macOS asks for the notification permission again after every update. If the tray goes quiet following an upgrade, see installing the tray.

Across every session on the machine: turn-size distribution, where the waste came from, and tokens split by the model that spent them. Subagents count under their own model, so a Haiku explorer inside an Opus session shows up as Haiku.

Every word narrows the results. Your prompts and Claude's answers, matches highlighted in place, ranked by density instead of recency. Paste a commit hash or a tracker id and it queries git and its own index too, which is where plain text search comes up empty. (rules)
Claude Code appends one line to a local session file per content block, so a single
response becomes several lines, each stamped with its call's token usage. seedeep
tails those files and reconstructs the picture. No network interception, no
ANTHROPIC_BASE_URL override, nothing written back. It watches every active Claude
Code session at once, and identifies its own launching session so it never counts
itself.
Session data flows one way: the server pushes to the browser over Server-Sent Events.
See docs/architecture.md for the full design.
With Node or Bun, from npm:
npm i -g seedeep # or: bun install -g seedeep --trust
seedeep # watch, serve, and open the browser
With neither, take the file for your platform from the latest
release (macOS arm64/x64, Linux x64/arm64, Windows x64/arm64)
and run it. It is a standalone program, not an installer: it carries its own runtime
and the whole browser GUI inside, installs nothing, and leaves behind only
~/.seedeep/. The Linux builds require glibc (Debian, Ubuntu, Fedora and
derivatives); Alpine and other musl-based distributions are not supported.
The menu-bar tray is a separate, optional download from the same release: a universal
.dmg for macOS, a -setup.exe for Windows. It is a pure client, so the server still
has to run where Claude Code runs. Both are unsigned, and macOS and Windows each show
a first-launch warning.
Inside Claude Code, seedeep install-command adds a /seedeep command that opens the
GUI, stops the server, or reports what the current session cost.
Installing, running, updating, remote access and removal in full →
Everything above was checked by hand on macOS, the machine seedeep is developed on.
Linux has been used once, in a VM, on arm64. Windows in a VM, several times. Building
for three systems is not the same as having used three, so here is that difference
written down.
Every release also runs each server binary on a runner of its own operating system before anything is published: it must report its version, answer on its API and serve the browser GUI, or the release stays a draft. That rules out a download that dies at startup. It says nothing about whether the tool is correct or pleasant in front of a person on that machine.
| macOS | Windows | Linux | |
|---|---|---|---|
| Server | Used daily; every claim above was checked here | Used on Windows 11 in a VM: installed from npm, server started and served its API against a real Claude Code session, status, stop, restart and install-command confirmed, consecutive cold starts measured without a failure. /seedeep there needs one line of configuration (install.md) | arm64: used on Ubuntu 24 in a VM, GUI opened against a real Claude Code session, lifecycle and install-command confirmed. x64: exercised on every release but never used by a person, only started, left idle and driven through the full lifecycle in CI, plus a version check on Docker. Both builds require glibc; Alpine/musl is not supported |
| Tray | Used daily on a real menu bar | Installed and used on Windows 11 in a VM: the installer runs, the icon reads in the notification area, the popover opens at full height, trust-on-first-use and the connection screen work, the panel's buttons respond, notifications are delivered, and no console window appears | Not a target, deliberately: Tauri emits no tray click event on Linux, so the panel could not open (docs/tray.md) |
Concretely: on Linux x64 you are the first to use it. A defect there is expected, and an issue saying what you saw is the most useful thing you can send. Every Windows session so far turned up several.
Terminal sessions and the desktop app's Code tab are both watched live. One signal is missing on the desktop app: a session stopped at a tool approval reads as working rather than amber, because only a terminal session publishes that state and a transcript cannot tell a call awaiting your yes from one that is running. A question the model asks you does light amber there (what each surface shows).
seedeep.registry.npmjs.org,
and seedeep update --offline skips it.The server and the browser GUI are developed against Bun, with no other runtime required. The menu-bar tray is a Tauri app, so building it additionally needs a Rust toolchain and the platform SDK.
bun install
bun start # watch, serve, and open the browser
bun run test # run the test suite
bun run typecheck # tsc --noEmit (the tests do not type-check)
bun run tray:dev # build the tray panel, compile, run
If you also run an installed seedeep, develop through bun run dev and
bun run tray:dev: they give the checkout a state directory and a port of its own.
CONTRIBUTING.md has the full setup, the conventions, and how to
send a change.
features.md | every surface, and the reasoning behind the rules |
install.md | installing, running, updating, remote access, removal |
architecture.md | the pipeline, and why it has the shape it does |
api.md | the HTTP reference: every route, its parameters and its responses |
configuration.md | the config file, precedence, TLS, auth, the Settings panel |
trace.md · search.md · tray.md | the three surfaces with rules of their own |
session-output.md | what a session shipped, worked on, and touched |
claude-code-upgrades.md | how seedeep survives a Claude Code release |
CHANGELOG.md | what changed, newest first |
CONTRIBUTING.md | hit a bug or want a change? start here, and what to redact before you attach anything |
SECURITY.md | found a vulnerability? report it privately, never as an issue |
CODE_OF_CONDUCT.md | community standards and how violations are handled |
MIT © duqaXxX
174 commits
7 commits
TypeScript
80.9%
JavaScript
8.5%
Rust
6.6%
CSS
3.9%
What Claude Code is doing between your prompt and its answer, drawn live from the logs it already writes: every model call, every tool, each subagent on its own context window and its own model, and what the session produced. Local and read-only — your session content never leaves the machine.
45
stars
181
commits
TypeScript
primary language
Sep 5, 2026
updated
Claude Code writes a session log to disk as it runs. seedeep tails that log and
rebuilds the turn while it is still happening: the context window filling, every API
call with its latency and token split, every tool call and its result, and each
subagent folded under the spawn that launched it. The same view is there afterwards
to walk through.
Read-only. No proxy, no daemon, no session content leaves the machine.
npm i -g seedeep && seedeep # Node or Bun; binaries below for neither

One turn, from 3% to 26% of the window: six subagents on three different models, 2.9M tokens billed, 2.5M of them the same context read again.
Eight things a Claude Code session does not report, and what seedeep shows instead.
/model mid-session moves it, and a Haiku subagent is measured against
200k inside a session running on 1M.docs/features.md, so you can run
it on your own sessions.seedeep is under active development.
The complete tour of every surface →
Every capture below is a synthetic session on a fictional project. No real path, prompt or project name appears in any frame.

One row per turn: how many steps it took, how long it ran, whether a step failed, and the subagent rounds it spawned. It fills in as the session works, rather than being assembled once the turn is over. (rules)

A native menu-bar client polling the same local server. It reports what the session is doing right now, which subagents are running and on which model, and how full the window is, with no browser tab open. (rules)
Three events are worth interrupting you for, and each has its own switch. Nothing else notifies: not a subagent finishing, not a tool error.
| Banner | Ships | Why |
|---|---|---|
| Waiting for your approval | on | the session cannot continue until you answer |
| The last API call failed | on | it has stopped, and nothing on screen says so |
| Turn finished | off | routine news, off by default so the two above stay unmuted |
Each banner is one title and one line: which session, and what happened. The command awaiting approval and the error text stay in the panel, because a banner is not actionable and the webhook channel sends its payload off your machine.
seedeep ships unsigned, so macOS asks for the notification permission again after every update. If the tray goes quiet following an upgrade, see installing the tray.

Across every session on the machine: turn-size distribution, where the waste came from, and tokens split by the model that spent them. Subagents count under their own model, so a Haiku explorer inside an Opus session shows up as Haiku.

Every word narrows the results. Your prompts and Claude's answers, matches highlighted in place, ranked by density instead of recency. Paste a commit hash or a tracker id and it queries git and its own index too, which is where plain text search comes up empty. (rules)
Claude Code appends one line to a local session file per content block, so a single
response becomes several lines, each stamped with its call's token usage. seedeep
tails those files and reconstructs the picture. No network interception, no
ANTHROPIC_BASE_URL override, nothing written back. It watches every active Claude
Code session at once, and identifies its own launching session so it never counts
itself.
Session data flows one way: the server pushes to the browser over Server-Sent Events.
See docs/architecture.md for the full design.
With Node or Bun, from npm:
npm i -g seedeep # or: bun install -g seedeep --trust
seedeep # watch, serve, and open the browser
With neither, take the file for your platform from the latest
release (macOS arm64/x64, Linux x64/arm64, Windows x64/arm64)
and run it. It is a standalone program, not an installer: it carries its own runtime
and the whole browser GUI inside, installs nothing, and leaves behind only
~/.seedeep/. The Linux builds require glibc (Debian, Ubuntu, Fedora and
derivatives); Alpine and other musl-based distributions are not supported.
The menu-bar tray is a separate, optional download from the same release: a universal
.dmg for macOS, a -setup.exe for Windows. It is a pure client, so the server still
has to run where Claude Code runs. Both are unsigned, and macOS and Windows each show
a first-launch warning.
Inside Claude Code, seedeep install-command adds a /seedeep command that opens the
GUI, stops the server, or reports what the current session cost.
Installing, running, updating, remote access and removal in full →
Everything above was checked by hand on macOS, the machine seedeep is developed on.
Linux has been used once, in a VM, on arm64. Windows in a VM, several times. Building
for three systems is not the same as having used three, so here is that difference
written down.
Every release also runs each server binary on a runner of its own operating system before anything is published: it must report its version, answer on its API and serve the browser GUI, or the release stays a draft. That rules out a download that dies at startup. It says nothing about whether the tool is correct or pleasant in front of a person on that machine.
| macOS | Windows | Linux | |
|---|---|---|---|
| Server | Used daily; every claim above was checked here | Used on Windows 11 in a VM: installed from npm, server started and served its API against a real Claude Code session, status, stop, restart and install-command confirmed, consecutive cold starts measured without a failure. /seedeep there needs one line of configuration (install.md) | arm64: used on Ubuntu 24 in a VM, GUI opened against a real Claude Code session, lifecycle and install-command confirmed. x64: exercised on every release but never used by a person, only started, left idle and driven through the full lifecycle in CI, plus a version check on Docker. Both builds require glibc; Alpine/musl is not supported |
| Tray | Used daily on a real menu bar | Installed and used on Windows 11 in a VM: the installer runs, the icon reads in the notification area, the popover opens at full height, trust-on-first-use and the connection screen work, the panel's buttons respond, notifications are delivered, and no console window appears | Not a target, deliberately: Tauri emits no tray click event on Linux, so the panel could not open (docs/tray.md) |
Concretely: on Linux x64 you are the first to use it. A defect there is expected, and an issue saying what you saw is the most useful thing you can send. Every Windows session so far turned up several.
Terminal sessions and the desktop app's Code tab are both watched live. One signal is missing on the desktop app: a session stopped at a tool approval reads as working rather than amber, because only a terminal session publishes that state and a transcript cannot tell a call awaiting your yes from one that is running. A question the model asks you does light amber there (what each surface shows).
seedeep.registry.npmjs.org,
and seedeep update --offline skips it.The server and the browser GUI are developed against Bun, with no other runtime required. The menu-bar tray is a Tauri app, so building it additionally needs a Rust toolchain and the platform SDK.
bun install
bun start # watch, serve, and open the browser
bun run test # run the test suite
bun run typecheck # tsc --noEmit (the tests do not type-check)
bun run tray:dev # build the tray panel, compile, run
If you also run an installed seedeep, develop through bun run dev and
bun run tray:dev: they give the checkout a state directory and a port of its own.
CONTRIBUTING.md has the full setup, the conventions, and how to
send a change.
features.md | every surface, and the reasoning behind the rules |
install.md | installing, running, updating, remote access, removal |
architecture.md | the pipeline, and why it has the shape it does |
api.md | the HTTP reference: every route, its parameters and its responses |
configuration.md | the config file, precedence, TLS, auth, the Settings panel |
trace.md · search.md · tray.md | the three surfaces with rules of their own |
session-output.md | what a session shipped, worked on, and touched |
claude-code-upgrades.md | how seedeep survives a Claude Code release |
CHANGELOG.md | what changed, newest first |
CONTRIBUTING.md | hit a bug or want a change? start here, and what to redact before you attach anything |
SECURITY.md | found a vulnerability? report it privately, never as an issue |
CODE_OF_CONDUCT.md | community standards and how violations are handled |
MIT © duqaXxX
174 commits
7 commits
TypeScript
80.9%
JavaScript
8.5%
Rust
6.6%
CSS
3.9%