AWS geeft agent-harnessen een rem: Dogwood Local Engine keurt elke tool call
AWS heeft de Dogwood Local Engine uitgebracht, een opensource-bibliotheek die per tool call van een AI-agent een allow- of deny-verdict afgeeft. De engine is geschreven in Rust, staat onder de Apache 2.0-licentie en is bedoeld om ingebed te worden in de harness of gateway rond een agent.
Het bijzondere zit niet in het blokkeren zelf, maar in waar de policy's naar mogen kijken: eerdere acties van de agent en hoe die zijn afgelopen.
Policy's met een geheugen
Dogwood is de policy-taal die AWS in augustus opensource maakte, samen met reference tooling en ondersteuning in Amazon Bedrock AgentCore. De Local Engine maakt die policy-engine nu direct inbouwbaar, los van AWS-diensten.
Het voorbeeld dat AWS er zelf bij geeft, is een coding agent die alleen mag pushen als de tests recent zijn geslaagd:
permit (principal, action == Sandbox::Action::"git:push", resource)
when temporal {
!Sandbox::Action::"tests"::response{ output.passed: false }
since within 15m
Sandbox::Action::"tests"::response{ output.passed: true }
};
Een push wordt dus toegestaan als er binnen het laatste kwartier een geslaagde testrun was en er sindsdien geen gefaalde run is geweest. Zo'n regel is niet te schrijven met een policy die alleen naar de huidige aanroep kijkt — daarvoor moet de engine de geschiedenis van de sessie kennen.
De harness blijft verantwoordelijk
Het handhaven doet de engine niet zelf. De harness onderschept elke tool call, stuurt een request-event naar de engine en voert de tool alleen uit als het verdict allow is; bij een deny moet de harness ervoor zorgen dat de actie niet loopt. AWS is daar expliciet over in de aankondiging. Wie de engine inbouwt, bouwt dus zelf nog het stuk dat de rem daadwerkelijk indrukt.
Om die geschiedenis te kunnen bijhouden, legt de engine elk event incrementeel vast in een log. Dat log is geïmplementeerd met redb, een embedded key-value store die volledig in Rust is geschreven, zodat een harness die de engine linkt alleen de Rust-toolchain nodig heeft. Het wegschrijven naar schijf gebeurt vóór de policy-evaluatie. Crasht of herstart het proces, dan kunnen volgende autorisatieverzoeken alsnog worden beoordeeld met de events van vóór de crash erin meegenomen.
Wat het kost aan tijd
AWS testte sessies van vijf minuten tot twaalf uur bij een tempo van 360 events per uur. Bij de policy met een venster van vijftien minuten lag de evaluatietijd rond 20 microseconden per beslissing. Rekt het venster op naar 24 uur, dan loopt dat op naar zes milliseconden per beslissing — volgens AWS "three hundred times longer than under the fifteen-minute window". Hoe het schema is opgezet, maakt ook uit: een fijnmazig schema was in de metingen ruwweg vijf keer sneller dan een grofmazig.
De les daaruit is praktisch: de kosten van deze aanpak zitten niet in de engine, maar in hoe ver je policy's terugkijken. Een regel over het afgelopen kwartier is vrijwel gratis; een regel over de afgelopen dag kost drie ordes van grootte meer per tool call.
The Register vergelijkt het geheel met een lijn aan een hondenharnas: het harnas zonder lijn houdt niets tegen. De code staat op GitHub.