Кожен урок нижче коштував реального часу в harness, який працював тижнями. Вони записані так: проблема, як вона виглядала ззовні, і правило, яке з неї вийшло. Якщо нічого іншого не читатимеш — читай правило.
Закриття — властивість плану, а не циклу
Проблема. У кожної задачі було багато критеріїв приймання, і кожен потребував доказу, перш ніж задача могла закритися.
Як це виглядало. Цикл годинами був зайнятий, а дошка заповнювалась задачами, які майже готові. Майже нічого не закривалось.
Правило. Познач кожен критерій [closes], [found] або [process], і хай закриття вирішують лише [closes].
Цілься в один [closes] на задачу. Гейт зменшився в рази, і задачі почали закриватися.
Вимірюй роботу, а не те, як її записує одна частина
Проблема. Прогрес рахували як нові коміти. А деякі юніти роблять справжню роботу без коміту: пишуть handoff для наступного юніта.
Як це виглядало. Здоровий запуск зупиняли як «безплідний», хоча він рухався вперед.
Правило. Прогрес — це коміти або handoff. Рахуй кожен вид результату, який дає цикл.
Перевіряй кожне показання на тому, що воно нібито вимірює
Проблема. Числам у вигляді live вірили, бо вони виглядали правдоподібно.
Як це виглядало. Три різні показники насправді вимірювали щось інше, ніж казав їхній підпис.
Правило. Перш ніж покладатися на число, один раз перевір його вручну на тому, що воно нібито вимірює.
Робота без нагляду має бути видимою, інакше їй ніхто не довіряє
Проблема. Цикл працював, але дізнатися, що він робить, можна було лише читаючи файли.
Як це виглядало. Ніхто не лишав його на ніч, бо ніхто не бачив, працює він чи завис.
Правило. Спершу збудуй watcher, ще до того, як циклу буде що показати. Довіра йде за видимістю.
Хід, що закінчується очікуванням, — це хід, що закінчується
Проблема. Виклики саб-агентів у CLI асинхронні, а в claude -p повідомлення без виклику інструмента завершує хід.
Як це виглядало. Координатор роздав роботу спеціалістам, написав «чекаю на результати», і юніт завершився. Відповіді прийшли пізніше і не дісталися нікому.
Правило. Розішли роботу, а потім тримай хід викликами інструментів, доки кожен спеціаліст не відзвітує. Підстрахуй це контрактом трейсу. Деталі на сторінці координації.
Спостерігач вимірює процес, що працює, а не той, що на нього чекає
Проблема. Watcher судив про юніт за активністю координатора.
Як це виглядало. Поки працювали спеціалісти, координатор хвилинами мовчав, і watcher показував юніт як завислий.
Правило. Стеж і за саб-агентами. Тихий координатор — не завислий юніт.
Прогрес-бар, у якого клітинка ширша за юніт, виглядає зупиненим
Проблема. Прогрес-бар просувався на одну клітинку за кожен завершений юніт, а юніт може тривати довго.
Як це виглядало. Бар довго стояв на місці, і люди вирішували, що запуск помер.
Правило. Показуй рух усередині юніта: його агентів, поточний інструмент. Оцінюй витрачений час за виміряним діапазоном минулих юнітів, а не за здогадкою.
Питання поруч із живими рядками ніхто не бачить
Проблема. Питання агента до людини з'являлося ще одним рядком поруч із жвавим live-виводом.
Як це виглядало. Питання чекали годинами, а задача чекала разом з ними.
Правило. Питання, яке блокує роботу, займає весь екран. Зроби так, щоб його неможливо було пропустити.
Лексичний шорткат — не судження
Проблема. Щоб зекономити токени, судження, яке потребувало розуміння, замінили перевіркою збігу слів.
Як це виглядало. Те, що означало одне й те саме різними словами, не збігалось, а те, що мало спільні слова, але означало різне, — збігалось.
Правило. Якщо рішення потребує моделі, використовуй модель. Не заміняй судження порівнянням рядків.
Контракт, що зупинив шкоду, все одно винен тобі причину
Проблема. Контракт правильно зупинив поганий юніт, але сказав лише, що перевірка не пройшла.
Як це виглядало. Кожна зупинка означала копирсання в логах, щоб зрозуміти, що сталося.
Правило. Кожне повідомлення гейту називає ймовірну причину і наступний крок.
Ніколи не вбивай процеси за шаблоном
Проблема. Агент пробував зупинити один зі своїх допоміжних процесів за шаблоном.
Як це виглядало. pkill -f шукає шаблон будь-де в будь-якому повному командному рядку, тож коротке слово
збіглося майже з кожним запущеним застосунком, включно з іншими сесіями Claude.
Правило. Зупиняй лише процес, який запустив сам, за точним PID, який ти зберіг. Це правило є в постійних правилах кожного агента.