Get started

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.

npx sessionpipe install

Get startedRead the protocol

Setting it up with an agent? Give it /agent.md

  • Claude Code
  • Codex
  • Gemini CLI
  • Antigravity
  • Devin CLI
What a sink receives

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

  1. adapt one file per harness
  2. normalise ids, order, session block
  3. filter to each sink's tier
  4. redact secrets, always
  5. 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
Messages and permission answers come back the other way.
  1. 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.

  2. 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.

  3. 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.

Download for macOSApple silicon + Intel · 7.8 MB Download for Linux.deb · x86-64 · 4.2 MB

v0.8.1 · macOS 13+, notarized · needs Node 20+ · AppImage · All releases · or install with npm

Everything it does, on a desktop and on a phone

sessionpipe-gui 0.8.1 · demo data
Board · phone · 0.8.1, demo data
The sessionpipe-gui board on a phone, demo data: the session that needs you first, then the ones working.

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.

  1. 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.

  2. 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 message would already be gone.

  3. 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.

  1. 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.

  2. 1

    actions

    + tool names, durations, ok or error, file paths, the attention message, subagents.

    An activity feed.

  3. 2

    conversation

    + your prompts and the assistant's replies, redacted.

    Memory, search, recaps.

  4. 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.

HarnessHooksTranscript (tier 2)Facts readFixtures
Claude Code14 eventsthe session's .jsonl, mid-turn messages includedtitle, url, model, account, per config dir21
Codex CLI, Codex Desktop12 events + notifythe thread's rollout; forks, never subagents or ephemeral threadstitle, model15
Gemini CLI8 eventsthe chat logtitle, model14
Antigravity4 eventsbrain/<id> messagestitle, url to the conversation, in a git checkout too8
Devin CLI8 eventsits SQLite session store, read-onlytitle, model, times8

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
spacesheep.dev
Hosted. Sessions across machines, memory and recaps, messages from anywhere.
tier 2
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/sessionpipe and one POST route, pass the conformance suite, and add it to the list.
your call

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

  1. 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.

  2. Secrets never leave.

    Redaction runs on your machine before anything is written to the outbox, so a receiver never sees what was removed.

  3. 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

Get started

From the team behind spacesheep.dev