GEODE
Autonomous Agent Harness
De la observație la următoarea acțiune.
Un cadru local pentru agenți autonomi, căruia i se pot încredința cercetare, lucru cu fișiere și sarcini programate.
Propunerea modelului de a se opri devine finalizare doar prin verificare.
Pentru o oprire livrabilă, un model care cere să se oprească trece totuși prin verificarea finalizării. Rezultatul este: încheiat, continuare în limita bugetului sau așteptarea revizuirii; limitele de execuție, anularea și erorile se încheie într-o stare de oprire separată.
Verificare → finalizare
Doar o oprire livrabilă trece prin PreVerify → judecată → PostVerify → Stop. Nici propunerea de oprire a modelului, nici o instrucțiune de hook nu sunt în sine o finalizare.
arun · tura modelului
loop/agent_loop.pydate: propunere de oprireoprire livrabilă · natural etc.loop/_guards.py · models.pyCând modelul răspunde cu text fără apel de instrument, tura devine candidat la oprirea natural (forced_text în ultima rundă permisă). Propunerea modelului de a se opri nu este încă o finalizare.
oprire livrabilă · natural etc.
loop/_guards.py · models.pydate: candidat la finalizarefinalize_and_return_asyncloop/_lifecycle.pyDoar natural, forced_text și actionable_partial sunt opriri livrabile și doar acestea trec la verificarea publică.
finalize_and_return_async
loop/_lifecycle.pyrulare · decizie: PreVerifyPreVerify · STRENGTHENcore/hooks/public.pyCu STRENGTHEN, hookul PreVerify poate doar să adauge cerințe și coduri de lipsă. Poate face verdictul mai strict, dar nu îl poate face să treacă.
finalize_and_return_async
loop/_lifecycle.pyrulare · decizie: verify_turn_asyncverificare structurală · empty_turncore/agent/verify.pyMai întâi vine o verificare structurală (tură goală, model_action_required); un eșec structural ireparabil sare peste judecata semantică. Setări vechi precum off sau rule_based se rezolvă la llm_judge și nu pot dezactiva verdictul.
judecată semantică · LLM sau Jev
core/agent/verify.pydate: cerere de judecatăModel judecătorJudecătorul selectat (implicit judecătorul LLM, Jev Choice când este ales) este apelat o singură dată, fără instrumente, cel mult 120 de secunde și niciodată peste bugetul de timp rămas. Un candidat care ar putea conține observații personale nu este trimis unui judecător auxiliar.
judecată semantică · LLM sau Jev
core/agent/verify.pydate: passed · rubric_missespolicy_action · interpretarea verdictuluiloop/_lifecycle.pyVerdictul conține reușita sau eșecul, codurile de lipsă, o reflecție pentru următoarea încercare și dacă o reîncercare este utilă. O reușită semantică nu acoperă niciodată o verificare structurală eșuată.
policy_action · interpretarea verdictului
loop/_lifecycle.pyrulare · decizie: Decizia PostVerifyPostVerify · ACCEPT · REVISE · ESCALATEcore/hooks/public.pyHookul PostVerify decide ACCEPT, REVISE sau ESCALATE. Un ACCEPT pentru un candidat care a eșuat la verificare devine escalate. Fără decizie se aplică valoarea implicită a mediului de execuție (trecere → accept, reîncercabil → revise, altfel escalate).
policy_action · interpretarea verdictului
loop/_lifecycle.pyrulare · decizie: Stop · CONTINUEStop · CONTINUEcore/hooks/public.pyInstrucțiunea CONTINUE a hookului Stop poate cere o continuare de reparare doar când nu există escaladare. O instrucțiune de hook este o intrare pentru următoarea încercare, nu o permisiune.
policy_action · interpretarea verdictului
loop/_lifecycle.pydate: completed · salvatpunct de control · starea sesiuniimemory · observabilityLa trecere și accept, încercările continuate sunt îmbinate, rezultatul este salvat, iar sesiunea este înregistrată ca completed.
finalize_and_return_async
loop/_lifecycle.pydate: răspunsIPC · apelant CLIReturnează răspunsul final la finalizare; un răspuns gol cu EXTERNAL_VERIFICATION_REQUIRED când așteaptă revizuirea; motivul opririi pentru o oprire fără verificare.
Reparare în limita bugetului
Un eșec reparabil continuă aceeași cerere. Bugetul implicit este de două încercări; când se epuizează, candidatul așteaptă revizuirea.
judecată semantică · LLM sau Jev
core/agent/verify.pydate: passed · rubric_missespolicy_action · interpretarea verdictuluiloop/_lifecycle.pyVerdictul conține reușita sau eșecul, codurile de lipsă, o reflecție pentru următoarea încercare și dacă o reîncercare este utilă. O reușită semantică nu acoperă niciodată o verificare structurală eșuată.
policy_action · interpretarea verdictului
loop/_lifecycle.pyrulare · decizie: Decizia PostVerifyPostVerify · ACCEPT · REVISE · ESCALATEcore/hooks/public.pyHookul PostVerify decide ACCEPT, REVISE sau ESCALATE. Un ACCEPT pentru un candidat care a eșuat la verificare devine escalate. Fără decizie se aplică valoarea implicită a mediului de execuție (trecere → accept, reîncercabil → revise, altfel escalate).
policy_action · interpretarea verdictului
loop/_lifecycle.pyrulare · decizie: Stop · CONTINUEStop · CONTINUEcore/hooks/public.pyInstrucțiunea CONTINUE a hookului Stop poate cere o continuare de reparare doar când nu există escaladare. O instrucțiune de hook este o intrare pentru următoarea încercare, nu o permisiune.
buget de continuare · implicit 2
loop/_lifecycle.pyrulare · decizie: reparare · încercare +1_arun_once · continuarea reparațieiloop/agent_loop.pyCu o instrucțiune de reparare și doar cât timp numărul încercării este sub buget (implicit două), aceeași cerere continuă. La atingerea bugetului devine escalate_budget_exhausted și așteaptă revizuirea.
În așteptarea revizuirii
Un verdict inutilizabil, o încercare de a transforma un eșec în reușită sau un buget epuizat reține candidatul și pune sesiunea pe pauză.
verification_error · eșuează închis
core/agent/verify.pyeșec · fără verdict: verification_errorpolicy_action · interpretarea verdictuluiloop/_lifecycle.pyUn judecător lipsă, o expirare sau un răspuns invalid devine verification_error: nici trecere, nici semnal de reparare. Un verdict inutilizabil nu ține niciodată locul succesului.
policy_action · interpretarea verdictului
loop/_lifecycle.pyrulare · decizie: Decizia PostVerifyPostVerify · ACCEPT · REVISE · ESCALATEcore/hooks/public.pyHookul PostVerify decide ACCEPT, REVISE sau ESCALATE. Un ACCEPT pentru un candidat care a eșuat la verificare devine escalate. Fără decizie se aplică valoarea implicită a mediului de execuție (trecere → accept, reîncercabil → revise, altfel escalate).
policy_action · interpretarea verdictului
loop/_lifecycle.pyrulare · decizie: ESCALATE · pendingRevizor externCandidatul este păstrat ca pending_text și reținut din răspunsurile obișnuite, punctul de control este salvat, iar sesiunea este pusă pe pauză. Niciun revizor extern nu este contactat automat.
policy_action · interpretarea verdictului
loop/_lifecycle.pyînregistrare · observare: verdict · rânduri de dovezicronologie · rânduri de decizie în registrumemory · observabilityCronologia primește rânduri de decizie, de dovezi și în așteptare, iar registrul de dovezi un rând verification_policy. Sunt înregistrări fără garanție, nu dovezi ale unui efect extern.
Opriri fără verificare
Opririle prin anulare, limită și infrastructură, precum și rulările de control workflow sunt salvate fără verificare publică.
arun · tura modelului
loop/agent_loop.pyrulare · decizie: protecții · limiteoprire prin eșec · limită · anulareloop/_guards.py · models.pyProtecții precum limitele de runde, timp, cost și context, anularea și detectarea eșecurilor repetate încheie tura cu un element din mulțimea închisă TerminationReason. O limită dezactivată în configurație nu este aplicată întotdeauna.
oprire prin eșec · limită · anulare
loop/_guards.py · models.pyeșec · fără verdict: oprire prin eșec · anularefinalize_and_return_asyncloop/_lifecycle.pyOpririle prin anulare, infrastructură și limită nu au un candidat de verificat, așa că sunt salvate fără verificare publică.
control workflow · fără verificare publică
ipc_server/poller.pyrulare · decizie: fără verificare publicăfinalize_and_return_asyncloop/_lifecycle.pyCând un apel IPC cere omiterea verificării publice sau un control workflow este activ, verificarea publică este oprită doar pentru acea rulare, iar valoarea anterioară este restabilită după aceea.
finalize_and_return_async
loop/_lifecycle.pydate: doar salvare · fără verificarepunct de control · starea sesiuniimemory · observabilityO oprire fără verificare își salvează totuși rezultatul și punctul de control și emite evenimentele de sfârșit de sesiune.
finalize_and_return_async
loop/_lifecycle.pydate: răspunsIPC · apelant CLIReturnează răspunsul final la finalizare; un răspuns gol cu EXTERNAL_VERIFICATION_REQUIRED când așteaptă revizuirea; motivul opririi pentru o oprire fără verificare.
Fiecare conexiune cu aceeași grosime. Alegeți un flux pentru a evidenția doar traseul lui, cu pași numerotați.
- Continuă · direcția în care circulă cererile, candidații și rezultatele
- Întreruptă · rulare, decizie, autorizare, configurare
- Linie-punct lungă · înregistrări și observație, separate de verdict
- Liniuță scurtă · un eșec sau un verdict inutilizabil
- Linie neagră groasă · fluxul selectat; numerele dau ordinea
- Casetă · o graniță de cod sau de înregistrări, cu calea în antet
- Etichetă interioară · o componentă din acea graniță
- Casetă întreruptă · în afara acelei granițe
- buclă · finalizare
- opriri · hookuri · verdict
- salvare · înregistrări
- Intrare IPC
Sunt desenate doar căile de apel din commitul fixat 9e2c041. Trecerea dată de un judecător este separată de succesul unui verificator de benchmark extern; finalizarea este aici o decizie din interiorul mediului de execuție.
- Motorul de judecată
- Implicit este judecătorul LLM; Jev Choice judecă doar când judgment_engine este setat la jev. În ambele cazuri, un judecător inutilizabil dă verification_error, niciodată succes.
- Ce pot face hookurile
- PreVerify poate doar să facă verdictul mai strict, PostVerify nu poate trece un candidat eșuat, iar Stop poate cere o continuare doar când nu există escaladare.
- În așteptarea revizuirii
- Așteptarea revizuirii înregistrează că este nevoie de o decizie externă. Nu anunță pe nimeni și nu înseamnă că rezultatul a fost aprobat.