«Готово» без доказательств: локальный runner, который говорит «blocked»

Когда агент в IDE уверенно пишет «Done!», а на диске тишина, доверие к ИИ-циклу рассыпается быстрее, чем вы успели закрыть задачу. Автор pet-project ORZN собрал узкий локальный runner, который не помечает шаг выполненным без доказательств — прямой ответ на боль «all bark and no bite» из свежего поста. Для ру-соло без облачного агента по умолчанию паттерн ledger и блокировка вместо «готово» — напоминание закрепить в своих rules: не закрывать задачу без артефакта или лога.
Почему ИИ-агенты «наррируют», а не доказывают результат
Автор формулирует мотивацию жёстко: устал от ИИ, которое «all bark and no bite» — уверенное, беглое и с «Done!» независимо от того, произошло ли что-то на самом деле. В README репозитория тот же контраст: большинство «AI agents» рассказывают историю и говорят «Done!», ORZN так не умеет.
Это не абстрактная философия доверия к модели. Это практическая поломка vibe-coding-цикла: вы отдаёте агенту переименование файлов или shell-команду, получаете уверенный отчёт — и только потом видите, что шаг не выполнен. ORZN задуман как противоположность в самом узком смысле: записывать каждое действие и не закрывать задачу без доказательства.
The one idea I actually cared about: it records every action, and it won't mark a task "done" unless there's evidence it happened. If it can't prove it, it says "blocked" instead.
Автор сам называет проект «small and early» и просит обратную связь — в том числе честное «this is too small to matter». Но идея попадает в нерв: критика «narrating agents» без привязки к конкретной IDE.
Как ORZN фиксирует доказательства и останавливается на approval
Механика простая и проверяемая. Каждое действие попадает в журнал; статус done — только при доказательстве, что шаг реально выполнен. Нет доказательства — blocked, не «готово». Перед изменением файлов инструмент останавливается на одобрение пользователя; шаги с "irreversible": true в CLI не проходят, пока не перезапустить с флагом --approve.
Каждый запуск пишет ledger в .orzn/runs/:
- точная команда;
- реальный exit code и вывод;
- отдельная verification-команда;
- собранные доказательства.
npm run cli orzn-core/sample-plan.json
# irreversible-шаги — только с --approve
ORZN — не универсальный агент «сделай что угодно». Сейчас это «handful of real things»: поиск файлов в Desktop, Documents, Downloads и Pictures, чтение и суммаризация, перемещение и массовое переименование (с approval, без перезаписи), запуск установленных десктоп-приложений, открытие сайтов, «безопасные» локальные shell-команды с проверкой вывода. Узкий scope — осознанный выбор против ожидания «сделай всё».
Локальный стек ИИ-планировщика: 127.0.0.1 и офлайн-режим
ORZN — самостоятельный локальный инструмент, не плагин Cursor, Copilot или Claude Code. Стек: Node.js 18+, веб-UI на http://127.0.0.1:4317, быстрый старт через npx orzn или git clone → npm start. Сервер слушает только localhost; данных «наружу» нет, кроме случаев, когда пользователь сам указывает URL. Бесплатно, локально, без аккаунта.
Планирование завязано на ИИ, но с запасным путём:
| Режим | Поведение |
|---|---|
| Есть API-ключ Google Gemini | Планировщик на Gemini |
| Ключа нет | Встроенный локальный эвристический planner |
| Суммаризация файла | Gemini при ключе или полностью офлайн для одного указанного файла |
Ключ Gemini, если нужен, хранится только в .orzn/secrets.local.json на диске (git-ignored). Для соло-разработчика, который не хочет по умолчанию кормить облако, офлайн-planner — не маркетинговый лозунг, а описанный в README fallback.
Архитектура разделена: orzn-core/ — движок (planner, runner, ledger), orzn-ui/ — веб-интерфейс. Лицензия MIT, репозиторий открыт на GitHub.
Что перенести в соло-workflow с агентами — без интеграции с IDE
ORZN не подключается к Cursor rules и не заменяет MCP. Но три приёма из его дизайна ложатся на любой ИИ-цикл у одного разработчика:
- Ledger вместо устного «сделал» — фиксировать команду, код выхода и вывод, а не доверять пересказу модели.
- Blocked вместо done — если нет артефакта (файл переименован, лог команды, скрин проверки), задача остаётся открытой.
- Approval перед irreversible — отдельный шаг согласования перед перезаписью или необратимым действием.
В терминах vibe coding это близко к rule «агент не закрывает тикет без diff или лога тестов» — только здесь контракт зашит в runner, а не в промпт. Автор просит советы по развитию; для читателя ценность — не клонировать ORZN целиком, а украсть дисциплину доказательств туда, где агент уже работает: в терминале, в CI или в чек-листе перед коммитом.
Ранний pet-project, но антипаттерн «Done! без результата» узнаваем без привязки к площадке. Если ваш агент красиво «наррирует» — проверьте, есть ли у вас свой .orzn/runs/ хотя бы в виде папки с логами.
Источники
- I built a tiny local tool that won't say "done" unless it can prove it — Dev.to, автор snithik_s_ba819307d6c8074, опубликовано 24 июля 2026
- ORZN — README репозитория — механика ledger, planner, CLI и локальный запуск