Перейти к содержимому
Экосистема AI Vibe

Разборы

Четыре речевых акта вместо двухсотстрочного промпта: как агентный цикл превратить в «машину обязательств»

Редакция 15 октября 2026 г.

Четыре речевых акта вместо двухсотстрочного промпта: как агентный цикл превратить в «машину обязательств»

Четыре режима cold start после сжатия контекста и три «успеха без свидетеля» сходятся в одном: длинный SKILL.md, этические «законы» и pre-landing чеклист обещают дисциплину, но не фиксируют Request, Promise, Assertion и Declaration на диске и не дают человеку отозвать Promise. В серии Synthetic Scars Randal L. Schwartz перестраивает публичный multi-agent workflow так, чтобы target в Makefile и файл в state/ были договором Customer и Performer, с остановкой инструментов до человеческого Declaration.

Почему промпт-«адвокатство» и чеклисты ломаются одинаково

Schwartz ставит один вопрос: почему двухсотстрочные agent prompts, «три закона» Азимова и последовательные pre-landing чеклисты дают сходные отказы. Ответ ищет не в новой модели, а в Fernando Flores (Committed Speech, 1986), четырёхзначной логике Nuel Belnap (1977) и CSP Tony Hoare (1978). Для агентного цикла это значит: в чате легко накопить «мы могли бы…», как в двухтысячном .cursorrules или CLAUDE.md с обещанием «conscientious 10x senior engineer» без ролей Customer/Performer, без срока By-When и без права отозвать Promise.

В production-версии правил верхние ~50 строк SKILL.md работали как декларативный Makefile, нижние ~130 строк как «defensive prompt lawyering». Аудит 180+ field tests свёл типовые сбои к нарушениям тех же четырёх речевых актов (коды вроде SCAR-PROC-101, 94, 102).

ИИ-агент без диска обязательств: Performer, который обещает вслух и исчезает после «lobotomy» на 200k токенов.

Четыре акта на диске: Request, Promise, Assertion, Declaration

В workflow Schwartz разделяет Customer (человек или upstream-оркестратор) и Performer (агент или форкнутый субагент). Четыре акта закреплены файлами, а не абзацами в чате:

Акт Кто → кому Артефакт в цикле
Request Customer → Performer 10_ticket.md, Socratic probe на pause gate
Promise Performer → Customer 20_plan_approved.md после 15_archaeology_receipt.md
Assertion Performer → Customer свидетельства: file:line, exit codes, SHA-256 diff (40_critic_review.md и др.)
Declaration Customer → мир human-plan-approval, human-commit-approval, human-landing-approval; критик VERDICT: APPROVED (0 BLOCKERS) → 45_review_approved.md

С точки зрения Performer в CSP: ? (вход от Customer), ! (выход Performer). На ?Declare-Approve агент обязан остановиться (tool_calls: []) и ждать на линии. Performer не может подменить Declaration; это отдельный класс ошибок (SCAR-PROC-102).

На 15_archaeology_receipt.md Belnap сводится к двум битам: UNKNOWN (0,0), ESTABLISHED (1,0), CONTRADICTED (1,1) → !Counter-Offer, RETRACTED (0,1) → !Revoke-Promise и пересогласование плана.

Makefile 00–90: DAG, By-When и четыре режима cold start

Практический стек: flat SysV в духе /etc/init.d, Target NN ≡ state/NN_*.md, координаты 00..90. Фрагмент DAG из Part 3.10 (после нормализации «TOTO II»):

  • read-init-d → 00_governance.md: bootloader, 4-Case Commitment switch
  • ticket-assigned → 10_ticket.md
  • archaeology-verified → 15_archaeology_receipt.md: форк Archaeologist, Belnap ledger
  • approved-plan → 20_plan_approved.md: !Promise, стоп до human-plan-approval
  • implementation-diff → 30: форк TDD Worker (Red → Green); при RETRACTED откат к 15/20
  • adversarial-review → 40_critic_review.md: adversarial_critic на branch.diff
  • approved-review → 45_review_approved.md
  • commit / push / bot-quiescence / land / finish → 50…90, включая poll CI и четырёх ботов с 180s+ quiescence и финальный 99_next_action.md с Mermaid Commitment DAG в IDE Artifacts

