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 workflowsreelier_scan discovers past Claude Code, Codex, Windsurf, or OpenClaw sessions containing tool-call sequences that can be compiled into skills.
  • Compile a session into a deterministic skillreelier_from_session converts a recorded trace into a SKILL.md file with an assertion on every step, no LLM involved.
  • Replay a skill at zero tokensreelier_replay executes a compiled skill deterministically in milliseconds, read-only by default, producing a byte-identical receipt.
  • Diff two runs to catch driftreelier_diff compares replays step-by-step, reports SAME or DRIFTED with the failing assertion, and exits non-zero on drift.
  • Push a receipt for a shareable permalinkreelier_push syncs a run receipt to the ledger, optionally generating a verified-replay badge.

文件

Reelier

Reelier

代理人做出聲明。Reelier 寫下收據。

記錄那次成功的執行,並以確定性方式重播 — 0 個 token,每個步驟都位元組完全相同,附帶收據 — 而 reelier diff 會在其偏離時捕捉到。

把它想像成你代理人工具呼叫工作流程的 CI + 快照測試。

npm version CI tests license Discord stars

網站 · 文件 · SPEC.md

Reelier: record a run that worked, replay it deterministically at 0 tokens, diff for drift, a receipt on every step

▶ 觀看並聆聽 (22秒)

Reelier MCP server on Glama


你的代理人每次執行都重新推導相同的工作流程 — 燃燒 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)
  1. 記錄 — 三種方式:reelier mcp --wrap "<your mcp server>"(一個在你代理人工具前方的無損代理)、直接來自現有的工作階段(reelier scan / reelier from-session),或引導式的 reelier init
  2. 編譯reelier compile 將追蹤記錄確定性地轉換為一個 SKILL.md(0 次 LLM 呼叫)— 一份在每個步驟上都有斷言的配方,並且編譯器會將其坦誠的不足之處列印為開放性問題(包括它標記為「這應該是個變數嗎?」的具體日期、UUID 和時間戳),而非胡亂猜測。
  3. 重播reelier run 在第 0 級執行:無 LLM、毫秒級、位元組完全相同。預設為唯讀 — 一個寫入步驟(idempotent-write)永遠不會再次觸發,除非你傳入 --allow-writes
  4. 比較差異reelier diff 比較一個技能的兩次執行,並報告每個步驟是相同還是已偏離,並以失敗的斷言作為原因。偏離時退出碼為 1,因此它可以為排程的重播把關。
  5. 收據 — 每次執行都是一張收據(每個步驟的結果、計時、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_scanreelier_from_sessionreelier_replayreelier_diffreelier_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

星號歷史

Star History Chart

授權條款

MIT — 可自由複刻、嵌入、稽核和永久自行託管。(版本 ≤0.16.0 是根據 AGPL-3.0 發布,並維持不變。)

如果 Reelier 為你省下了一次重新執行,給它一顆星 ⭐ — 這是其他開發者發現它的方式。