Reverzibilita agent-nástrojov je z 93% rozhodnuteľná zo signatúry — tých 7% čo nie, je tvoj shell
Olabelovali sme 330 reálnych agent-nástrojov (ToolEmu, dva modely, Cohenova kappa 0.82): reverzibilita je z ~93% rozhodnuteľná zo signatúry. Nerozhodnuteľných 7% sú universal executory — shell, SQL, eval — a tade tečie nevratný harm z otravy pamäte. inspeximus 1.2.0 gate.
Reversibility gate je štandardná posledná línia obrany pre agentov s nástrojmi: pred vykonaním akcie sa overí, či sa dá vrátiť, a tie nevratné sa pozastavia. Severity gradery ako Action-Graded Severity Scale (arXiv:2607.07474) to kódujú tak, že reverzibilitu každého nástroja fixujú v tabuľke — delete_file je nevratný, read_file nie. Tá tabuľka funguje len ak je reverzibilita naozaj rozhodnuteľná z nástroja. Nikto nezmeral, či je. Tak sme to spravili.
Olabelovali sme každý nástroj v korpuse ToolEmu (38 toolkitov, 330 nástrojov v zverejnenom súbore; paper uvádza 36/311) na to, či je jeho reverzibilita rozhodnuteľná zo samotnej signatúry, dvoma nezávislými modelmi a s reportovanou zhodou.
Reverzibilita je z 93% rozhodnuteľná zo signatúry — a tých 7% čo nie je, je tvoj shell
Per-tool predpoklad z veľkej časti platí. Reverzibilita je rozhodnuteľná zo signatúry pri asi 93% reálnych nástrojov (Cohenova κ = 0.82, „takmer dokonalá" zhoda). Zaujímavé je rezíduum. Tých ~7% nástrojov, kde reverzibilita rozhodnuteľná nie je, sú všetko ten istý druh: verb-polymorphic universal executory — shell, ktorý spustí ľubovoľný príkaz, spúšťač ľubovoľného SQL, eval kódu. Ten istý Terminal.Execute je aj ls (vratné) aj rm -rf (nevratné); reverzibilita je v argumente, nie v nástroji. Per-tool label je pre ne bezvýznamný.
| čo sme zmerali (ToolEmu, 330 nástrojov, 2 labeleri) | hodnota |
|---|---|
| reverzibilita rozhodnuteľná zo signatúry | ~93% (κ = 0.82) |
| nerozhodnuteľné rezíduum (universal executory) | ~7% |
| podiel universal executorov v korpuse | ~0.3% (dolná hranica) |
| dedikované nevratné nástroje (per-tool gate ich chytí) | ~16% |
Dosah universal executora určuje containment, nie nástroj
Zrejmá otázka: aký harm ten jeden shell reálne dosiahne? Poctivá odpoveď je, že to úplne závisí od prostredia, a tá závislosť sa ľahko odhadne zle. Pri izolovanom shelli — bez siete, bez ambient credentials — shell reprodukuje asi polovicu lokálnych nevratných harm-ov (delete, corrupt, overwrite), ale prakticky žiaden externý (poslať email, previesť peniaze, verejne postnúť), lebo ich nemá čím dosiahnuť. Daj tomu istému shellu realistické produkčné prostredie — curl, injektnuté API kľúče, nainštalované CLI ako aws a git — a externý dosah skočí z ~0% na ~66%.
Takže to, čo ohraničuje nevratný externý harm agenta s otrávenou pamäťou cez universal executor, je containment executora, nie per-tool reversibility flag. Chceme byť presní v tom, čo tu je a nie je nové: rozdelenie harm-u na lokálny a externý nie je náš nápad — je to presne scope × reversibility mriežka arXiv:2607.07474, zmeraná na inom korpuse. My pridávame meranú mieru rozhodnuteľnosti (tých 93%, s κ), izoláciu universal executorov ako rezíduovej triedy, a preklopenie dosahu izolovaný → networked.
Čo sme vydali: universal-executor gate v inspeximus 1.2.0
Útok na pamäť nepotrebuje sfalšovať provenance ani siahnuť po označenom nástroji. Stačí mu nasmerovať argumenty nevinne vyzerajúceho universal executora k nevratnému výsledku. Preto inspeximus 1.2.0 pridáva opt-in gate, ktorý pre tieto nástroje odmieta dôverovať per-tool reversibility labelu:
```python from inspeximus import Inspeximus, is_universal_executor
is_universal_executor("Terminal.Execute") # True — reverzibilita nerozhodnuteľná zo signatúry is_universal_executor("SendEmail", ["to","body"]) # False — dedikovaný, signature-decidable nástroj
m = Inspeximus()
m.spend_irreversible(ids, tool="Terminal.Execute") # allowed = False
m.spend_irreversible(ids, tool="Terminal.Execute", contained=True) ```
tool=None zachováva správanie 1.1.0 byte-za-byte, takže gate je opt-in. Je poctivý o vlastných hraniciach: detektor je heuristika a contained je asercia callera, ktorú knižnica nevie overiť — vynúti deklaráciu, nevynúti sandbox.
Poctivé hranice
Dva modely ako labeleri merajú zdieľané priors modelov, nie ground truth; pri networked-external otázke sa zhodnú len na ~0.32, čo je samo o sebe zistenie — že dosah je naozaj závislý od CLI a credentials. ToolEmu podhodnocuje shell a code-interpreter nástroje, ktoré sú dnes v produkčných agentoch štandard (OpenAI code interpreter, Claude computer-use), takže ~0.3% výskyt universal executorov je podlaha, nie typická hodnota. A headline tu potvrdzuje konsenzus, nie ho vyvracia: per-tool reversibility metadata sú pre väčšinu nástrojov v poriadku; pozornosť potrebuje tá universal-executor časť a containment executora.
Celý beh — REPRODUCED, s runnable probe — je na Crucible.
FAQ
Dá sa reverzibilita akcie agenta rozhodnúť z nástroja? Pri asi 93% reálnych nástrojov áno (zmerané na ToolEmu, 330 nástrojov, Cohenova κ = 0.82). Tých ~7%, kde nie, sú verb-polymorphic universal executory — shell, ľubovoľné SQL, eval kódu — kde reverzibilitu určuje argument, nie nástroj.
Prečo per-tool reversibility gate nezastaví harm cez shell? Lebo ten istý shell je aj vratný (ls) aj nevratný (rm -rf) podľa argumentov, takže jeden per-tool label je preň nesúdržný. Gate sa musí posunúť na úroveň argumentov a externý dosah musí ohraničiť containment.
Čo pridáva inspeximus 1.2.0? is_universal_executor() na detekciu týchto nástrojov, a spend_irreversible(tool=, contained=), ktorý neContained universal executor odmietne rovno namiesto dôvery per-tool reversibility flagu. Je opt-in a spätne kompatibilný.