Двоеточие в prerequisite Makefile здесь совпадает с Flores By-When: следующая стадия не стартует, пока не закрыт outcome предыдущей. Субагенты (Archaeologist, TDD Worker, adversarial_critic, Triage Worker) описаны как отдельные форки, а не бесконечная переписка «как в почте 1990-х».

После compaction холодный старт сводится к Open Commitment Ledger и switch на Target 00: read-init-d:

  1. OPEN_REQUEST: есть 10_ticket.md, нет 20_plan_approved.md → archaeology и offer plan
  2. ACTIVE_PROMISE: план есть, нет receipt на By-When gate → motor tools до gate
  3. RETRACTED_PREMISE: в archaeology есть RETRACTED → !Revoke-Promise, halt edits, renegotiate 15/20
  4. AWAITING_DECLARATION: assertion complete, нет Customer ?Declare → tool_calls: []

Это не автоматический git revert, а явная машина состояний обязательств: self-healing Commitment Machine в терминах серии Synthetic Scars.

# Упрощённая логика cold start (смысл из WORKFLOW.mk, Part 3.10)
case ledger at 00_governance.md:
  OPEN_REQUEST      -> archaeology -> plan promise
  ACTIVE_PROMISE    -> tools until By-When gate
  RETRACTED_PREMISE -> revoke promise, renegotiate 15/20
  AWAITING_DECLARE  -> halt tool_calls until human ?Declare

Свидетельства в diff и перенос цикла в Cursor

В комментариях к той же публикации на Dev.to обсуждают риск «зелёного света по label, не по факту». Ответ Schwartz: на Target 30 differential witness, Red before Green; для diff предлагается git diff | shasum -a 256, а на Target 40 идея pin test_sha256 между Red и Green и third-party test ownership. Для соло-цикла с агентом это контраргумент «агент сказал, что готово»: assertion без file:line, exit code или хеша diff остаётся SCAR-PROC-101 (fake completion).

Диагностические таблицы по Азимову и эпизоду M-5 (The Ultimate Computer) служат каталогом missing mechanism: где не хватило Counter-Offer, witnessed assertion, archaeology или разделения каналов Customer/Performer. Тот же приём применён к кейсу October 1990 (gear-up landing Piper Arrow): premature !Promise на shortcut tower, пропуск шага GUMP, контраст с land: final-aligned three-green-witnessed в их Makefile.

Если вы один оператор и несколько форков в IDE, полезный минимум из Part 3.10: не переписывать Flores, а перенести обещания с чата на диск (ticket → archaeology receipt → approved plan → diff с критиком → human gates на plan, commit, push и landing). Проверьте свой SKILL.md и .cursorrules на долю «uncommitted speech»; Schwartz предлагает сверить их с дисциплиной Committed Speech (кликабельного URL на «Public Workflow Gist» на странице Dev.to нет, только текстовая отсылка).

В roadmap серии Part 3.11 обещает flight-testing на production tickets; это анонс следующей части, не результат 3.10. Цифры из анонса 3.11 сюда не переносим.


Источники

  • Randal L. Schwartz, Requests, Promises, Assertions, and Declarations: Rewriting Our AI Agent Workflow as a 1986 'Committed Speech' Machine (Dev.to, Part 3.10 Synthetic Scars): Dev.to, доступ 2026-10-15T06:03:00Z
  • Публикация на Dev.to: 14 октября 2026 г. (UTC 19:53); 9 комментариев, 13 публичных реакций; ~26 мин чтения по данным площадки.