AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻譯準備中
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證An open protocol and client for what your coding agents are doing: hooks for every harness, four privacy tiers, any sink.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
An open protocol, and a client, for what your coding agents are doing. One
install hooks Claude Code, Codex, Gemini CLI, Antigravity and more; every event is
filtered to a privacy tier you choose per destination, secrets are removed on your
machine before anything leaves it, and it goes to your server, to a file, or nowhere
at all.檢視完整 README ↗An open protocol, and a client, for what your coding agents are doing. One install hooks Claude Code, Codex, Gemini CLI, Antigravity and Devin; every event is filtered to a privacy tier you choose per destination, secrets are removed on your machine before anything leaves it, and it goes to your server, to a file, or nowhere at all. Messages come back the same way: answer a permission or queue the next prompt from your phone, signed by your passkey and checked on the machine.
Status: pre-release, spec Draft until two independent receivers pass the conformance suite. On npm:
sessionpipe(the CLI),sessionpipe-core,sessionpipe-receiver,sessionpipe-conformance, published unscoped until the@sessionpipeorg exists. See ROADMAP.md and the changelog.
To a receiver that offers pairing, one command per machine:
npx sessionpipe connect your-receiver.example
It shows six digits; approve them on any phone or computer where you're signed in to
the receiver (it doesn't have to be this machine). That one approval is the whole
setup: the hooks for every agent and every Claude Code account here, a sink at tier 2,
signed messages from your devices, the keys in your keychain when this session has one
unlocked, a background daemon that keeps running after you log out, and the last 30
days backfilled. It asks nothing else; run it again and it only fixes what's missing.
The daemon keeps sessionpipe up to date by itself, installing a new release once a day
at most and only when it's idle (sessionpipe update off stops that; see
the CLI's README).
In the Claude desktop app, ask the session to run sessionpipe wait as a background
command. Messages from your devices then arrive in that session, in the app, with no
claude command or separate sign-in
(Get started).
Or only the hooks, with nothing sent anywhere:
npx sessionpipe install
That detects the harnesses on your machine, writes their hooks, and backfills the last 30 days of sessions into a local outbox. Nothing is sent anywhere until you add a sink:
sessionpipe sink add https://your-receiver.example --tier 1
sessionpipe tail # watch events locally, no server needed
git clone https://github.com/spacesheep-dev/sessionpipe && cd sessionpipe
npm ci --ignore-scripts && npm run build && npm test
npm pack -w sessionpipe
npm install -g --prefix ~/.local sessionpipe-*.tgz # ~/.local/bin on PATH; never the clone itself
sessionpipe install
The CLI tarball bundles core, so it needs no other package. Don't npm link the
clone: the hooks would point into it, and moving the clone would break every harness.
$ sessionpipe tail --tier 1
sessionpipe tail · tier 1 · ~/.local/state/sessionpipe/outbox (Ctrl-C to stop)
02:56:19 codex 01a0… session.started source=startup ~/spacesheep main
02:56:20 codex 01a0… turn.started prompt_chars=147
02:56:20 codex 01a0… tool.started Bash
02:56:21 codex 01a0… tool.ended Bash ok
02:56:21 codex 01a0… turn.ended stop
02:56:22 codex 01a0… session.ended reason=other
(A real Codex 0.157.1 run on 28 Sep 2026, through the hook, the worker and the outbox.)
One adapter file each, under packages/core/src/adapters/,
the only vendor-specific code in the tree. A harness is in the registry once it has
fixtures recorded from real hook payloads (conformance/harness/).
| 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 (ADAPTERS.md): Cursor, Copilot CLI, Droid, Kiro, OpenCode.
Each sink is configured at a tier; the receiver declares its maximum; the lower wins.
| Tier | What leaves | Who it is for |
|---|---|---|
| 0 | Session ids, state, timing, machine, repo, branch, model, title; attention kind | A presence board: "working / needs you / done" |
| 1 | + tool names, durations, ok/error, file paths, attention message, subagents, compactions, account limits | An activity feed |
| 2 | + your prompts and the assistant's text (turn.transcript), a running turn as it runs (turn.progress) | Memory, search, recaps |
| 3 | + tool input and output, thinking, raw hook lines | Full replay, your own server only |
The secrets ruleset runs on every string above tier 0 and cannot be turned off; PII
reduction is a second, opt-in pass. sessionpipe tail shows exactly what a tier
sends. Provided as-is; check what a sink receives with sessionpipe tail before
you point it anywhere.
A receiver carries commands; it can never forge one. Every command is signed on your device with a passkey, or with a desktop or phone app's device key held in hardware (or a day key either one vouched for), 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. Then it delivers through the harness's own documented hooks: a message for the next turn, a permission answer while the terminal shows its prompt (nothing is ever auto-allowed), a cancel, or a new session started headlessly for any harness the machine can drive, with files if the command carries them. CONTROL.md has every rule and refusal code; 136 shared vectors pin them.
sessionpipe control pair https://your-receiver.example # once, at the machine's own terminal
sessionpipe control folders add ~/work # where messaged sessions may run
sessionpipe control mode safe # or auto or inherit; what a messaged session may do
The same daemon can keep several Claude accounts behind one loopback listener, so a
Claude Code session keeps going when one account's limit is reached: sessionpipe pool add --import, then sessionpipe pool on. A request goes to the first account in your
order that has room, a session stays on its account while it has room, and each
account's numbers arrive as limits.observed with account_id, so a receiver shows
every account's room. Opt-in only, credentials in the machine's own secrets store and
sent only to the vendor (the pool,
CONTROL.md §6 pool).
stdout, the reference receiver on your
laptop, or any HTTPS endpoint that speaks the protocol.| Receiver | Where it runs | max tier |
|---|---|---|
| sessionpipe-gui | your laptop; a board for every phone on the LAN, control included | 3 |
| spacesheep.dev | hosted; sessions across machines, messages from anywhere | 2 |
| sessionpipe-receiver | the reference, one process and JSONL files | 3 |
| any HTTPS endpoint | that speaks HTTP.md: one well-known file, one endpoint, a dedup key | yours |
The full list: sessionpipe.org/receivers.
The fixtures are the contract, and CI refuses what they don't prove.
spec/ | The protocol: envelope, events, tiers, HTTP binding, control channel, adapters, versioning (CC BY 4.0) |
schemas/v1/ | JSON Schemas, generated from the code; also served at https://sessionpipe.org/schema/v1/ |
conformance/ | Real hook payloads per harness, redaction vectors, delivery scenarios, control vectors |
packages/core | sessionpipe-core: types, adapters, privacy filter, outbox, sinks, the control verifier (zero dependencies) |
packages/cli | sessionpipe: connect, install, sink, status, doctor, tail, forget, replay, update, the control daemon |
packages/receiver | sessionpipe-receiver: one process, JSONL files, a page you can answer from a phone |
packages/conformance | sessionpipe-conformance: scores a receiver or an adapter |
website/ | sessionpipe.org, rendered from spec/ |
Read CONTRIBUTING.md. Every commit is signed off under the DCO; there is no CLA. A new harness is one adapter file plus fixtures for every event it handles and a row in ADAPTERS.md. A protocol change starts as a spec proposal with a fixture, then seven days of lazy consensus. Security reports go through SECURITY.md.
Code is Apache-2.0 (LICENSE, NOTICE); the spec is CC BY 4.0 (spec/LICENSE). "sessionpipe" is a mark of Michael Makarov; see TRADEMARKS.md. Governance: GOVERNANCE.md.