Reelier
官方Agents make claims. Reelier writes receipts — record an agent's tool-call workflow once, replay it deterministically at 0 tokens, and diff runs to catch drift.
你可以用 Reelier MCP 做什麼?
- Scan agent history for replayable workflows —
reelier_scandiscovers past Claude Code, Codex, Windsurf, or OpenClaw sessions containing tool-call sequences that can be compiled into skills. - Compile a session into a deterministic skill —
reelier_from_sessionconverts a recorded trace into aSKILL.mdfile with an assertion on every step, no LLM involved. - Replay a skill at zero tokens —
reelier_replayexecutes a compiled skill deterministically in milliseconds, read-only by default, producing a byte-identical receipt. - Diff two runs to catch drift —
reelier_diffcompares replays step-by-step, reports SAME or DRIFTED with the failing assertion, and exits non-zero on drift. - Push a receipt for a shareable permalink —
reelier_pushsyncs a run receipt to the ledger, optionally generating a verified-replay badge.
文件
Reelier
代理人做出聲明。Reelier 寫下收據。
記錄那次成功的執行,並以確定性方式重播 — 0 個 token,每個步驟都位元組完全相同,附帶收據 — 而 reelier diff 會在其偏離時捕捉到。
把它想像成你代理人工具呼叫工作流程的 CI + 快照測試。
你的代理人每次執行都重新推導相同的工作流程 — 燃燒 token 並悄悄地偏離。Reelier 將一次成功的執行編譯成一個 SKILL.md 檔案,該檔案能以確定性方式重播(無需 LLM,0 個 token,每個步驟都斷言並寫入收據),然後比較各次執行,以捕捉其不再匹配的那一天。專為用於重複性生產工作流程的代理人設計 — 在這種情境下,「它運行了」並不能作為證明。
安裝 → 60 秒內取得你的第一張收據
npm i -g reelier && reelier init
reelier init 會先掃描你已完成的工作 — 橫跨 Claude Code、Codex、Windsurf 和 OpenClaw — 並提議將一個真實的過往工作階段轉換為可重播的技能。沒有這類歷史記錄?它會執行一個零設定的示範,並以一張真實的收據作結:
Your receipt:
skill: reelier-init-demo
steps: 2 total, 2 passed, 0 unchecked, 0 failed
replay time: 44ms [measured]
LLM tokens: 0 [measured]
An agent doing a comparable task re-reasons every run (~2.8s, ~18k tokens on
our benchmark). Your replay: 44ms, 0 tokens.
或者用 Docker 執行 — 無需安裝 Node
docker run --rm ghcr.io/seldonframe/reelier --help
# Replay a skill from the current directory:
docker run --rm -v "$PWD:/work" -w /work ghcr.io/seldonframe/reelier run my.skill.md
# Record from your agent history (mount it read-only):
docker run --rm -v "$HOME/.claude:/root/.claude:ro" -v "$PWD:/work" -w /work \
ghcr.io/seldonframe/reelier scan
為何使用
- 你的代理人每次執行都重新學習工作 — 然後悄悄地偏離。 每次執行都重新推導工作流程,而每個微小的「合理」修正都會累積 — 長期營運者稱之為疤痕組織。一個已編譯的技能永遠不會重新學習,也無法偏離。
- 真正的問題是帳單。 「那花了多少錢?」 是每次長時間代理人執行後得到的第一個回覆。Reelier 以 0 個 token 重播,並附帶收據。
- 這不是脆弱的 RPA。 重播的是工具呼叫(具型別的 JSON 輸入/輸出),而非像素 — 而且每個步驟都帶有自己的斷言,因此一個損壞的步驟會大聲失敗,絕不會默默地通過。
- 升級了模型? 重播是固定的 — 在新模型上重新記錄,並將
reelier diff與你凍結的基線進行比較:在進入生產環境之前,就能得知每個步驟是相同還是已偏離。 - 「任何確定性的事物都應該只是程式碼。」 同意 — 你的代理人已經寫好了。Reelier 捕捉其真實、有效的執行過程,並放入一個經過測試的檔案中。無需手動編碼即可實現確定性。
運作方式 — 記錄 → 編譯 → 重播 → 比較差異 → 收據
reelier init # 60s: record → compile → replay → your receipt
reelier run <name>.skill.md # replay deterministically — 0 tokens (read-only by default)
reelier diff <name> # SAME or DRIFTED, per step — exit 1 on drift
reelier push <name>.skill.md # sync receipts to your ledger (opt-in)
- 記錄 — 三種方式:
reelier mcp --wrap "<your mcp server>"(一個在你代理人工具前方的無損代理)、直接來自現有的工作階段(reelier scan/reelier from-session),或引導式的reelier init。 - 編譯 —
reelier compile將追蹤記錄確定性地轉換為一個SKILL.md(0 次 LLM 呼叫)— 一份在每個步驟上都有斷言的配方,並且編譯器會將其坦誠的不足之處列印為開放性問題(包括它標記為「這應該是個變數嗎?」的具體日期、UUID 和時間戳),而非胡亂猜測。 - 重播 —
reelier run在第 0 級執行:無 LLM、毫秒級、位元組完全相同。預設為唯讀 — 一個寫入步驟(idempotent-write)永遠不會再次觸發,除非你傳入--allow-writes。 - 比較差異 —
reelier diff比較一個技能的兩次執行,並報告每個步驟是相同還是已偏離,並以失敗的斷言作為原因。偏離時退出碼為 1,因此它可以為排程的重播把關。 - 收據 — 每次執行都是一張收據(每個步驟的結果、計時、0 個 token)。
reelier push可選擇性地將它們同步到收據帳本,以獲得可分享的永久連結 + 可嵌入的已驗證重播徽章。
轉換代理人技能
將一個指令技能 + 一次記錄的執行轉換為確定性重播 — 你的技能,減去模型:
reelier mcp --wrap "<your mcp server>" # record: agent runs the skill's task once
reelier compile trace.jsonl --from-skill ./my-skill/SKILL.md
# → my-skill.skill.md — name + description carried from your SKILL.md,
# steps ONLY from the recorded run (never generated from instruction text)
從任何代理人匯入工作階段
你的代理人自己的工作階段日誌中已經有可重播的工作流程。reelier scan 能找到它們;reelier from-session 能將其中一個轉換為技能。格式是從檔案內容中嗅探出來的 — 對於支援的代理人無需標誌:
reelier scan # discovers sessions from every known agent under your home dir
reelier from-session ~/.claude/projects/*/*.jsonl # Claude Code
reelier from-session ~/.codex/sessions/**/rollout-*.jsonl # Codex CLI
reelier from-session ~/.openclaw/agents/*/sessions/*.jsonl # OpenClaw
| 代理人 | 工作階段位置 | 狀態 |
|---|---|---|
| Claude Code | ~/.claude/projects/<project>/<uuid>.jsonl | 支援 |
| Codex CLI | ~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl | 支援 |
| OpenClaw | ~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl | 支援 |
| Cursor | .../User/globalStorage/state.vscdb (SQLite,未記錄) | 已偵測,尚無法解析 |
| Windsurf | .../User/globalStorage/state.vscdb (SQLite,未記錄) | 已偵測,尚無法解析 |
只有可重播的呼叫(Reelier 自己的內建功能,或 mcp__<server>__<tool> 呼叫)才會被編譯成技能 — 原生的檔案/殼層/搜尋動作會被報告為已跳過,絕不會被偽造成一個步驟。傳入 --agent <claude-code|codex|openclaw> 可強制指定格式,而非自動偵測;reelier scan / reelier from-session --agent cursor(或 --agent windsurf)會誠實地報告磁碟上的內容,而不是猜測未記錄的二進位格式。
三種測試,一個技能
一個已記錄的技能讓你能對它提出三種不同的問題,而非一種:
- 確定性 —
reelier run <skill.md>根據你記錄的斷言進行重播。相同的步驟,相同的斷言,0 個 token。回答:它是否仍然執行它之前所做的? - 復原 —
reelier run <skill.md> --fail N[=status]在步驟N(預設狀態500;可用--fail N=429覆寫,可重複)注入一個合成失敗,而不是分派該步驟的真實工具呼叫,然後執行真實失敗會觸發的相同升級階梯。網路外部實際上不會發生任何事 — 一個模擬的步驟永遠不會呼叫其工具,因此你可以在沒有--allow-writes且無副作用的情況下,對一個寫入步驟進行復原測試。回答:如果這壞了,技能會注意到並自我修復嗎?(模擬執行僅為本機測試 —reelier push會拒絕發布模擬執行;請見下文。) - 偏離 —
reelier run <skill.md> --wrap "<your mcp server>"根據你即時的、唯讀的依賴項進行重播,而不是根據記錄的追蹤。搭配下方的reelier manifest,這正是你在真實重播之前,捕捉工具結構描述悄然改變的方法。
此分類法源自 Mads Hansen 對發布文章的審查。
工具結構描述偏離:reelier manifest
一個技能的步驟會以特定的參數形式呼叫特定的工具。如果一個被包裝的 MCP 伺服器的工具結構描述在你記錄之後發生了變化,重播應該大聲拒絕,而不是默默地填入錯誤的參數。reelier manifest 會為技能步驟實際使用的每個工具蓋上一個結構描述摘要戳記:
reelier manifest <skill.md> --wrap "<your mcp server>" # stamp/refresh the manifest from live servers
reelier run <skill.md> --wrap "<your mcp server>" # preflight checks the manifest BEFORE step 1 runs
如果一個已蓋戳記的工具其結構描述已偏離(或工具已不存在),reelier run 會在執行任何操作之前就安全地失敗 — MANIFEST DRIFT — refusing to replay。--ignore-manifest 是明確的緊急覆寫機制,用於當你知道偏離是沒問題的時候;它仍然會被記錄在執行中(manifestIgnored: true),因此它永遠不會是一個無聲的繞過。完全沒有清單的技能只會得到一個諮詢說明 — 每個在清單出現之前的技能都能保持不變地繼續運作。
每個步驟的寫入核准:reelier approve
--allow-writes/--yes 是全面性的標誌 — 它們表示「這次執行可以寫入」,而不是「這個確切的寫入已被審查」。reelier approve 將核准以雜湊方式綁定到一個特定步驟的工具 + 參數範本:
reelier approve <skill.md> # walk each write/destructive step, y/N to approve
reelier approve <skill.md> --all # approve every write step non-interactively
一個已核准的步驟,若其工具/參數仍然與其蓋章的雜湊值匹配,則無需任何標誌即可執行。如果該步驟的工具或參數自核准後已更改,重播會安全地失敗 — Approval mismatch — 且沒有任何標誌可以覆寫它;你需要重新審查並重新核准。一個沒有 approve: 欄位的寫入步驟,會保持今天確切的 --allow-writes/--yes 行為,不做改變。
斷言其值,而非僅斷言其形狀
一個技能的斷言正是使重播成為證明的關鍵。其語法會檢查狀態、結構和值:
- assert: status == 200
- assert: json.results is array
- assert: json.count >= 1 # numeric range
- assert: json.plan is string # type
- assert: json.id matches /^usr_/ # value pattern
- assert: body contains "ok"
在你的編碼代理人 (MCP) 中使用它
reelier serve 將 Reelier 自己的命令作為 MCP 工具公開,因此 Claude Code / Cursor / Windsurf / Codex 可以在工作階段中呼叫它:
{ "mcpServers": { "reelier": { "command": "npx", "args": ["-y", "reelier", "serve"] } } }
代理人會獲得 reelier_scan、reelier_from_session、reelier_replay、reelier_diff 和 reelier_push — 並附帶描述,確切告訴它何時該使用每個工具(以及何時不該)。它會記錄一次確定性任務,然後重播,而不是重新推理。
工具
- reelier_scan — 掃描代理人工作階段歷史記錄(Claude Code、Codex、Windsurf、OpenClaw),尋找可重播的工具呼叫工作流程
- reelier_from_session — 將一個已記錄的工作階段編譯成一個可重播的 SKILL.md,並在每個步驟上附帶斷言
- reelier_replay — 以 0 個 LLM token 確定性地重播一個技能(預設為唯讀;寫入由
--allow-writes把關) - reelier_diff — 比較兩次執行:每個步驟是相同還是已偏離,並以失敗的斷言作為原因;偏離時退出 1
- reelier_push — 將執行收據同步到帳本以獲得可分享的永久連結(選擇性加入)
可量測的證明
來自一次真實、即時的對等基準測試(代理人 vs. Reelier,相同任務,相同資料)— 完整表格 + 方法論在 examples/benchmark:
- 1,000 / 1,000 次重播位元組完全相同(N=1000 尾部變異數測試)
- 每次重播 0 個 token — 從執行記錄中驗證,而非假設
- 便宜約 50 倍(每次重播 $0.000000,相較於代理人組平均每次執行 $0.019068)
- 快約 59 倍(平均延遲 48 毫秒 vs. 2,842 毫秒)
- 一次真實的偏離自我修復成本約為 $0.001,一次,之後每次重播都免費
延遲因網路而異 — 第 0 級重播會重新執行技能的工具呼叫,因此實際時間取決於你的連線。不變的是:0 個 LLM token、每次執行相同的步驟,以及收據。經獨立證實 — arXiv 2605.14237 發現相同的記錄與重播模式可減少 93.3–99.98% 的 token。
適用於任何模型 (BYOK)
第 0 級重播(預設)永遠不會呼叫模型 — 根據設計即為 0 個 token。升級(--max-level 1|2)是選擇性加入的,並透過一個狹窄的 BYOK 介面(--llm-base-url + --llm-model)進行溝通:一個原生的 Anthropic Messages 適配器,以及一個適用於所有其他服務的 OpenAI 相容適配器(OpenRouter、Ollama、Gemini 的 OpenAI 端點、Groq、vLLM、LM Studio、Kimi 等)。將其指向一個更強大的模型,每個技能的下一次自我修復都會免費變得更聰明。
擁有它 — MIT、BYOK、本地優先
在任何地方使用它,將其嵌入任何東西 — 沒有 copyleft 限制,無需法律審查。你的技能、追蹤記錄和執行記錄都是你的資料 — 離開只需複製一個資料夾。格式在 SPEC.md 中指定,這是一份規範性的 RFC 風格參考資料,因此任何人都可以在不閱讀原始碼的情況下產生或使用它們。
貢獻
歡迎提出議題和 PR — 格式請參見 SPEC.md(規格優先於程式碼;修正程式碼,而非規格)。npm test 執行完整的測試套件;在提交 PR 前執行 npm run build && npx tsc --noEmit。
git clone https://github.com/seldonframe/reelier && cd reelier
npm install && npm test
星號歷史
授權條款
MIT — 可自由複刻、嵌入、稽核和永久自行託管。(版本 ≤0.16.0 是根據 AGPL-3.0 發布,並維持不變。)
如果 Reelier 為你省下了一次重新執行,給它一顆星 ⭐ — 這是其他開發者發現它的方式。