sessionpipe 0.15.0protocol 1Apache-2.0what changed
An open protocol, and a client, for what your coding agents are doing.
One install hooks the agents you already run. Every event is filtered to the privacy tier you choose, secrets are removed on your machine, and it goes to your server, to a file, or nowhere at all.
- Claude Code
- Codex
- Gemini CLI
- Antigravity
- Devin CLI
Tier 0 carries state and timing: working, needs you, done. No words.Tier 1 adds tool names, durations, prompt length and the attention message.Tier 2 adds prompts and replies, secrets redacted on your machine.Tier 3 adds tool input and output, for a receiver you own.
How it works
Harnesses
- Claude Code14 hook events
- CodexCLI and Desktop
- Gemini CLI8 hook events
- Antigravity4 hook events
- Devin CLI8 hook events
sessionpipe · on your machine
- adapt one file per harness
- normalise ids, order, session block
- filter to each sink's tier
- redact secrets, always
- outbox append-only, 30 days
Receivers
- sessionpipe-guiyour laptop, your phones
- spacesheep.devhosted, tier 2
- sessionpipe-receiverthe reference
- a file, stdoutno server at all
- any HTTPS receiverthat speaks HTTP.md
A command the agent already runs
At the moments it knows about: a session started, a tool is about to run, it is waiting for you. sessionpipe's hook hands the payload to a background worker and exits in under 150 ms.
One envelope for every agent
session.started,tool.ended,attention.needed: 17 types in protocol 1. Facts and timestamps, never a verdict: "stuck" and "done" are for the receiver to decide.Sent where you say, and kept until it lands
A sink is a file, stdout or a URL. The outbox on your disk moves a sink's cursor only after a 2xx and keeps 30 days, so a laptop offline for a week loses nothing.
sessionpipe-gui
Every session on your machines, live, on one board.
A separate open-source project: every coding-agent session on your machines, live, from your desk or your phone. Search everything your agents ever said, with the network down. No account, no cloud, no telemetry.
On a phone, the GUI is a page your computer serves. Install it there, then open it here over Wi-Fi or Tailscale.
Install with Nodenpm · no desktop app here yet Download for macOSApple silicon + Intel · 7.8 MB Download for Linux.deb · x86-64 · 4.2 MB
One event, start to finish
Claude Code asks permission to run a command. Here is what it hands the hook, what the adapter makes of it, and what a destination set to tier 0 actually receives.
-
What Claude Code fires
{ "hook_event_name": "PermissionRequest", "session_id": "ed6c7665-589f-…", "cwd": "~/…/ws2", "transcript_path": "~/.claude/projects/…", "permission_mode": "default", "tool_name": "Bash", "tool_input": { "command": "cat /nonexistent-file-xyz", "description": "Try to read a file…" } }Its own field names, its own format. Codex and Gemini CLI say the same thing differently.
-
What the adapter makes
{ "protocol": 1, "type": "attention.needed", "time": "2026-09-28T03:44:50.515Z", "tier": 1, "harness": { "name": "claude-code" }, "session": { "id": "ed6c7665-…" }, "privacy": { "rulesets": ["secrets@1"] }, "data": { "attention_id": "perm-1bb18c870624a063", "kind": "permission", "tool": "Bash", "message": "Bash cat /nonexistent-fi…" } }The same envelope for every agent. Secrets in
messagewould already be gone. -
What a tier-0 sink receives
{ "protocol": 1, "type": "attention.needed", "tier": 0, "…" "data": { "attention_id": "perm-1bb18c870624a063", "kind": "permission""tool": "Bash","message": "Bash cat /nonexistent-…"} }"Needs you", without the words. The filter is an allowlist per event type, so a field nobody listed never leaves.
Recorded from Claude Code 2.1.258 on 28 Sep 2026, trimmed for width. The full payload is a conformance fixture; CI checks the adapter against it.
You choose how much leaves
Each destination is set to a tier, and each receiver states the most it will accept. The lower of the two wins. Every tier includes the one before it.
- 0
presence
Session id, state, timing, machine, folder, repo, branch, model, title; the kind of attention needed.
A board of who is working, who needs you, who is done.
- 1
actions
+ tool names, durations, ok or error, file paths, the attention message, subagents.
An activity feed.
- 2
conversation
+ your prompts and the assistant's replies, redacted.
Memory, search, recaps.
- 3
full
+ tool input and output, thinking, raw hook lines.
Full replay, on a server you own.
The secrets ruleset runs on every string above tier 0 and cannot be turned off. PII reduction is a second pass you can turn on. sessionpipe tail --tier N shows exactly what a tier sends before you point it anywhere. The privacy spec.
Harnesses and receivers
One adapter file per harness is the only vendor-specific code in the tree. A harness joins the registry once it has fixtures recorded from real hook payloads, and CI runs every one of them through its adapter on every change.
| Harness | Hooks | Transcript (tier 2) | Facts read | Fixtures |
|---|---|---|---|---|
| Claude Code | 14 events | the session's .jsonl, mid-turn messages included | title, url, model, account, per config dir | 21 |
| Codex CLI, Codex Desktop | 12 events + notify | the thread's rollout; forks, never subagents or ephemeral threads | title, model | 15 |
| Gemini CLI | 8 events | the chat log | title, model | 14 |
| Antigravity | 4 events | brain/<id> messages | title, url to the conversation, in a git checkout too | 8 |
| Devin CLI | 8 events | its SQLite session store, read-only | title, model, times | 8 |
Next in the registry: Cursor, Copilot CLI, Droid, Kiro and OpenCode. Every mapping, native hook to protocol event, is in the adapters spec.
Receivers
- sessionpipe-gui
- Local. Every session on your machines, live, on a laptop or a phone; search across agent history, offline. Desktop apps for macOS and Linux.
- tier 3
sessionpipe-receiver- The reference receiver. One process, JSONL files, a page you can answer from a phone.
npx sessionpipe-receiver, or Docker. - tier 3
- Yours
- Serve
/.well-known/sessionpipeand one POST route, pass the conformance suite, and add it to the list. - your call
The protocol
The protocol is the contract. The client is one way to speak it; anyone can write the other end.
- 100 %line and branch coverage of every source file, enforced
- 89shared control vectors every verifier must agree on
- 66redaction vectors, each idempotent
- 19delivery scenarios a receiver is scored on
Every registered harness has fixtures recorded from real payloads, and a mutation suite feeds each one 40 to 60 broken shapes to prove no adapter can throw. Point the suite at your receiver to score it; the spec stays Draft until two independent receivers pass.
npx sessionpipe-conformance https://your-receiver.example
Privacy and security
No telemetry.
sessionpipe reports to the destinations you configured and to nobody else. This site has no analytics, no cookies, and loads nothing from anyone.
Secrets never leave.
Redaction runs on your machine before anything is written to the outbox, so a receiver never sees what was removed.
Your server, or none.
A file, stdout, the reference receiver on your laptop, or any HTTPS endpoint that speaks the protocol. There is no sessionpipe cloud.
Control: a receiver carries commands, it can never forge one
Every command is signed on your device with a passkey, and the machine checks the exact bytes against keys enrolled at its own terminal, the nonce, the age, the folder allowlist, and that a permission you answer is still open. Nothing is ever auto-allowed. The control spec · Security and the threat model.
sessionpipe control pair https://your-receiver.example
sessionpipe control folders add ~/work
sessionpipe control mode safe # or auto
Questions people ask
What is sessionpipe?
An open protocol, and a small client, that turns the hooks coding agents already fire (Claude Code, Codex, Gemini CLI, Antigravity and Devin today; Cursor, Copilot CLI and others next) into one uniform stream of session events: started, working on a tool, needs you, ended. You choose per destination how much leaves your machine.
Does it work with Claude Code hooks?
Yes. sessionpipe install writes Claude Code's SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, PermissionRequest, Notification, Stop, Subagent and Compact hooks into every config dir on the machine, and maps them to protocol events. Codex hooks, Gemini CLI hooks, Antigravity hooks and Devin CLI hooks work the same way.
What are the privacy tiers?
Tier 0 is presence (session state, timing, folder, model, title). Tier 1 adds tool names, durations and file paths. Tier 2 adds your prompts and the assistant's text. Tier 3 adds tool input and output. A sink is configured at a tier; the receiver declares its maximum; the lower wins. Secrets are redacted on your machine above tier 0, always.
Do I need a server?
No. sessionpipe tail follows the local outbox with no sink configured. When you want a receiver, run the reference one on your laptop, point at any HTTPS endpoint that speaks the protocol, or use a hosted receiver such as spacesheep.
Is there telemetry?
None. The client reports only to the sinks you configure, this website has no analytics or cookies, and the optional version check is a plain read of the npm registry that you can turn off.
Who maintains it, and under what license?
Michael Makarov, with a written path to more maintainers. Code is Apache-2.0, the specification is CC BY 4.0, contributions are under the Developer Certificate of Origin with no CLA.
See what your agents are doing.
One command on each machine your agents run on. Every session reports where you say, at the tier you choose.
npx sessionpipe install