Reelier
официальныйАгенты делают утверждения. Reelier выписывает квитанции — записывает рабочий процесс вызова инструментов агентом один раз, воспроизводит его детерминированно с нулевым расходом токенов и сравнивает запуски для выявления отклонений.
Что можно делать с Reelier MCP?
- Сканировать историю агента на наличие воспроизводимых рабочих процессов —
reelier_scanобнаруживает прошлые сеансы Claude Code, Codex, Windsurf или OpenClaw, содержащие последовательности вызовов инструментов, которые можно скомпилировать в навыки. - Скомпилировать сеанс в детерминированный навык —
reelier_from_sessionпреобразует записанный трейс в файлSKILL.mdс утверждением на каждом шаге, без участия LLM. - Воспроизвести навык с нулевым расходом токенов —
reelier_replayдетерминированно выполняет скомпилированный навык за миллисекунды, по умолчанию только для чтения, создавая побайтно идентичную квитанцию. - Сравнить два запуска для выявления расхождений —
reelier_diffсравнивает воспроизведения пошагово, сообщает SAME или DRIFTED с указанием невыполненного утверждения и завершается с ненулевым кодом при расхождении. - Отправить квитанцию для создания общедоступной постоянной ссылки —
reelier_pushсинхронизирует квитанцию запуска с реестром, опционально генерируя значок верифицированного воспроизведения.
Документация
Reelier
Агенты делают заявления. Reelier выписывает чеки.
Запишите успешный прогон, воспроизводите его детерминированно — 0 токенов, побайтово идентично, чек на каждом шаге — и reelier diff поймает день, когда он отклонится.
Думайте об этом как о CI + snapshot-тестах для рабочих процессов вызовов инструментов вашего агента.
Веб-сайт · Документация · SPEC.md
Ваш агент каждый раз заново выводит один и тот же рабочий процесс — сжигая токены и незаметно отклоняясь. Reelier компилирует успешный прогон в файл SKILL.md, который воспроизводится детерминированно (без LLM, 0 токенов, каждый шаг подтверждается чеком), а затем сравнивает прогоны, чтобы поймать день, когда он перестанет совпадать. Для агентов на повторяющихся производственных задачах — где «он отработал» не является доказательством.
Установка → ваш первый чек за 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 токенов, с чеком.
- Это не хрупкая RPA. Воспроизводятся вызовы инструментов (типизированный JSON на входе/выходе), а не пиксели — и каждый шаг несёт собственное утверждение, так что сломанный шаг громко падает, никогда не проходит молча.
- Обновили модель? Воспроизведение зафиксировано — перезапишите на новой модели и выполните
reelier diffпо вашему замороженному базовому уровню: СОВПАДАЕТ или ОТКЛОНИЛОСЬ, по каждому шагу, прежде чем попасть в production. - «Всё детерминированное должно быть просто кодом.» Согласны — ваш агент уже написал его. 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 токенов).
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 токенов. Отвечает: делает ли это всё ещё то, что делало? - Восстановление —
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(ниже) это то, как вы ловите изменение схемы инструмента до того, как это сделает реальное воспроизведение.
Таксономия предоставлена Мадсом Хансеном по результатам рецензии стартового поста.
Отклонение схемы инструмента: 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 (только чтение по умолчанию; запись закрыта за
--allow-writes) - reelier_diff — сравнивает два прогона: СОВПАДАЕТ или ОТКЛОНИЛОСЬ по каждому шагу, с указанием проваленного утверждения как причины; выход 1 при отклонении
- reelier_push — синхронизирует чек прогона с реестром для создания доступной по ссылке постоянной записи (по желанию)
Измеренное доказательство
Из реального, живого прямого сравнительного теста (агент против Reelier, та же задача, те же данные) — полные таблицы + методология в examples/benchmark:
- 1 000 / 1 000 воспроизведений побайтово идентичны (тест на дисперсию хвоста N=1000)
- 0 токенов на воспроизведение — проверено по записи прогона, а не предположено
- ~в 50 раз дешевле ($0.000000/воспроизведение против $0.019068/прогон в среднем по группе агента)
- ~в 59 раз быстрее (48 мс против 2 842 мс средней задержки)
- реальное отклонение самовосстановилось примерно за $0.001, один раз, затем бесплатно при каждом последующем воспроизведении
Задержка зависит от сети — воспроизведение Уровня 0 повторно выполняет вызовы инструментов навыка, поэтому время выполнения зависит от вашего соединения. Что не меняется: 0 токенов LLM, одни и те же шаги при каждом прогоне и чек. Независимо подтверждено — arXiv 2605.14237 обнаружил сокращение токенов на 93,3–99,98% для той же схемы записи и воспроизведения.
Работает с любой моделью (BYOK)
Воспроизведение Уровня 0 (по умолчанию) никогда не вызывает модель — 0 токенов, по построению. Эскалация (--max-level 1|2) опциональна и взаимодействует через один узкий интерфейс BYOK (--llm-base-url + --llm-model): нативный адаптер Anthropic Messages и адаптер, совместимый с OpenAI, для всего остального (OpenRouter, Ollama, конечная точка Gemini OpenAI, Groq, vLLM, LM Studio, Kimi, …). Направьте его на более сильную модель, и следующее самовосстановление каждого навыка станет умнее бесплатно.
Владейте им — MIT, BYOK, local-first
Используйте где угодно, встраивайте во что угодно — никаких ограничений копилефта, не требуется юридическая проверка. Ваши навыки, трассировки и записи прогонов — это ваши данные — уход заключается в копировании папки. Форматы описаны в SPEC.md, нормативной справке в стиле RFC, так что любой может создавать или потреблять их, не читая исходный код.
Участие в разработке
Issues и PR приветствуются — см. SPEC.md для форматов (спецификация главнее кода; исправляйте код, а не спецификацию). npm test запускает полный набор тестов; npm run build && npx tsc --noEmit перед PR.
git clone https://github.com/seldonframe/reelier && cd reelier
npm install && npm test
История звёзд
Лицензия
MIT — свободно для форка, встраивания, аудита и самостоятельного хостинга навсегда. (Версии ≤0.16.0 были выпущены под AGPL-3.0 и остаются таковыми.)
Если Reelier сэкономил вам повторный прогон, поставьте звезду ⭐ — так другие разработчики находят его.