GEODE
Autonomous Agent Harness
Від спостереження до наступної дії.
Локальна обв’язка автономного агента, якій можна доручити дослідження, роботу з файлами та заплановані завдання.
Пропозиція моделі зупинитися стає завершенням лише через верифікацію.
Для зупинки з готовим результатом модель, яка просить зупинитися, однаково проходить верифікацію завершення. Підсумок — готово, продовження в межах бюджету або очікування рев’ю; ліміти виконання, скасування й помилки закінчуються окремим станом зупинки.
Верифікація → завершення
Лише зупинка з готовим результатом проходить PreVerify → рішення → PostVerify → Stop. Ні пропозиція моделі зупинитися, ні інструкція hook самі по собі не є завершенням.
arun · хід моделі
loop/agent_loop.pyдані: пропозиція зупинкизупинка з результатом · natural тощоloop/_guards.py · models.pyКоли модель відповідає текстом без виклику інструмента, хід стає кандидатом на природну зупинку natural (forced_text в останньому дозволеному раунді). Пропозиція моделі зупинитися — ще не завершення.
зупинка з результатом · natural тощо
loop/_guards.py · models.pyдані: кандидат на завершенняfinalize_and_return_asyncloop/_lifecycle.pyЛише natural, forced_text і actionable_partial є зупинками з готовим результатом, і лише вони переходять до публічної верифікації.
finalize_and_return_async
loop/_lifecycle.pyзапуск · рішення: PreVerifyPreVerify · STRENGTHENcore/hooks/public.pyІз STRENGTHEN hook PreVerify може лише додавати вимоги й коди пропусків. Він може зробити вердикт суворішим, але ніколи не зарахувати успіх.
finalize_and_return_async
loop/_lifecycle.pyзапуск · рішення: verify_turn_asyncструктурна перевірка · empty_turncore/agent/verify.pyСпершу йде структурна перевірка (порожній хід, model_action_required); невиправний структурний збій пропускає семантичне рішення. Старі налаштування, як-от off чи rule_based, зводяться до llm_judge і не можуть вимкнути вердикт.
семантичне рішення · LLM або Jev
core/agent/verify.pyдані: запит на рішенняМодель-суддяОбраного суддю (типово LLM judge, Jev Choice — якщо його обрано) викликають один раз, без інструментів, щонайбільше на 120 секунд і ніколи понад залишок часового бюджету. Кандидата, який може містити особисті спостереження, допоміжному судді не надсилають.
семантичне рішення · LLM або Jev
core/agent/verify.pyдані: passed · rubric_missespolicy_action · прочитання вердиктуloop/_lifecycle.pyВердикт містить успіх чи провал, коди пропусків, рефлексію для наступної спроби та ознаку, чи корисна повторна спроба. Семантичний успіх ніколи не перекриває проваленої структурної перевірки.
policy_action · прочитання вердикту
loop/_lifecycle.pyзапуск · рішення: Рішення PostVerifyPostVerify · ACCEPT · REVISE · ESCALATEcore/hooks/public.pyHook PostVerify вирішує ACCEPT, REVISE або ESCALATE. ACCEPT для кандидата, що не пройшов верифікацію, стає escalate. Якщо рішення немає, діє типове значення середовища виконання (pass → accept, retryable → revise, інакше escalate).
policy_action · прочитання вердикту
loop/_lifecycle.pyзапуск · рішення: Stop · CONTINUEStop · CONTINUEcore/hooks/public.pyЛише коли немає ескалації, інструкція CONTINUE від hook Stop може запросити продовження з виправленням. Інструкція hook — це вхід для наступної спроби, а не повноваження.
policy_action · прочитання вердикту
loop/_lifecycle.pyдані: completed · збереженоконтрольна точка · стан сесіїmemory · observabilityЗа успіху й accept продовжені спроби об’єднуються, результат зберігається, а сесію записано як completed.
finalize_and_return_async
loop/_lifecycle.pyдані: відповідьIPC · викликач CLIПовертає фінальну відповідь, коли завершено; порожню відповідь з EXTERNAL_VERIFICATION_REQUIRED, коли очікується рев’ю; причину зупинки — для зупинки без верифікації.
Виправлення в межах бюджету
Виправний збій продовжує той самий запит. Типовий бюджет — дві спроби; коли його вичерпано, кандидат чекає на рев’ю.
семантичне рішення · LLM або Jev
core/agent/verify.pyдані: passed · rubric_missespolicy_action · прочитання вердиктуloop/_lifecycle.pyВердикт містить успіх чи провал, коди пропусків, рефлексію для наступної спроби та ознаку, чи корисна повторна спроба. Семантичний успіх ніколи не перекриває проваленої структурної перевірки.
policy_action · прочитання вердикту
loop/_lifecycle.pyзапуск · рішення: Рішення PostVerifyPostVerify · ACCEPT · REVISE · ESCALATEcore/hooks/public.pyHook PostVerify вирішує ACCEPT, REVISE або ESCALATE. ACCEPT для кандидата, що не пройшов верифікацію, стає escalate. Якщо рішення немає, діє типове значення середовища виконання (pass → accept, retryable → revise, інакше escalate).
policy_action · прочитання вердикту
loop/_lifecycle.pyзапуск · рішення: Stop · CONTINUEStop · CONTINUEcore/hooks/public.pyЛише коли немає ескалації, інструкція CONTINUE від hook Stop може запросити продовження з виправленням. Інструкція hook — це вхід для наступної спроби, а не повноваження.
бюджет продовжень · типово 2
loop/_lifecycle.pyзапуск · рішення: виправлення · спроба +1_arun_once · продовження з виправленнямloop/agent_loop.pyЗа наявності інструкції з виправлення й лише поки номер спроби менший за бюджет (типово два) той самий запит продовжується. Щойно бюджет досягнуто, стан стає escalate_budget_exhausted і чекає на рев’ю.
Очікування рев’ю
Непридатний вердикт, спроба перетворити збій на успіх або вичерпаний бюджет притримують кандидата й ставлять сесію на паузу.
verification_error · закривається на збої
core/agent/verify.pyзбій · без вердикту: verification_errorpolicy_action · прочитання вердиктуloop/_lifecycle.pyВідсутній суддя, тайм-аут або невалідна відповідь стають verification_error: ні успіхом, ні сигналом до виправлення. Непридатний вердикт ніколи не замінює успіху.
policy_action · прочитання вердикту
loop/_lifecycle.pyзапуск · рішення: Рішення PostVerifyPostVerify · ACCEPT · REVISE · ESCALATEcore/hooks/public.pyHook PostVerify вирішує ACCEPT, REVISE або ESCALATE. ACCEPT для кандидата, що не пройшов верифікацію, стає escalate. Якщо рішення немає, діє типове значення середовища виконання (pass → accept, retryable → revise, інакше escalate).
policy_action · прочитання вердикту
loop/_lifecycle.pyзапуск · рішення: ESCALATE · pendingЗовнішній рецензентКандидат зберігається як pending_text і не потрапляє у звичайні відповіді, контрольна точка зберігається, а сесія стає на паузу. Зовнішнього рецензента автоматично не сповіщають.
policy_action · прочитання вердикту
loop/_lifecycle.pyзапис · спостереження: вердикт · рядки доказівtimeline · рядки рішень ledgermemory · observabilityTimeline отримує рядки рішень, доказів і pending, а evidence ledger — рядок verification_policy. Це записи best-effort, а не доказ зовнішнього ефекту.
Зупинки без верифікації
Зупинки через скасування, ліміти й інфраструктуру та запуски control workflow зберігаються без публічної верифікації.
arun · хід моделі
loop/agent_loop.pyзапуск · рішення: запобіжники · лімітизупинка через збій · ліміт · скасуванняloop/_guards.py · models.pyЗапобіжники, як-от ліміти раундів, часу, вартості й контексту, скасування та виявлення повторних збоїв, завершують хід одним членом закритого набору TerminationReason. Ліміт, вимкнений у конфігурації, не завжди примусово застосовується.
зупинка через збій · ліміт · скасування
loop/_guards.py · models.pyзбій · без вердикту: зупинка через збій · скасуванняfinalize_and_return_asyncloop/_lifecycle.pyЗупинки через скасування, інфраструктуру й ліміти не мають кандидата для верифікації, тому зберігаються без публічної верифікації.
control workflow · пропуск публічної верифікації
ipc_server/poller.pyзапуск · рішення: пропуск публічної верифікаціїfinalize_and_return_asyncloop/_lifecycle.pyКоли виклик IPC просить пропустити публічну верифікацію або активний control workflow, публічну верифікацію вимкнено лише для цього запуску, а потім попереднє значення відновлюється.
finalize_and_return_async
loop/_lifecycle.pyдані: лише збереження · без верифікаціїконтрольна точка · стан сесіїmemory · observabilityЗупинка без верифікації однаково зберігає свій результат і контрольну точку та надсилає події завершення сесії.
finalize_and_return_async
loop/_lifecycle.pyдані: відповідьIPC · викликач CLIПовертає фінальну відповідь, коли завершено; порожню відповідь з EXTERNAL_VERIFICATION_REQUIRED, коли очікується рев’ю; причину зупинки — для зупинки без верифікації.
Усі зв’язки однакової товщини. Оберіть потік, щоб підсвітити лише його шлях із пронумерованими кроками.
- Суцільна · напрямок, яким рухаються запити, кандидати й результати
- Штрихова · запуск, рішення, авторизація, налаштування
- Довга штрихпунктирна · записи й спостереження, окремо від вердикту
- Коротка штрихова · збій або непридатний вердикт
- Товста чорна лінія · обраний потік; номери показують порядок
- Рамка · межа коду чи записів, шлях у заголовку
- Внутрішня плашка · компонент у цій межі
- Штрихова рамка · поза цією межею
- цикл · фіналізація
- зупинки · hooks · вердикт
- збереження · записи
- вхід IPC
Накреслено лише шляхи викликів на зафіксованому коміті 9e2c041. Успіх у судді — це не те саме, що успіх зовнішнього верифікатора бенчмарку; завершення тут — рішення всередині середовища виконання.
- Рушій суджень
- Типово це LLM judge; Jev Choice ухвалює рішення лише тоді, коли judgment_engine має значення jev. В обох випадках непридатний суддя дає verification_error, а не успіх.
- Що можуть hooks
- PreVerify може лише зробити вердикт суворішим, PostVerify не може зарахувати кандидата, що не пройшов, а Stop може запросити продовження лише тоді, коли немає ескалації.
- Очікування рев’ю
- Очікування рев’ю фіксує, що потрібне зовнішнє рішення. Воно нікого не сповіщає й не означає, що результат схвалено.