ACS trennt zwei Rollen. Der Observed Agent ist das überwachte KI-System: Er meldet jeden relevanten Schritt per Hook und setzt die Antwort um, entscheidet aber nicht über die eigenen Aktionen. Der Guardian Agent ist die Policy-Instanz: Er bewertet jeden Hook gegen die Policy des Deployments und antwortet mit einer Disposition. Bei ask kommt ein Approver hinzu — ein Mensch, ein Agent oder ein Dienst, dessen Identität der Guardian prüfen muss. Für die Architektur entscheidend: Das Modell selbst darf von den Hooks nichts wissen; die Kontrolle liegt außerhalb seines Ausgabepfads.
OWASP Agent Control Standard (ACS): KI-Agenten zur Laufzeit kontrollieren
Der OWASP Agent Control Standard (ACS) ist eine offene Spezifikation, nach der ein Guardian Agent die Aktionen eines KI-Agenten an definierten Hooks prüft und per Policy erlaubt, blockiert, ändert, zur Freigabe vorlegt oder zurückstellt. Dieser Deep Dive zeigt, was Version 0.1.0 heute leistet — und wo ihre Grenzen liegen.
Stand: Oktober 2026 · Valeri Milke, ISO 27001 & ISO 42001 Lead Auditor
Den Download-Link erhalten Sie sofort auf der Seite und per E-Mail.
JSON-RPC 2.0 · HTTP(S) oder stdio
Observed Agentz. B. Coding-Agent
steps/toolCallRequestallowdenymodifyaskdefer
Guardian AgentPolicy-as-Code + optional LLM
- allow
- deny
- modify
- ask
- defer
deny · destructive_shell_command_blocked · agt_stockmodify · parameter_overrides · LIMIT 500ask · approver=human · timeout_disposition=deny
InstrumentHooks & DispositionsTraceOpenTelemetry & OCSFInspectAgBOM
19native steps/*-Hooks in der Spezifikation v0.1.0 — von sessionStart bis sessionEnd, inklusive der drei Skill-Hooks
5Dispositions: allow, deny, modify, ask und defer — das volle Vokabular nennt die Spec ausdrücklich für steps/toolCallRequest
7Konformitätsprofile: acs-core als Pflicht plus sechs optionale Profile — deklariert im Handshake, ohne externe Prüfung
6Mindest-Hooks für ACS-Core: sessionStart, userMessage oder agentTrigger, toolCallRequest, toolCallResult, agentResponse, sessionEnd
KI-Agenten lesen nicht nur, sie handeln: Sie führen Shell-Befehle aus, rufen APIs auf, versenden E-Mails und schreiben in ihr Gedächtnis. System-Prompts kontrollieren das nicht. Der OWASP Agent Control Standard (ACS) setzt genau hier an und standardisiert Runtime-Kontrolle als Protokoll zwischen Agent und Guardian. Diese Seite erklärt die Spezifikation v0.1.0 aus CISO-Sicht: Hooks und Dispositions, Failure Posture, Policy-as-Code, Audit-Trail, Trace nach OpenTelemetry und OCSF sowie die AgBOM. Der Simulator zeigt schema-treue Wire-Beispiele, die Risiko-Matrix ordnet ACS als VamiSec-Einschätzung den OWASP Agentic Top 10 zu, und wir benennen offen, was der frühe Standard heute noch nicht leistet. Profil-Navigator, Self-Assessment und ein CISO-Whitepaper helfen beim Einstieg.
Vom Agent Observability Standard zu ACS v0.1
Wie aus einem Observability-Projekt ein Kontrollstandard wurde — alle belegten Stationen bis zum Ziel für v0.2.0. Klicken Sie auf eine Station, um Details zu sehen.
11. Mai 2025
Start als Agent Observability Standard (AOS)
Michael Bargury legt die ersten Commits im Repository zenitysec/AOS an. Schon AOS gliedert sich in Instrument, Trace und Inspect — die drei Pillars, die ACS bis heute prägen. Die Protokoll-Spec heißt von Mitte Mai bis 5. Juni 2025 zeitweise ASOP (Agent Security & Observability Protocol).
Juni 2025
AOS wird OWASP-Projekt
Über eine Zwischenstation wandert das Repository in die OWASP-Organisation; ab Mitte Juni 2025 laufen die Beiträge über OWASP. AOS wird als „OWASP other project“ geführt, Projektleiter ist Michael Bargury. Ende Dezember 2025 ruht die Arbeit.
10. April 2026
Rebrand zu Agent Control Standard (ACS)
Rock Lambros benennt das Projekt um: Aus „Agent Observability“ wird „Agent Control“. ACS arbeitet vorübergehend eigenständig unter MIT-Lizenz in eigener GitHub-Organisation.
27. Mai 2026
Launch-Pressemitteilung
Per Business Wire tritt ACS als offenes Framework für die Runtime-Governance von KI-Agenten an — laut Mitteilung MIT-lizenziert und ohne kommerzielle Kontrolle durch ein einzelnes Unternehmen.
5. Juni 2026
Kanonische Spezifikation v0.1.0
Der Import der kanonischen v0.1.0 bringt die heutigen normativen Kernabschnitte: Handshake, Failure Posture, Audit-Chain, Signaturen, Fehlercodes, Skill-Hooks, Konformitätsprofile und die JSON-Schemas. Drei Tage zuvor hatte Microsoft eine eigene „Agent Control Specification“ veröffentlicht — ein anderes Projekt mit gleichem Kürzel.
11. August 2026
Release v0.1.1 und neues Lizenzmodell
Code und Schemas stehen seitdem unter Apache-2.0, die Dokumentation unter CC BY-SA 4.0; Releases bis v0.1.0 bleiben MIT-lizenziert. Release- und Spec-Version werden entkoppelt, die Spezifikation bleibt v0.1.0. Das Repository zieht in die Organisation GenAI-Security-Project.
September 2026
Relaunch im OWASP GenAI Security Project
Ressourcenseite auf genai.owasp.org (1. September), Spec-Site und alle 44 JSON-Schemas unter projekteigenen URIs (5. September), Hook-Taxonomie-Tabelle der Spec auf 19 Hooks korrigiert (7. September), Governance und PoC-Referenzimplementierung auf Basis von Microsofts Agent Governance Toolkit (10. September).
21. September 2026
Tag v0.1.2
Der Tag wird nachträglich auf einen Commit vom 9. September gesetzt: Das Response-Envelope kann nun ein ServerHello tragen. Seit v0.1.1 haben sich zudem Schema-URIs und Spec-Prosa geändert — die Spec-Version bleibt trotzdem v0.1.0.
März 2027 (Ziel)
v0.2.0 geplant
Laut Projekt das Ziel für die nächste Spezifikation: unter anderem Streaming und Interruption, rekursives ASK und Quorum, A2A-Wrapping, Cedar-Binding, Multi-Tenant-Isolation und AgBOM-Föderation. Ein Datum für v1.0 gibt es nicht.
Neun Kernkonzepte des Agent Control Standard
Klicken Sie auf eine Karte, um das Kernkonzept zu lesen — die Reihenfolge folgt dem Weg einer Agentenaktion vom Hook über die Entscheidung bis zum Nachweis.
Hooks sind die Kontrollpunkte von ACS. Die Spezifikation v0.1.0 definiert 19 native steps/*-Hooks — von sessionStart über userMessage, knowledgeRetrieval, memoryStore und toolCallRequest bis zu den drei Skill-Hooks und sessionEnd. Hinzu kommen agbom/snapshot, agbom/changed, system/ping und handshake/hello. Frameworks müssen steps/toolCallRequest für jede Aktion feuern, die den Reasoning-Kontext verlässt, auch für Shell, Dateisystem und Netzwerk. ACS-Core verlangt mindestens sechs Hooks; was der Guardian nicht in methods_evaluated aufführt, gilt als ungeprüft erlaubt.
Der Guardian antwortet mit einer von fünf Dispositions: allow lässt die Aktion laufen, deny blockiert sie, modify schreibt Parameter um oder schwärzt Inhalte, ask legt sie einem Approver vor, defer stellt die Entscheidung zurück, wenn etwa Kontext fehlt. Außer allow verlangen alle eine Begründung im Feld reasoning. Das volle Vokabular nennt die Spec ausdrücklich für steps/toolCallRequest; andere Hooks haben engere Mengen, reine Audit-Hooks wie sessionEnd gar keine Entscheidung. Innerhalb der Dispositions sind die Defaults streng: Abgelaufene ask- und defer-Entscheidungen fallen auf deny, ein regelwidriges modify behandelt der Agent wie deny.
Jede Session beginnt mit handshake/hello. Der Observed Agent nennt Versionen, implementierte Methoden, Transporte und Profile; der Guardian legt im ServerHello fest, welche Methoden er tatsächlich bewertet (methods_evaluated), wie lange der Agent auf eine Entscheidung wartet (timeout_config) und was bei einem Ausfall gilt (on_decision_failure). Damit entscheidet der Handshake über die reale Abdeckung: Was nicht ausgehandelt ist, läuft ungeprüft. Für den Fehlerfall gibt es zwei Voreinstellungen — eine für den Sessionstart, eine für jeden einzelnen Schritt —, und beide stehen per Default auf proceed, also fail-open. Was das für den Betrieb bedeutet, beantworten die FAQ und Kapitel 6.
Der Guardian arbeitet in zwei Schichten. Die deterministische Schicht wertet jeden Hook zuerst aus — als Policy-as-Code, in v0.1 mit OPA/Rego als Startreferenz; ein Cedar-Binding ist für v0.2 geplant. Nur wenn ihre Konfiguration delegiert, kommt eine optionale LLM-Schicht zum Zug. Diese sieht keinen Policy-Code, muss nicht vertrauenswürdige Daten als Daten behandeln und ihre Entscheidungen mit Begründung, Modellkennung und, falls vorhanden, Konfidenz protokollieren; ihr Ergebnis passiert danach erneut die deterministische Schicht. Ein rein deterministischer Guardian ist voll konform. Die Spec definiert nur die Schnittstelle zur Policy-Engine, nicht die Engine selbst — und keine Policy-Inhalte. Die Wirksamkeit hängt damit vollständig von Ihren Regeln ab.
Der Guardian führt je Session eine append-only Kette von ContextEntries, verknüpft über SHA-256-Hashes auf Basis der JCS-Kanonisierung nach RFC 8785. Für inhaltstragende Schritte muss er den aktuellen chain_hash in seiner Antwort veröffentlichen. ACS-Core verlangt zudem eine HMAC-SHA256-Signatur über jeden Request und jede Response mit HKDF-abgeleitetem Session-Schlüssel sowie Replay-Schutz über request_id und Zeitfenster. Das macht den Audit-Trail manipulationsevident gegenüber Angriffen auf dem Netzwerk — nicht gegenüber einem kompromittierten Guardian. Nichtabstreitbarkeit liefert erst acs-crypto mit ML-DSA-65, die Bindung an Request-Inhalte erst acs-audit über request_hash.
ACS erfindet kein neues Log-Format. Der Trace-Pillar liefert ein normatives Vokabular für OpenTelemetry und OCSF: Span-Namen und Attribute je Hook, Entscheidungen als Span-Event acs.decision, Entscheidungen außer allow als OCSF Detection Finding (2004) mit Severity von 2 für modify bis 4 für deny. Das zielt auf bestehende SIEM-Pipelines ohne Spezialparser. Trace ist best-effort: Ein Ausfall der Senke blockiert nichts, und Trace-Events sind Selbstauskünfte der beobachteten Umgebung. Die Mappings tragen den Status „Working draft“, decken die drei Skill-Hooks nicht ab und weichen bei einzelnen Klassen- und Span-Namen von OCSF und OpenTelemetry ab.
ACS-Telemetrie im Security-Testing nutzen →Die AgBOM ist das dynamische Inventar eines Observed Agent: acht Komponententypen von model, mcp_server und a2a_peer über tool, knowledge_source und memory_store bis agent_capability und skill. agbom/snapshot meldet es einmal je Session vor dem ersten inhaltstragenden Hook; agbom/changed meldet Laufzeitänderungen, allerdings nur im Profil acs-inspect-dynamic. Per deny kann der Guardian Sessions mit gebannten Komponenten ablehnen oder einen Hot-Swap blockieren. Serialisierungen nach CycloneDX 1.6, SPDX 3.0 oder SWID sind „Working draft“. Die AgBOM ist eine Selbstauskunft des Agenten — und ersetzt weder eine AI-BOM noch die SBOM nach Cyber Resilience Act.
ACS-Core ist Pflicht; dazu kommen sechs optionale Profile: acs-trace, acs-inspect, acs-inspect-dynamic, acs-provenance, acs-crypto und acs-audit. Beide Seiten deklarieren sie im Handshake — geprüft wird das in v0.1.0 von niemandem: Es gibt keine Testsuite, kein Register und keine Prüfstelle. Selbst ein permissiver Guardian ist konform. Die einzige Referenzimplementierung ist ein Proof of Concept, der zwei von 19 Hooks live bewertet und weder HMAC noch Replay-Schutz umsetzt. Ziel für die nächste Spezifikation v0.2.0 ist März 2027, ein Datum für v1.0 gibt es nicht. Planen Sie ACS als Architekturziel, nicht als Zertifikat.
Wirksamkeit selbst testen: Negativtests aus dem Bedrohungsmodell →Der Standard im Explorer
Drei Pillars, die Guardian-Architektur, Identity und Provenance sowie die Konformitätsprofile — jeweils mit den Kernaussagen der Spezifikation v0.1.0 und ihren Grenzen.
Pillar19 Hooks · 5 Dispositions
- Echtzeit-Abfangen, Bewerten und Durchsetzen: JSON-RPC-2.0-Envelopes über HTTP(S) oder stdio, Hook-Methoden im Namensraum steps/*.
- 19 native Hooks über den gesamten Lebenszyklus: Session, Turn, Nachrichten, Wissen und Memory, Tools, Kompaktierung, Subagenten und Skills.
- steps/toolCallRequest muss für jede Aktion feuern, die den Reasoning-Kontext verlässt — auch für eingebaute Shell-, Datei- und Netzwerkoperationen.
- Der Observed Agent muss auf die Entscheidung warten und sie anwenden; ein Framework, das Verdicts ignoriert, ist nicht konform.
- Streaming, Notifications und Interruption fehlen in v0.1.0 — eine Response kennt nur den Typ final.
JSON-RPC 2.0steps/*steps/toolCallRequestDecision Honoring
Profil acs-traceOpenTelemetry + OCSF
- Normatives Vokabular statt eigenem Transport: Span-Namen, Attribute, OCSF-Klassen und Severity-Mapping je Hook.
- Span-Hierarchie acs.session → acs.turn → Step-Span; Entscheidungen hängen als Event acs.decision am Step, den sie freigeben oder blockieren.
- OCSF-Klassen nach UID: 3002 Authentication, 1007 Process Activity, 6005 Datastore Activity, 2004 Detection Finding für deny, modify, ask und defer.
- Wer acs-trace beansprucht, muss jede Entscheidung mit Disposition, Evaluator und vorhandener Begründung als Trace-Event ausgeben.
- Grenzen: best-effort und selbstberichtet, Skill-Hooks ohne Mapping; der ACS-Tool-Span gen_ai.tool.call ist in OpenTelemetry nur ein Attribut-Präfix (dort execute_tool), Klasse 6002 heißt in OCSF „Application Lifecycle“.
OpenTelemetryOCSF 1.5+Detection Finding 2004acs.decision
Profil acs-inspect8 Komponententypen
- AgBOM als abfragbares, dynamisches Inventar: model, mcp_server, a2a_peer, tool, knowledge_source, memory_store, agent_capability und skill.
- agbom/snapshot einmal je Session vor dem ersten inhaltstragenden Hook — der Guardian schreibt ihn in die Audit-Chain.
- agbom/changed bei jeder Änderung des Komponentengraphen, aber nur unter acs-inspect-dynamic; ohne dieses Profil meldet der Agent Hot-Swaps während der Session nicht.
- Guardian-Policies können gebannte Modelle, Tools oder MCP-Server per deny stoppen; hängt eine Policy vom Inventar ab, ist acs-inspect Pflicht.
- Serialisierung nach CycloneDX 1.6, SPDX 3.0 oder SWID (mindestens eines) — Mappings im Status „Working draft“, teils nicht schema-valide.
agbom/snapshotagbom/changedCycloneDX 1.6SPDX 3.0SWID
ArchitekturDeterministisch zuerst
- Die deterministische Schicht läuft immer zuerst: Policy-as-Code mit OPA/Rego als v0.1-Startreferenz, ein Cedar-Binding ist für v0.2 geplant.
- Eine optionale LLM-Schicht greift nur bei Delegation — ohne Zugriff auf Policy-Code, mit Logging von Begründung, Modellkennung und, falls vorhanden, Konfidenz.
- Rein deterministische Guardians sind voll konform; metadata.evaluator zeigt, ob deterministic, agent oder composite entschieden hat.
- Die Spec definiert nur die Schnittstelle zur Engine; kanonische Policies sollen keine externen HTTP-Aufrufe enthalten.
- Paradigmen ohne Wire-Erweiterung: IBAC, FIDES, CaMeL und AARM-artige Regeln über den kumulierten Kontext.
Policy-as-CodeOPA/RegoCedar (v0.2)IBAC · FIDES · CaMeL · AARM
Profil acs-provenance7 origin-Werte
- ACS schreibt keinen Authentifizierungsmechanismus vor; Trust-Schemata wie SPIFFE, OIDC oder organisationsweite PKI bleiben Sache des Deployments.
- Identitäten von Observed Agent, Guardian und Policy-Autor dürfen nicht vermischt werden; Approver müssen authentifiziert sein.
- Session Intent: Intent.parsed wird vor dem ersten inhaltstragenden Schritt fixiert und wächst nur über eine authentifizierte Freigabe per ask.
- Provenance trägt Fakten je Datenfeld: provenance_id, origin (sieben Werte von user_input bis external), source_id und derived_from.
- Das Framework setzt Provenance deterministisch, nie das LLM; unter acs-provenance gilt das für jedes datentragende Feld der Session.
- Kein trust-Feld im v0.1-Schema: Der Guardian leitet Vertrauen aus der Herkunft ab — LLM-Verarbeitung macht aus nicht vertrauenswürdigen Daten keine vertrauenswürdigen.
originderived_fromprovenance_producerIntent.parsed
Selbstdeklaration1 Pflicht- + 6 Zusatzprofile
- acs-core ist Pflicht und umfasst unter anderem Handshake, Envelopes, sechs Mindest-Hooks, alle fünf Dispositions, Audit-Chain mit veröffentlichtem Chain-Head, Replay-Schutz, HMAC-SHA256-Signatur und system/ping.
- ACS-Core verlangt keine Trace-Events, keine AgBOM, keine feldgenaue Provenance, keine asymmetrischen Signaturen und keinen request_hash — das liefern die optionalen Profile.
- Profile sind Selbstdeklaration im Handshake: keine Testsuite, kein Register, keine Prüfstelle (Issue #19, Priorität P1, offen).
- Ein permissiver Guardian ist konform — Konformität sagt nichts über die Strenge Ihrer Policies.
- Der Pflichtumfang ist in Bewegung: Der offene PR #21 würde unter anderem modify und system/ping auf SHOULD herabstufen.
- Beispielkombinationen der Spec: eine minimale IDE-Integration nur mit acs-core, ein High-Assurance-Deployment mit allen sieben Profilen.
acs-coreacs-traceacs-inspectacs-cryptoacs-audit
Interaktiv
Guardian-Simulator: sechs Szenarien Schritt für Schritt
Wählen Sie ein Szenario und verfolgen Sie, wie ein Hook-Request vom Observed Agent zum Guardian Agent läuft, welche Disposition entsteht und was im Audit-Trail landet — einschließlich des Falls, dass der Guardian ausfällt.
Coding-Agent
Der Coding-Agent soll Build-Artefakte aufräumen. Durch einen falsch aufgelösten Pfad zielt der geplante Shell-Befehl rm -rf auf das Home-Verzeichnis statt auf den Build-Ordner.
- 1Hook-Request (Observed Agent → Guardian)
{ "jsonrpc": "2.0", "method": "steps/toolCallRequest", "id": 41, "params": { "acs_version": "0.1.0", "request_id": "6b2f9e14-0c3a-4d7b-a5e8-91f2c4d6b803", "timestamp": "2026-10-06T09:12:41Z", "metadata": { "agent_id": "coding-agent-ci-07", "session_id": "3f6c2a18-9d4e-4b1a-8c55-2e7f90a1b3c4", "turn_id": "a1d4e7f0-2b5c-4e8a-9f13-6c0d2e5f8a71" }, "payload": { "tool": { "name": "shell" }, "operation": "delete_recursive", "capability": "filesystem.delete", "arguments": { "command": { "value": "rm -rf ~/", "provenance": { "provenance_id": "p-112", "origin": "agent_generated", "derived_from": [ "p-101" ] } } }, "raw_command": "rm -rf ~/" }, "signature": { "algorithm": "HMAC-SHA256", "value": "unUBv7dka1B1VD+fgzjF9E+IGC3GiQihQdQxEtIyG54=", "key_id": "sess-hmac-coding-07" } } } - 2Auswertung im Guardian
- Deterministische Schicht (Policy-as-Code, Referenz in v0.1: OPA/Rego): Das Framework meldet den Shell-Aufruf mit der Capability filesystem.delete und der Operation delete_recursive; die Regel deny_recursive_delete_outside_workspace greift.
- Pfadprüfung: Das Ziel ~/ (Home-Verzeichnis) liegt außerhalb des Workspace, auf den die Policy diese Session beschränkt.
- Provenance-Prüfung: Der Befehl ist agent_generated (abgeleitet aus p-101) — kein Mensch hat dieses Ziel ausdrücklich angegeben.
- Die optionale LLM-Schicht wird nicht benötigt: deny mit reasoning, reason_codes und policy_references, Evaluator deterministic.
DispositiondenyAktion blockiert - 3Antwort (Guardian → Observed Agent)
{ "jsonrpc": "2.0", "id": 41, "result": { "type": "final", "acs_version": "0.1.0", "request_id": "6b2f9e14-0c3a-4d7b-a5e8-91f2c4d6b803", "decision": "deny", "reasoning": "Recursive delete targets the user's home directory, outside the workspace root the session is scoped to.", "reason_codes": [ "destructive_operation", "path_outside_workspace" ], "policy_references": [ { "policy_id": "coding-agent-fs", "policy_version": "2026.10.2", "rule_id": "deny_recursive_delete_outside_workspace" } ], "cited_provenance_ids": [ "p-112" ], "metadata": { "evaluator": "deterministic", "evaluation_duration_ms": 3 }, "chain_hash": "49c17246a18080bbeeaee88743bff94616b58cb6beb24e870b68a6f3ad55ecc3", "signature": { "algorithm": "HMAC-SHA256", "value": "Z1NyoNzC5LkVEcrZS6rzuc3CFaPO8vgfYg5/lhCpuho=", "key_id": "sess-hmac-coding-07" } } }Der Observed Agent führt den Löschvorgang nicht aus und erhält die Begründung zurück. Schlägt er einen korrigierten Pfad vor, wird dieser erneut geprüft.
- 4Audit-Trail (Trace)
{ "_note": "vereinfachter Auszug", "class_uid": 2004, "class_name": "Detection Finding", "category_uid": 2, "activity_id": 1, "severity_id": 4, "time": 1791277961003, "metadata": { "version": "1.5.0" }, "finding_info": { "uid": "dec-6b2f9e14", "title": "Tool call denied: recursive delete outside workspace" }, "enrichments": [ { "name": "acs_provenance_origin", "value": "agent_generated" } ], "unmapped": { "acs": { "decision": "deny", "evaluator": "deterministic", "policy_references": [ { "policy_id": "coding-agent-fs", "policy_version": "2026.10.2", "rule_id": "deny_recursive_delete_outside_workspace" } ], "reason_codes": [ "destructive_operation", "path_outside_workspace" ], "cited_provenance_ids": [ "p-112" ], "session_id": "3f6c2a18-9d4e-4b1a-8c55-2e7f90a1b3c4", "step_id": "6b2f9e14-0c3a-4d7b-a5e8-91f2c4d6b803" } } }Nicht-allow-Entscheidungen bildet das ACS-Mapping als OCSF-Klasse 2004 Detection Finding ab; deny erhält severity_id 4 (High).
Was das für Sie bedeutet
Destruktive Aktionen gehören hinter eine deterministische Regel, die vor der Ausführung greift — nicht in den System-Prompt. Wirksam ist das nur, wenn das Framework jede nach außen wirkende Aktion über steps/toolCallRequest leitet, auch eingebaute Datei- und Shell-Operationen.
ASI02ASI05
Analytics-Agent
Der Analytics-Agent will für einen Bericht SELECT * auf die Kundentabelle ausführen — ohne Zeilenlimit und mit allen Spalten.
- 1Hook-Request (Observed Agent → Guardian)
{ "jsonrpc": "2.0", "method": "steps/toolCallRequest", "id": 17, "params": { "acs_version": "0.1.0", "request_id": "d4a7c0e3-5f8b-4c1e-9a6d-2b5e8f1c4a73", "timestamp": "2026-10-06T09:24:18Z", "metadata": { "agent_id": "analytics-agent-02", "session_id": "8e1b4c7a-2f5d-4a90-b6c3-d4e5f6a7b8c9", "turn_id": "c2e5f8a1-3b6d-4f9c-8a2e-7d0f1c4e6b92" }, "payload": { "tool": { "name": "database_query" }, "capability": "database.read", "arguments": { "query": { "value": "SELECT * FROM customers", "provenance": { "provenance_id": "p-205", "origin": "agent_generated", "derived_from": [ "p-201" ] } } } }, "signature": { "algorithm": "HMAC-SHA256", "value": "O3OXC3lacLzJOEbWjqw/o0TzL6sXBF+xkW16O8RIrHw=", "key_id": "sess-hmac-analytics-02" } } } - 2Auswertung im Guardian
- Deterministische Schicht: Die Regel cap_unbounded_select der Policy db-row-limit erkennt eine Abfrage ohne LIMIT auf eine als sensibel eingestufte Tabelle.
- Die Policy erlaubt den Zweck (Bericht), aber nur mit freigegebenen Spalten und höchstens 500 Zeilen (illustrativer Grenzwert).
- Statt zu blockieren, schreibt der Guardian nur das Argument query per parameter_overrides um. Einen Austausch der gesamten Payload (modified_content) darf er damit nicht kombinieren.
- Antwort: modify mit reasoning und modifications — der Observed Agent muss die geänderte Abfrage ausführen.
DispositionmodifyParameter umgeschrieben - 3Antwort (Guardian → Observed Agent)
{ "jsonrpc": "2.0", "id": 17, "result": { "type": "final", "acs_version": "0.1.0", "request_id": "d4a7c0e3-5f8b-4c1e-9a6d-2b5e8f1c4a73", "decision": "modify", "reasoning": "Unbounded SELECT on customers exceeds the row-limit policy; query capped at 500 rows and reduced to approved columns.", "reason_codes": [ "row_limit_exceeded" ], "modifications": { "parameter_overrides": { "query": "SELECT id, segment, country FROM customers LIMIT 500" } }, "policy_references": [ { "policy_id": "db-row-limit", "policy_version": "2026.10.1", "rule_id": "cap_unbounded_select" } ], "metadata": { "evaluator": "deterministic", "evaluation_duration_ms": 4 }, "chain_hash": "6edfb8f26fe425f6891d7fccad3991a14e818d1199c29b9677724794cb725521", "signature": { "algorithm": "HMAC-SHA256", "value": "JmDUSrtQvFUL5/cFPeiP0nNUi0lN9L4ZkIw8+oNHn48=", "key_id": "sess-hmac-analytics-02" } } }Die Abfrage läuft mit LIMIT 500 und reduzierten Spalten. Der Agent erhält ein brauchbares Ergebnis, die abgerufene Datenmenge bleibt begrenzt.
- 4Audit-Trail (Trace)
{ "entry_id": "ce-0002", "step_id": "d4a7c0e3-5f8b-4c1e-9a6d-2b5e8f1c4a73", "step_type": "steps/toolCallRequest", "request_hash": "1ab512a11f6ed1d456e6a43b39e879772a0d2dd1045e4ce8887ce2ff449e7657", "timestamp": "2026-10-06T09:24:18Z", "previous_hash": "daceae6d78730c33d4805a0daca7bbd1929f323ada77cab0374a6cbfdcf8e570", "entry_hash": "6edfb8f26fe425f6891d7fccad3991a14e818d1199c29b9677724794cb725521" }Hier sehen Sie den ContextEntry der Audit-Kette: entry_hash verkettet den Schritt mit previous_hash und entspricht dem chain_hash der Guardian-Antwort. request_hash bindet den Request-Inhalt — in ACS-Core empfohlen, Pflicht erst unter acs-audit.
Was das für Sie bedeutet
modify ist das Werkzeug für „ja, aber sicher“: Sie setzen Datenminimierung technisch durch, ohne den Anwendungsfall zu blockieren. Ein fehlerhaft zusammengesetztes modify muss der Observed Agent als deny behandeln — hier verlangt die Spezifikation fail-closed.
ASI02ASI03
Finance-Agent
Der Finance-Agent will eine Lieferantenrechnung über 48.500 EUR bezahlen. Die Bankverbindung des Empfängers stammt aus einer E-Mail, nicht aus den Lieferanten-Stammdaten.
- 1Hook-Request (Observed Agent → Guardian)
{ "jsonrpc": "2.0", "method": "steps/toolCallRequest", "id": 9, "params": { "acs_version": "0.1.0", "request_id": "f1b4e7a0-6c9d-4f2a-b8e3-5d7a0c3f6e91", "timestamp": "2026-10-06T10:05:33Z", "metadata": { "agent_id": "finance-agent-ap-01", "session_id": "b7c0d3e6-4a9f-4e2b-8d15-3f6a9c2e5b18", "turn_id": "e3f6a9c2-5d8b-4b1e-9c47-0a3d6f9b2e54" }, "payload": { "tool": { "name": "payments_api" }, "operation": "create_transfer", "capability": "payment.initiate", "arguments": { "amount": { "value": "48500.00 EUR", "provenance": { "provenance_id": "p-311", "origin": "tool_output", "source_id": "invoice_parser" } }, "beneficiary": { "value": "vendor V-2291, bank account changed via e-mail", "provenance": { "provenance_id": "p-312", "origin": "tool_output", "source_id": "mail_inbox" } } } }, "signature": { "algorithm": "HMAC-SHA256", "value": "BNOgarNt++1Z6umtLvb3ocuYI3VXSDu/0UyMwiUys38=", "key_id": "sess-hmac-finance-01" } } } - 2Auswertung im Guardian
- Deterministische Schicht: Der Betrag liegt über dem Limit für automatische Zahlungen; die Regel ask_above_limit_or_changed_beneficiary greift (illustrativ).
- Provenance-Prüfung: Das Argument beneficiary trägt origin tool_output mit source_id mail_inbox und gilt nach dem Default-Mapping als nicht vertrauenswürdig.
- Der Guardian fordert eine Freigabe an: approver.type human, timeout_seconds 900, timeout_disposition deny; die Intent-Erweiterung (intent_extension) gilt nur für diesen Request (scope this_request).
- Der Approver muss sich authentifizieren, der Guardian prüft seine Identität gegen die Policy; ein Approver darf selbst kein ask zurückgeben.
DispositionaskFreigabe angefordert - 3Antwort (Guardian → Observed Agent)
{ "jsonrpc": "2.0", "id": 9, "result": { "type": "final", "acs_version": "0.1.0", "request_id": "f1b4e7a0-6c9d-4f2a-b8e3-5d7a0c3f6e91", "decision": "ask", "reasoning": "Amount exceeds the auto-approval limit and the beneficiary's bank details were taken from an e-mail, not from vendor master data.", "reason_codes": [ "approval_threshold_exceeded", "beneficiary_changed" ], "ask_details": { "approver": { "type": "human", "id": "treasury-approver@example.com" }, "question": "Approve transfer of 48,500.00 EUR to vendor V-2291 with changed bank details?", "options": [ "approve", "reject" ], "timeout_seconds": 900, "timeout_disposition": "deny", "intent_extension": { "capabilities": [ { "tool": "payments_api", "operation": "create_transfer", "resource": "vendor:V-2291" } ], "scope": "this_request" } }, "policy_references": [ { "policy_id": "ap-payments", "policy_version": "2026.10.1", "rule_id": "ask_above_limit_or_changed_beneficiary" } ], "cited_provenance_ids": [ "p-311", "p-312" ], "metadata": { "evaluator": "deterministic", "evaluation_duration_ms": 5 }, "chain_hash": "01918aa3a3c9b7ec4b99826d21a9d843b5f071655c3dc155c50b2c2fe93db2b8", "signature": { "algorithm": "HMAC-SHA256", "value": "I7WChoFe42FDc/PXgS+nKkaQrZFRhoDuqUMLdj8qflA=", "key_id": "sess-hmac-finance-01" } } }Die Zahlung wartet auf die Treasury-Freigabe. Antwortet niemand innerhalb von 15 Minuten, gilt deny — die Überweisung wird nicht ausgeführt.
- 4Audit-Trail (Trace)
{ "_note": "vereinfachter Auszug", "class_uid": 2004, "class_name": "Detection Finding", "category_uid": 2, "activity_id": 1, "severity_id": 3, "time": 1791281133005, "metadata": { "version": "1.5.0" }, "finding_info": { "uid": "dec-f1b4e7a0", "title": "Approval required: payment above limit, changed beneficiary" }, "enrichments": [ { "name": "acs_provenance_origin", "value": "tool_output" }, { "name": "acs_provenance_source_id", "value": "mail_inbox" } ], "unmapped": { "acs": { "decision": "ask", "evaluator": "deterministic", "policy_references": [ { "policy_id": "ap-payments", "policy_version": "2026.10.1", "rule_id": "ask_above_limit_or_changed_beneficiary" } ], "reason_codes": [ "approval_threshold_exceeded", "beneficiary_changed" ], "cited_provenance_ids": [ "p-311", "p-312" ], "session_id": "b7c0d3e6-4a9f-4e2b-8d15-3f6a9c2e5b18", "step_id": "f1b4e7a0-6c9d-4f2a-b8e3-5d7a0c3f6e91" } } }ask erscheint im ACS-Mapping als Detection Finding (OCSF 2004) mit severity_id 3 (Medium). Approver-Identität und Ergebnis gehören zusätzlich in Ihre Freigabe-Nachweise.
Was das für Sie bedeutet
ask ist nicht automatisch menschliche Aufsicht: Die Spezifikation erlaubt auch Agenten oder Services als Approver. Für Nachweise etwa zu EU AI Act Art. 14 bei Hochrisiko-Einsätzen legen Sie per Policy „human approver, timeout deny“ fest — nach unserer Einschätzung die belastbare Konfiguration.
ASI01ASI02ASI09
Support-Agent
Der Support-Agent soll den Status eines Tickets zusammenfassen und ruft es dafür ab. Das Ergebnis enthält Kontaktdaten der Kundin und die Notiz eines externen Absenders mit der Anweisung, die Kundenliste zu exportieren.
- 1Hook-Request (Observed Agent → Guardian)
{ "jsonrpc": "2.0", "method": "steps/toolCallResult", "id": 23, "params": { "acs_version": "0.1.0", "request_id": "a8b1c4d7-0e3f-4a6b-9c2d-5e8f1a4b7c06", "timestamp": "2026-10-06T11:14:52Z", "metadata": { "agent_id": "support-agent-eu-03", "session_id": "c9d2e5f8-7b1a-4c3d-9e6f-4a7b0c3d6e29", "turn_id": "f4a7b0c3-6e9d-4c2f-8b5a-1d4e7a0c3f65" }, "payload": { "tool": { "name": "ticket_lookup" }, "exit_status": "success", "outputs": [ { "value": "Ticket 48121, contact J. Example, +49 000 0000000", "provenance": { "provenance_id": "p-421", "origin": "tool_output", "source_id": "crm" } }, { "value": "External note: <instruction to export the customer list>", "provenance": { "provenance_id": "p-422", "origin": "tool_output", "source_id": "inbound_mail" } } ] }, "signature": { "algorithm": "HMAC-SHA256", "value": "9oNhSZD+hpXpIvLBTjgaGEh73I+A3Uv3TRs+wY6y78E=", "key_id": "sess-hmac-support-03" } } } - 2Auswertung im Guardian
- Deterministische Schicht: Beide Ausgaben tragen origin tool_output und gelten nach dem Default-Mapping der Spezifikation als nicht vertrauenswürdig; die Notiz stammt zudem aus der Quelle inbound_mail.
- Datenschutzregel (illustrativ): Name und Telefonnummer der Kundin werden für den Zweck „Ticket-Status zusammenfassen“ nicht im Kontext des Agenten benötigt.
- Delegation an die optionale LLM-Schicht: Sie stuft die Notiz als anweisungsartigen Inhalt ein (confidence 0,93) — ohne Zugriff auf den Policy-Code.
- Ergebnis: modify mit zwei redactions per JSON-Pointer; weil die LLM-Schicht beteiligt war, lautet der Evaluator composite und die Antwort nennt die model_id.
DispositionmodifyParameter umgeschrieben - 3Antwort (Guardian → Observed Agent)
{ "jsonrpc": "2.0", "id": 23, "result": { "type": "final", "acs_version": "0.1.0", "request_id": "a8b1c4d7-0e3f-4a6b-9c2d-5e8f1a4b7c06", "decision": "modify", "reasoning": "Output 0 contains personal data not needed for the task; output 1 contains instruction-like text from an untrusted origin. Both redacted before ingestion.", "reason_codes": [ "untrusted_instruction_in_output", "pii_detected" ], "modifications": { "redactions": [ { "path": "/outputs/0/value", "replacement": "Ticket 48121, contact [REDACTED]" }, { "path": "/outputs/1/value", "replacement": "[REMOVED: instruction-like content from untrusted source]" } ] }, "policy_references": [ { "policy_id": "ingest-guard", "policy_version": "2026.10.1", "rule_id": "redact_untrusted_instructions_and_pii" } ], "cited_provenance_ids": [ "p-421", "p-422" ], "metadata": { "evaluator": "composite", "model_id": "guardian-classifier-demo", "confidence": 0.93, "evaluation_duration_ms": 180 }, "chain_hash": "ac94f144bfb94f6afc0e2eaa2b1e4494fb1fb70e20b7f3ce480703d602980c02", "signature": { "algorithm": "HMAC-SHA256", "value": "+fzpemnPIXE38pFATTnuxGutl+z5ik8rM4Bf7PbVvzM=", "key_id": "sess-hmac-support-03" } } }Der Agent erhält das bereinigte Ergebnis: Kontaktdaten geschwärzt, Notiz entfernt. Die eingeschleuste Anweisung erreicht seinen Kontext nicht.
- 4Audit-Trail (Trace)
{ "_note": "vereinfachter Auszug", "class_uid": 2004, "class_name": "Detection Finding", "category_uid": 2, "activity_id": 1, "severity_id": 2, "time": 1791285292180, "metadata": { "version": "1.5.0" }, "finding_info": { "uid": "dec-a8b1c4d7", "title": "Tool result redacted before ingestion" }, "enrichments": [ { "name": "acs_provenance_origin", "value": "tool_output" }, { "name": "acs_provenance_source_id", "value": "inbound_mail" } ], "unmapped": { "acs": { "decision": "modify", "evaluator": "composite", "policy_references": [ { "policy_id": "ingest-guard", "policy_version": "2026.10.1", "rule_id": "redact_untrusted_instructions_and_pii" } ], "reason_codes": [ "untrusted_instruction_in_output", "pii_detected" ], "cited_provenance_ids": [ "p-421", "p-422" ], "session_id": "c9d2e5f8-7b1a-4c3d-9e6f-4a7b0c3d6e29", "step_id": "a8b1c4d7-0e3f-4a6b-9c2d-5e8f1a4b7c06" } } }Weil der Hook Provenance trägt, verlangt das ACS-Mapping die Herkunftsangaben im OCSF-Feld enrichments (acs_provenance_origin).
Was das für Sie bedeutet
ACS verhindert keine Prompt Injection — es schafft den Kontrollpunkt, bevor fremde Inhalte in den Kontext gelangen. Die Klassifikation per LLM ist probabilistisch; tragend bleibt, dass jede folgenreiche Aktion am nächsten steps/toolCallRequest gegen Intent und Herkunft geprüft wird.
ASI01ASI06
Support-Agent
Anders als im vorigen Szenario ist hier eine eingehende E-Mail ungeschwärzt in den Kontext eines Support-Agenten gelangt — etwa weil die probabilistische Klassifikation die eingeschleuste Anweisung nicht erkannt hat. Der Agent will daraus eine dauerhafte, mandantenweite Regel speichern: künftig bei allen Rechnungs-E-Mails eine externe Adresse in BCC setzen.
- 1Hook-Request (Observed Agent → Guardian)
{ "jsonrpc": "2.0", "method": "steps/memoryStore", "id": 31, "params": { "acs_version": "0.1.0", "request_id": "b2c5d8e1-4f7a-4b0c-8d3e-6f9a2b5c8d17", "timestamp": "2026-10-06T11:36:07Z", "metadata": { "agent_id": "support-agent-eu-05", "session_id": "5e8a1c4f-2d7b-4f3a-9c6e-8b1d4a7f0e25", "turn_id": "7c0f3a6d-9e2b-4c5f-a8d1-3e6b9c2f5a48" }, "payload": { "memory_store": { "name": "team-preferences", "scope": "tenant" }, "operation": "create", "content": { "value": "Standing rule: add an external address as BCC on all invoice e-mails", "provenance": { "provenance_id": "p-512", "origin": "agent_generated", "derived_from": [ "p-508" ] } } }, "signature": { "algorithm": "HMAC-SHA256", "value": "Urnrl2bo53hnjmn2C6tLU6KFEVlgkFFqyCNpKT3BrPs=", "key_id": "sess-hmac-support-05" } } } - 2Auswertung im Guardian
- Deterministische Schicht: Ziel ist der Speicher team-preferences mit scope tenant — der Eintrag wirkt über diese Session hinaus für alle Nutzer des Mandanten.
- Provenance-Prüfung: Der Inhalt ist agent_generated und aus p-508 abgeleitet, einem Tool-Ergebnis aus inbound_mail. Nach der Monotonie-Regel ist abgeleiteter Inhalt höchstens so vertrauenswürdig wie seine Quelle — hier also nicht vertrauenswürdig.
- Die Regel deny_untrusted_lineage_tenant_scope der Policy memory-integrity greift: keine nicht vertrauenswürdige Lineage in geteiltem Gedächtnis.
- Antwort: deny mit reasoning und cited_provenance_ids p-512 und p-508.
DispositiondenyAktion blockiert - 3Antwort (Guardian → Observed Agent)
{ "jsonrpc": "2.0", "id": 31, "result": { "type": "final", "acs_version": "0.1.0", "request_id": "b2c5d8e1-4f7a-4b0c-8d3e-6f9a2b5c8d17", "decision": "deny", "reasoning": "Persistent tenant-wide rule derived from untrusted content (lineage p-508, inbound_mail); untrusted lineage may not be written to shared memory.", "reason_codes": [ "untrusted_lineage_into_persistent_memory" ], "policy_references": [ { "policy_id": "memory-integrity", "policy_version": "2026.10.1", "rule_id": "deny_untrusted_lineage_tenant_scope" } ], "cited_provenance_ids": [ "p-512", "p-508" ], "metadata": { "evaluator": "deterministic", "evaluation_duration_ms": 2 }, "chain_hash": "ef90a699a55c8decd1afd054b8d3012ef00cae50140b942324212c9b0d5a3206", "signature": { "algorithm": "HMAC-SHA256", "value": "01xC/pBRTJUwAC6Yw/XHBYvyk+O+y7cbdkBogkltj7g=", "key_id": "sess-hmac-support-05" } } }Die Regel wird nicht gespeichert. Spätere Sessions starten ohne die vergiftete Anweisung.
- 4Audit-Trail (Trace)
{ "_note": "vereinfachter Auszug", "class_uid": 2004, "class_name": "Detection Finding", "category_uid": 2, "activity_id": 1, "severity_id": 4, "time": 1791286567002, "metadata": { "version": "1.5.0" }, "finding_info": { "uid": "dec-b2c5d8e1", "title": "Memory write denied: untrusted lineage" }, "enrichments": [ { "name": "acs_provenance_origin", "value": "agent_generated" } ], "unmapped": { "acs": { "decision": "deny", "evaluator": "deterministic", "policy_references": [ { "policy_id": "memory-integrity", "policy_version": "2026.10.1", "rule_id": "deny_untrusted_lineage_tenant_scope" } ], "reason_codes": [ "untrusted_lineage_into_persistent_memory" ], "cited_provenance_ids": [ "p-512", "p-508" ], "session_id": "5e8a1c4f-2d7b-4f3a-9c6e-8b1d4a7f0e25", "step_id": "b2c5d8e1-4f7a-4b0c-8d3e-6f9a2b5c8d17" } } }Das Finding nennt die Provenance-IDs, die zur Entscheidung geführt haben — so lässt sich im SOC die Kette vom Tool-Ergebnis bis zum Schreibversuch nachvollziehen.
Was das für Sie bedeutet
Gedächtnis ist ein Persistenzpfad für Angriffe: Was heute eingeschleust wird, wirkt morgen in anderen Sessions. memoryStore ist deshalb ein zweiter Kontrollpunkt, falls die Prüfung beim Tool-Ergebnis fehlt. Diese Kontrolle setzt Provenance-Daten voraus (Profil acs-provenance) — ohne Lineage-Felder kann der Guardian die Herkunft nicht prüfen.
ASI06ASI01
Release-Agent
Der Release-Agent will ein Deployment in die Produktionsumgebung starten. In diesem Moment ist der Guardian nicht erreichbar — der Verbindungsaufbau scheitert.
Failure Posture
- 1Hook-Request (Observed Agent → Guardian)
{ "jsonrpc": "2.0", "method": "steps/toolCallRequest", "id": 12, "params": { "acs_version": "0.1.0", "request_id": "e6f9a2b5-1d4c-4e7f-a0b3-8c1d4e7f0a96", "timestamp": "2026-10-06T13:02:44Z", "metadata": { "agent_id": "release-agent-01", "session_id": "d0e3f6a9-8c2b-4d5e-9f1a-7b0c3d6e9f42", "turn_id": "a5b8c1d4-7e0f-4a3b-8c6d-9e2f5a8b1c37" }, "payload": { "tool": { "name": "deploy" }, "capability": "process.execute", "arguments": { "environment": { "value": "production", "provenance": { "provenance_id": "p-601", "origin": "user_input", "source_id": "chat" } } } }, "signature": { "algorithm": "HMAC-SHA256", "value": "ijZXZIKuaSuMU4u12zPLHINkFdTqcn1T27zuvAqmCw0=", "key_id": "sess-hmac-release-01" } } } - 2Auswertung im Guardian
- Der Observed Agent sendet steps/toolCallRequest, die Verbindung wird abgelehnt (connection refused). Bei einem so eindeutigen Fehler darf er sofort reagieren, statt das ausgehandelte Timeout (timeout_config) abzuwarten.
- Damit liegt ein Decision Failure vor: Innerhalb des Timeouts kommt keine verwertbare Entscheidung an.
- Jetzt greift on_decision_failure: proceed (Default, fail-open) oder deny (fail-closed), wie im Handshake ausgehandelt.
DispositionproceedAktion läuft ungeprüft - 3Keine Antwort
Der Guardian antwortet nicht. Auf dem Wire gibt es keine Disposition — der Observed Agent wendet die ausgehandelte Failure Posture an.
Fail-open: Das Deployment läuft ungeprüft weiter. Die Spezifikation verlangt, dass jeder solche Durchlauf als Audit-Ereignis protokolliert wird — aus Kontrolle wird Protokollierung.
- 4Audit-Trail (Trace)
{ "_note": "vereinfachter Auszug", "seq": 14, "recorded_at": "2026-10-06T13:02:44.018Z", "session_id": "d0e3f6a9-8c2b-4d5e-9f1a-7b0c3d6e9f42", "method": "steps/toolCallRequest", "rpc_id": 12, "outcome": "proceeded", "posture": "proceed", "posture_source": "negotiated", "failure": { "kind": "transport", "message": "ConnectionRefused: Guardian endpoint not reachable" } }ACS schreibt das Format dieses Audit-Ereignisses nicht vor; der Auszug folgt den Feldnamen des Host-Audit-Logs der Referenzimplementierung.
Was das für Sie bedeutet
Der ACS-Default ist fail-open. Wer für folgenreiche Aktionen fail-closed will, muss on_decision_failure: deny ausdrücklich konfigurieren und Durchläufe ohne Entscheidung im SOC alarmieren — ein erfolgreicher system/ping beweist keine funktionierende Durchsetzung.
ASI02ASI08
Rekursives Löschen außerhalb des Workspace: deny
Hinweis: Beispiele schema-treu nach ACS v0.1.0 (validiert gegen request-envelope.json, response-envelope.json, context-entry.json und die Hook-Schemas einschließlich der *.acs-provenance-Varianten); Werte, Policy- und Regelnamen sind illustrativ, Signaturen mit einem Demo-Schlüssel berechnet, Trace-Auszüge vereinfacht; die ASI-Zuordnungen sind VamiSec-Einschätzungen. Die einzige Referenzimplementierung (Proof of Concept) wertet bisher nur steps/toolCallRequest und steps/toolCallResult live aus.
Instrument-Pillar
Hook-Lebenszyklus: Wo ACS eingreifen kann
Die 19 nativen steps/*-Hooks der Spezifikation v0.1.0 sowie AgBOM-, Handshake- und System-Methoden entlang einer Agenten-Session. Wählen Sie einen Hook, um Auslöser, Handlungsspielraum des Guardian und typische Risiken zu sehen.
01SessionHandshake, Start, Aktivierung, Ende
02AgBOMInventar zu Beginn und bei Änderungen
03TurnKlammer um jeden Agenten-Turn
04NachrichtenEingabe und Ausgabe
05Wissen & MemoryRAG-Abrufe und Gedächtnis
06ToolsVor und nach jeder Aktion
07KompaktierungKontextfenster verdichten
08SubagentenDelegation im selben Prozess
09SkillsRegistrieren, laden, entladen
10SystemLiveness
handshake/helloHandshakeHandshake
- Wann
- Zu Sessionbeginn vor jedem Hook: Der Observed Agent sendet ein ClientHello mit unterstützten Versionen, Methoden, Transporten, Provenance-Modus und Profilen.
- Was der Guardian tun kann
- Antwortet mit einem ServerHello statt einer Disposition und legt negotiated_version, methods_evaluated, timeout_config und optional on_decision_failure fest. Methoden außerhalb von methods_evaluated gelten als ALLOW-by-default. Der Guardian kann die Session ablehnen, etwa mit PROVENANCE_REQUIRED (-32002).
- Typische Risiken
- ASI03ASI08
steps/sessionStartCore-MinimumSession-Start
- Wann
- Einmal pro Session nach dem Handshake und vor allen anderen steps/*-Hooks; Wurzel der Audit-Kette.
- Was der Guardian tun kann
- allow oder deny: Eine Session lässt sich wegen Identität, policy_mode oder Plattform ablehnen, bevor Inhalte eintreffen. Ein hier gesetzter Intent wird zum kanonischen Session-Intent.
- Typische Risiken
- ASI03ASI10
steps/agentTriggerCore-Minimum: oder userMessageAgenten-Aktivierung
- Wann
- Wenn ein Ereignis, ein Zeitplan, ein A2A-Aufruf, ein Nutzer oder das System den Agenten aktiviert (trigger_type).
- Was der Guardian tun kann
- allow, deny oder modify — etwa die Trigger-Payload vor der Aktivierung um personenbezogene Daten bereinigen. A2A-Delegation läuft über trigger_type a2a_inbound; ein A2A-Wrapping ist erst für v0.2 vorgesehen.
- Typische Risiken
- ASI01ASI07
steps/sessionEndCore-Minimum · Audit onlySession-Ende
- Wann
- Beim Ende der Session (reason: completed, cancelled, error, timeout oder abandoned); der Guardian versiegelt die Kette.
- Was der Guardian tun kann
- Nur Audit, keine Entscheidung. Liefert den Abschluss mit final_chain_hash für Forensik und Nachweise.
- Typische Risiken
- ASI08
agbom/snapshotAgBOM · acs-inspectAgBOM-Snapshot
- Wann
- Einmal pro Session nach sessionStart, vor dem ersten Hook mit Inhalt: das vollständige Komponenteninventar in kanonischer Form.
- Was der Guardian tun kann
- Normalerweise allow; deny, um eine Session mit gebanntem Modell, Tool oder Peer abzulehnen. Pflicht unter acs-inspect; der Snapshot wird in die Audit-Kette geschrieben.
- Typische Risiken
- ASI04
agbom/changedAgBOM · acs-inspect-dynamicAgBOM-Änderung
- Wann
- Wenn mitten in der Session eine Komponente hinzukommt, wegfällt oder ihre Version wechselt (diff oder full_snapshot).
- Was der Guardian tun kann
- allow oder deny — etwa einen Modellwechsel zur Laufzeit oder ein vom Nutzer installiertes Tool blockieren. Pflicht nur unter acs-inspect-dynamic.
- Typische Risiken
- ASI04
steps/turnStartTurn-Start
- Wann
- Zu Beginn jedes Agenten-Turns; setzt die turn_id für alle folgenden Schritte bis zum passenden turnEnd.
- Was der Guardian tun kann
- Entscheidungsfähig: deny verhindert den Turn. In der Praxis antworten die meisten Deployments mit allow und nutzen den Hook für Zustandswechsel in der Policy.
- Typische Risiken
- ASI01ASI10
steps/turnEndAudit onlyTurn-Ende
- Wann
- Am Ende eines Turns (outcome: completed, deferred, error, interrupted oder denied_at_start).
- Was der Guardian tun kann
- Nur Audit — der Turn ist bereits gelaufen; deny oder modify sind ausgeschlossen.
- Typische Risiken
- ASI08
steps/userMessageProvenance-VarianteCore-Minimum: oder agentTriggerNutzereingabe
- Wann
- Wenn eine Nutzereingabe eintrifft, bevor sie den Reasoning-Kontext des Agenten erreicht.
- Was der Guardian tun kann
- allow, deny oder modify — etwa Inhalte schwärzen, bevor der Agent sie verarbeitet.
- Typische Risiken
- ASI01ASI09
steps/agentResponseProvenance-VarianteCore-MinimumAgenten-Antwort
- Wann
- Bevor eine Ausgabe an Nutzer, A2A-Peer, übergeordneten Agenten oder ein externes Ziel geht.
- Was der Guardian tun kann
- allow, deny oder modify — etwa vertrauliche Inhalte entfernen, bevor die Ausgabe den Empfänger erreicht.
- Typische Risiken
- ASI09ASI01
steps/knowledgeRetrievalProvenance-VarianteWissensabruf (RAG)
- Wann
- Bei Abfragen an Vektordatenbank, Suchindex oder Wissensbasis, bevor Treffer in den Kontext gelangen.
- Was der Guardian tun kann
- allow, deny oder modify — etwa Treffer aus nicht freigegebenen Quellen schwärzen.
- Typische Risiken
- ASI06ASI01
steps/memoryContextRetrievalProvenance-VarianteGedächtnis lesen
- Wann
- Wenn Einträge aus dem Gedächtnis (scope session, user, tenant oder global) in den Kontext geladen werden.
- Was der Guardian tun kann
- allow, deny oder modify — etwa Einträge mit nicht vertrauenswürdiger Herkunft ausfiltern.
- Typische Risiken
- ASI06
steps/memoryStoreProvenance-VarianteGedächtnis schreiben
- Wann
- Bevor der Agent in persistentes Gedächtnis schreibt (create, update oder delete).
- Was der Guardian tun kann
- allow, deny oder modify — der zentrale Punkt gegen Memory Poisoning, etwa wenn Inhalte mit nicht vertrauenswürdiger Lineage in geteiltes Gedächtnis sollen.
- Typische Risiken
- ASI06
steps/toolCallRequestProvenance-VarianteCore-Minimum · alle 5 DispositionsTool-Aufruf
- Wann
- Nach dem Parsen eines Tool-Calls, vor der Ausführung. Frameworks müssen den Hook für jede nach außen wirkende Aktion feuern — auch für Dateisystem, Netzwerk, Prozesse und Shell.
- Was der Guardian tun kann
- Volles Vokabular: allow, deny, modify, ask und defer. Hier setzen Intent-Prüfung (IBAC) und herkunftsbasierte Policies (FIDES, CaMeL, AARM) an.
- Typische Risiken
- ASI02ASI05ASI03
steps/toolCallResultProvenance-VarianteCore-MinimumTool-Ergebnis
- Wann
- Nach der Ausführung eines Tools, bevor das Ergebnis in den Kontext des Agenten gelangt.
- Was der Guardian tun kann
- allow, deny oder modify — etwa redactions per JSON-Pointer für personenbezogene Daten oder eingeschleuste Anweisungen.
- Typische Risiken
- ASI01ASI06ASI02
steps/preCompactVor der Kompaktierung
- Wann
- Bevor das Kontextfenster verdichtet wird (Größenschwelle, manuell, durch den Agenten oder das Framework ausgelöst).
- Was der Guardian tun kann
- Entscheidungsfähig: deny blockiert die Kompaktierung, etwa solange nicht vertrauenswürdige Daten im Kontext sind und keine vertrauenswürdige Neuverankerung erfolgt ist.
- Typische Risiken
- ASI06
steps/postCompactNach der Kompaktierung
- Wann
- Nachdem der Kontext verdichtet wurde; trägt die neue Zusammenfassung sowie die Chain-Hashes davor und danach.
- Was der Guardian tun kann
- Keine Entscheidung im engeren Sinn: modify ist erlaubt (Zusammenfassung umschreiben), deny ausdrücklich ausgeschlossen. Die Zusammenfassung muss origin agent_generated mit vollständiger Lineage tragen.
- Typische Risiken
- ASI06
steps/subagentStartSubagent-Start
- Wann
- Wenn ein Subagent im selben Prozess gestartet wird (keine A2A-Grenze); er erhält eine eigene session_id und Audit-Kette.
- Was der Guardian tun kann
- Entscheidungsfähig: deny, wenn die intent_derivation Rechte gewähren würde, die der Intent des übergeordneten Agenten nicht abdeckt.
- Typische Risiken
- ASI03ASI08ASI10
steps/subagentStopAudit onlySubagent-Ende
- Wann
- Wenn der Subagent endet; protokolliert in der Kette des übergeordneten Agenten mit final_chain_hash, ohne die Ketten zu verschmelzen.
- Was der Guardian tun kann
- Nur Audit, keine Entscheidung.
- Typische Risiken
- ASI08
steps/skillRegisterSkill registrieren
- Wann
- Wenn ein Skill in die verfügbare Menge aufgenommen wird, bevor er geladen werden kann — ein statisches Prüftor mit Digest und declared_capabilities.
- Was der Guardian tun kann
- allow oder deny; ein abgelehnter Skill darf nicht ladbar werden. Zu weit gefasste Capability-Deklarationen kann der Guardian ablehnen.
- Typische Risiken
- ASI04
steps/skillLoadSkill laden
- Wann
- Wenn ein registrierter Skill in der Session aktiviert wird, bevor seine Aktionen laufen.
- Was der Guardian tun kann
- allow oder deny. Der Guardian soll ablehnen, wenn kein genehmigtes skillRegister für skill_id und Digest existiert, der Digest abweicht oder der load_path zeigt, dass ein Skill einen anderen außerhalb seiner deklarierten composed_skills lädt; auf den Hinweis digest_verified soll er sich nicht verlassen.
- Typische Risiken
- ASI04ASI05
steps/skillUnloadAudit onlySkill entladen
- Wann
- Wenn ein Skill die aktive Menge verlässt (Session-Ende, explizit, ersetzt oder Fehler); Deployments dürfen das alternativ über agbom/changed abbilden.
- Was der Guardian tun kann
- Nur Audit; hält das aktive Inventar aktuell.
- Typische Risiken
- ASI04
system/pingSystemLiveness-Probe
- Wann
- Zur Prüfung, ob der Guardian erreichbar ist; ohne Signaturpflicht und nicht Teil der Audit-Kette.
- Was der Guardian tun kann
- Antwortet immer mit allow. Ein erfolgreicher Ping belegt nicht, dass die Durchsetzung funktioniert — überwachen Sie Decision Failures im Hook-Pfad direkt.
- Typische Risiken
- ASI08
Zählung laut Spezifikation v0.1.0: 19 native steps/*-Hooks; mit agbom/snapshot, agbom/changed und system/ping 22 Methoden mit eigenem Payload-Schema, dazu handshake/hello und der MCP-Namespace protocols/MCP/*. Die erlaubten Dispositions je Hook legt die Spezifikation in der Prosa fest, nicht im Schema. ACS-Core verlangt mindestens sechs Hooks; was nicht in methods_evaluated steht, gilt als ALLOW-by-default. Der Punkt am Hook markiert eine strikte *.acs-provenance-Variante. Die Zuordnung typischer Risiken je Hook ist eine VamiSec-Einschätzung.
VamiSec-Einschätzung
Risiko-Matrix: OWASP Agentic Top 10 × ACS-Bausteine
Welche Bausteine des Agent Control Standard die Risiken der OWASP Top 10 for Agentic Applications 2026 direkt kontrollieren, unterstützen oder nicht abdecken — mit Begründung und Grenzen je Zeile.
direkte Kontrolleunterstützendnicht abgedeckt
| OWASP Agentic Top 10 | ||||||
|---|---|---|---|---|---|---|
Die Ingest-Hooks erlauben Schwärzen, bevor fremde Inhalte den Kontext erreichen; an toolCallRequest lassen sich Aktionen gegen den vorab festgelegten Intent prüfen, und Provenance macht nicht vertrauenswürdige Herkunft für Policies sichtbar. Grenze: ACS erkennt eine Prompt Injection nicht selbst — die Wirkung hängt vollständig von Policies und einer optionalen Klassifikation im Guardian ab. steps/userMessagesteps/knowledgeRetrievalsteps/toolCallResultsteps/toolCallRequest | ||||||
toolCallRequest ist der zentrale Durchsetzungspunkt mit allen fünf Dispositions, ask deckt folgenreiche Einzelaktionen ab. Frameworks müssen jede nach außen wirkende Aktion über diesen Hook leiten. Grenze: Aktionen, die am Hook vorbeilaufen, sind für die Policy unsichtbar; Methoden außerhalb von methods_evaluated gelten als ALLOW-by-default. steps/toolCallRequeststeps/toolCallResultprotocols/MCP/tools/call | ||||||
sessionStart bindet Identität und Policy-Modus, subagentStart kann Rechteausweitung bei Subagenten ablehnen, und Approver müssen authentifiziert sein. Grenze: ACS schreibt keinen Authentifizierungsmechanismus vor und stellt keine Identitäten aus; das Identity-Modell ist in v0.1 noch nicht normativ ausgearbeitet. steps/sessionStartsteps/subagentStartsteps/toolCallRequest | ||||||
Die AgBOM inventarisiert Modelle, MCP-Server, Tools, Skills und weitere Komponenten je Session; der Guardian kann gebannte Komponenten oder einen Austausch zur Laufzeit per deny stoppen, Skills sind über ihren Digest an die Registrierung gebunden. Grenze: Die AgBOM ist eine Selbstauskunft des Observed Agent, Laufzeitänderungen sieht nur acs-inspect-dynamic; Marketplace-Scanning und Schwachstellenabgleich gehören nicht zu ACS. agbom/snapshotagbom/changedsteps/skillRegistersteps/skillLoad | ||||||
Prozess- und Shell-Ausführung muss über toolCallRequest laufen und lässt sich dort per deny oder ask kontrollieren; skillLoad bindet ausführbare Skill-Inhalte an geprüfte Digests. Grenze: Sandboxing und Isolation sind nicht Teil von ACS, und Code, der bereits auf dem Host läuft, kann Agenten-Kontrollen umgehen. steps/toolCallRequeststeps/skillLoad | ||||||
memoryStore und memoryContextRetrieval kontrollieren Schreib- und Lesepfade des Gedächtnisses; preCompact und postCompact binden die Herkunft bei der Kompaktierung an die Zusammenfassung (Vereinigung der Lineage aller verdichteten Einträge). Die Provenance-Lineage ist dafür tragend. Grenze: Ohne acs-provenance fehlt die Herkunftsinformation, und bereits vorhandene vergiftete Einträge erkennt ACS nicht von selbst. steps/memoryStoresteps/memoryContextRetrievalsteps/knowledgeRetrievalsteps/preCompactsteps/postCompact | ||||||
agentTrigger mit trigger_type a2a_inbound, die Subagent-Hooks und der AgBOM-Typ a2a_peer machen Beziehungen zwischen Agenten sichtbar und begrenzt kontrollierbar. Grenze: Das Wrapping von A2A (protocols/A2A/*) ist in v0.1 nur reserviert und erst für v0.2 vorgesehen, ebenso die AgBOM-Föderation über Peers. steps/agentTriggersteps/subagentStartagbom/snapshot | ||||||
Die Audit-Kette je Session und Subagent (final_chain_hash) und die Trace-Korrelation helfen, eine Ausbreitung nachzuvollziehen; deny an den Tool-Hooks stoppt sie schrittweise, und kaskadierende defer-Entscheidungen müssen je Session begrenzt sein. Grenze: v0.1 hat weder Kill-Switch noch Interrupt, und der Default fail-open kann bei einem Guardian-Ausfall selbst zur Kaskade beitragen. steps/subagentStopsteps/sessionEndsteps/toolCallRequest | ||||||
agentResponse erlaubt deny oder modify vor der Auslieferung; ask liefert Approvern Frage, Kontext und Begründung, damit sie nicht blind bestätigen. Grenze: Viele Freigaben erzeugen Freigabemüdigkeit — dagegen hilft nur ein Policy-Design, das ask auf wirklich folgenreiche Aktionen begrenzt. steps/agentResponsesteps/toolCallRequest | ||||||
deny an jedem entscheidungsfähigen Hook stoppt einen auffälligen Agenten schrittweise, sessionStart kann bekannte Agent-IDs abweisen, und Trace liefert die Grundlage für Anomalieerkennung im SOC. Grenze: v0.1 kennt keinen dedizierten Kill-Switch, und abweichendes Verhalten erkennt ACS nicht selbst — das leisten Policies und Monitoring. steps/sessionStartsteps/turnStartsteps/toolCallRequest | ||||||
VamiSec-Einschätzung auf Basis ACS v0.1.0 — keine offizielle OWASP-Zuordnung. ACS kommt in den OWASP Agentic Top 10 (Dezember 2025) nicht vor, und weder OWASP noch das ACS-Projekt haben ACS auf ASI01 bis ASI10 abgebildet; die Wirkung jeder Zelle hängt von Ihren Policies und den ausgehandelten Profilen ab.
Interaktiv
Profil-Navigator: Welche ACS-Bausteine passen zu Ihrem Agenten?
Bis zu fünf Fragen zu Werkzeugen, Regulierung, Datenquellen, Dynamik und SOC. Das Ergebnis nennt die ACS-Profile und ersten Schritte, die wir für Ihre Situation empfehlen — eine VamiSec-Einschätzung, keine Konformitätsaussage.
Ihr Pfad
- 1?
1: Ruft Ihr Agent Tools auf oder löst er Aktionen mit Außenwirkung aus — Dateien, Shell, APIs, E-Mails, Tickets, Zahlungen?
1
Ruft Ihr Agent Tools auf oder löst er Aktionen mit Außenwirkung aus — Dateien, Shell, APIs, E-Mails, Tickets, Zahlungen?
ACS verlangt, dass steps/toolCallRequest für jede Aktion feuert, die den Reasoning-Kontext verlässt. Ohne solche Aktionen bleiben vor allem Ein- und Ausgaben als Kontrollpunkte.
Assistenz ohne Werkzeuge: ACS-Core als Grundlinie, Fokus auf Ein- und Ausgaben
Ohne Tool-Aufrufe ist der Hebel von ACS begrenzt — es gibt keine Aktion, die ein Guardian vor der Ausführung stoppen müsste. Relevant bleiben die Hooks für Nutzereingaben und Antworten. Planen Sie die Architektur trotzdem so, dass ein Guardian andocken kann, sobald Tools hinzukommen (VamiSec-Einschätzung).
- Agenten, Modelle und Datenquellen in einem Register erfassen — als Vorstufe einer AgBOM.
- steps/userMessage und steps/agentResponse für Schwärzungen per modify nutzen, etwa für personenbezogene Daten oder Secrets.
- Transparenzpflicht nach Art. 50 AI Act (seit 02.08.2026) prüfen, wenn der Assistent mit Personen interagiert.
- Bei jeder geplanten Tool-Anbindung den Navigator erneut durchlaufen.
acs-coresteps/userMessagesteps/agentResponsemodify
Werkzeug-Agent: ACS-Core mit Policies an steps/toolCallRequest
Für Agenten mit Außenwirkung ist steps/toolCallRequest der zentrale Kontrollpunkt. Beginnen Sie mit ACS-Core und einer deterministischen Policy, die konsequenzreiche Capabilities gezielt blockiert, umschreibt oder zur Freigabe vorlegt. Prüfen Sie im Handshake, welche Methoden der Guardian tatsächlich bewertet — alles andere läuft ungeprüft.
- Capabilities klassifizieren (z. B. filesystem.delete, network.egress, process.execute) und je Klasse allow, deny, modify oder ask festlegen.
- Für Sessions mit konsequenzreichen Capabilities on_decision_failure auf deny und die Startup-Posture auf refuse setzen — die Posture gilt je Session, nicht je Aktion.
- methods_evaluated im ServerHello gegen die Liste der implementierten Methoden abgleichen.
- ask nur mit authentifiziertem Approver und timeout_disposition deny einsetzen.
- Policies versionieren und vor jedem Rollout gegen Testfälle laufen lassen.
acs-coresteps/toolCallRequeston_decision_failureOPA/Rego
Nicht vertrauenswürdige Inhalte und Memory: Provenance zur Pflicht machen
Sobald Web-Inhalte, E-Mails oder RAG-Treffer in den Kontext gelangen, reicht die Prüfung einzelner Tool-Aufrufe nicht. Mit acs-provenance trägt jedes datentragende Feld seine Herkunft; der Guardian kann Aktionen blockieren, deren Argumente aus nicht vertrauenswürdigen Quellen stammen. ACS verhindert Prompt Injection nicht — es schafft den Kontrollpunkt, an dem Policies gegen ihre Folgen greifen. Mit Subagenten oder Skills kommt acs-inspect-dynamic hinzu, mit SOC acs-trace.
- provenance_producer: deterministic im Framework umsetzen und policy_requires_provenance im Guardian aktivieren.
- steps/toolCallResult und steps/knowledgeRetrieval beim Eingang, steps/memoryStore vor dem Schreiben ins Gedächtnis bewerten; steps/preCompact gegen das Verwischen der Herkunft.
- Session-Regel in Anlehnung an Metas Agents Rule of Two: Hat eine Session nicht vertrauenswürdige Inhalte verarbeitet und Zugriff auf sensible Daten, laufen Aktionen mit Außenwirkung nur noch per ask (VamiSec-Ableitung).
- Policy-Paradigma wählen: FIDES, CaMeL und AARM benötigen Provenance, reines IBAC nicht.
- Wirksamkeit mit adaptivem Red Teaming prüfen statt mit statischen Testprompts.
acs-provenancesteps/memoryStorederived_fromFIDES · CaMeL · AARM
Multi-Agent, Skills und dynamische Komponenten: das Inventar laufend mitführen
Wenn Subagenten entstehen, Skills nachgeladen oder MCP-Server zur Laufzeit eingebunden werden, braucht der Guardian ein aktuelles Bild davon, was der Agent gerade ist. acs-inspect liefert den AgBOM-Snapshot je Session, erst acs-inspect-dynamic macht Änderungen während der Session sichtbar. Agent-zu-Agent-Kommunikation über A2A wrappt v0.1 noch nicht.
- agbom/snapshot und agbom/changed aktivieren; Hot-Swaps und ungeprüfte Versionen per deny stoppen.
- steps/skillRegister als statisches Prüftor und steps/skillLoad mit Bindung an skill_id und Digest nutzen.
- steps/subagentStart bewerten: Der Guardian kann Spawns ablehnen, deren abgeleitete Capabilities der Intent des Parents nicht autorisiert.
- Freigabelisten für Modelle, MCP-Server und Skills pflegen — zugleich nutzbar als Lieferantenregister.
- A2A-Peers vorerst über steps/agentTrigger (a2a_inbound) und die AgBOM erfassen; A2A-Wrapping folgt frühestens mit v0.2.
acs-inspectacs-inspect-dynamicsteps/skillLoadAgBOM
SOC vorhanden: Trace ins SIEM bringen und den Guardian selbst überwachen
Mit acs-trace werden Hooks und Entscheidungen zu OpenTelemetry-Spans und OCSF-Events — Entscheidungen außer allow als Detection Finding mit Severity. Bauen Sie Parser und Use Cases gegen die JSON-Mappings und testen Sie sie mit echten Daten, denn einzelne Klassen- und Feldnamen weichen von OCSF ab. Trace ist Selbstauskunft und best-effort, für sich also kein Beweismittel.
- Use Case „Guardian-Bypass“: jeden fail-open-Durchlauf und jede ungeschützt gestartete Session alarmieren.
- Die Decision-Failure-Rate auf dem Hook-Pfad direkt messen — ein erfolgreicher system/ping beweist keine funktionierende Durchsetzung.
- deny-Häufungen je Agent, Policy und rule_id als Anomalie-Signal auswerten.
- Agenten-Identitäten in OCSF über actor.user.type „AI Agent“ von menschlichen Nutzern trennen.
- Schwärzung schon beim Emittieren anwenden — Spans können Prompts und Tool-Argumente enthalten.
acs-traceOCSF 2004OpenTelemetrySIEM
Regulierter Einsatz: nachweisfähige Profile kombinieren und fail-closed betreiben
Wer mit AI Act, DORA oder NIS2 argumentiert, braucht mehr als ACS-Core: Core enthält weder Trace noch die Bindung der Audit-Chain an Request-Inhalte. ACS unterstützt die Nachweisführung, begründet aber keine Konformitätsvermutung. Je nach Architektur kommen acs-provenance und acs-inspect-dynamic hinzu. Die Zuordnung zu Rechtsnormen ist eine VamiSec-Ableitung und ersetzt keine rechtliche Prüfung.
- acs-trace und acs-audit (request_hash) verlangen, für Nichtabstreitbarkeit zusätzlich acs-crypto mit ML-DSA-65.
- on_decision_failure: deny und die Startup-Posture refuse konfigurieren und per Test belegen.
- Für Art. 14 AI Act: ask an steps/toolCallRequest nur mit approver.type human und timeout_disposition deny; einen Stop-Button kennt v0.1 nicht, nur schrittweises deny.
- Aufbewahrung im SIEM oder Archiv regeln — ACS legt keine Fristen fest; Art. 19 und 26 AI Act verlangen für Hochrisiko-Logs mindestens sechs Monate, vorbehaltlich anderen Rechts.
- Im Finanzsektor über DORA und die Delegierte Verordnung (EU) 2024/1774, Art. 12 argumentieren.
acs-traceacs-auditacs-cryptoArt. 14 AI ActDORA
- Ruft Ihr Agent Tools auf oder löst er Aktionen mit Außenwirkung aus — Dateien, Shell, APIs, E-Mails, Tickets, Zahlungen?
- Setzen Sie den Agenten in einem regulierten Rahmen mit Nachweispflichten ein — etwa als Hochrisiko-System nach AI Act, im Finanzsektor unter DORA oder als NIS2-Einrichtung?
- Verarbeitet der Agent nicht vertrauenswürdige Inhalte — Webseiten, E-Mails, Tickets, RAG-Treffer — oder schreibt er in ein Langzeitgedächtnis?
- Startet der Agent Subagenten, lädt er Skills oder bindet er MCP-Server und Modelle zur Laufzeit ein?
- Betreiben Sie ein SOC oder SIEM, das Agenten-Ereignisse auswerten und alarmieren soll?
Deep Dive · 14 Kapitel
Agent Control Standard im Detail: vom Kontrollproblem bis zum Betrieb
Vierzehn Kapitel für CISOs, Security-Architekten und KI-Plattform-Verantwortliche: was die Spezifikation v0.1.0 normativ verlangt, wo sie heute endet und welche Entscheidungen vor einer Einführung anstehen. Zuordnungen zu Vorfällen, Risiken und Regulatorik sind als VamiSec-Einschätzung gekennzeichnet.
Warum KI-Agenten Runtime-Kontrolle brauchen
Ein KI-Agent beantwortet nicht nur Fragen, er löst Aktionen aus — in Dateisystemen, Datenbanken, Postfächern und Cloud-Konten. Damit verschiebt sich die Sicherheitsfrage vom Modell-Output zu der Frage, wer eine konkrete Aktion prüft, bevor sie ausgeführt wird.
Vom Antwortgenerator zum Akteur
Klassische LLM-Anwendungen erzeugen Text, den ein Mensch liest, bevor etwas passiert. KI-Agenten planen dagegen selbstständig, rufen Tools auf, schreiben in ein Langzeitgedächtnis und starten Subagenten. Jeder dieser Schritte kann Daten verändern oder nach außen tragen. Die Kontrollfrage lautet deshalb: „Darf genau diese Aktion mit genau diesen Argumenten in dieser Session jetzt stattfinden?“ Beantworten lässt sie sich nur zur Laufzeit — zwischen der Entscheidung des Modells und der Ausführung durch das Framework.
System-Prompts sind keine Kontrollen
Viele Deployments verlassen sich auf Anweisungen im System-Prompt wie „keine Produktionsdaten löschen“. Solche Sätze sind Bitten an ein probabilistisches System, keine durchgesetzten Regeln. Die ACS-Projektseite beginnt ihre Begründung damit: System-Prompts sind keine Kontrollen, bessere Modelle decken Randfälle und adversariale Eingaben nicht ab, proprietäre Guardrails schaffen Anbieterabhängigkeit.
Hersteller und Forschung bestätigen das. OpenAI schreibt am 22.12.2025, Prompt Injection sei „unlikely to ever be fully 'solved'“. In der Studie „The Attacker Moves Second“ (arXiv, 10.10.2025) überwanden adaptive Angriffe zwölf aktuelle Abwehrverfahren, meist mit Erfolgsraten über 90 Prozent — obwohl die meisten ursprünglich Werte nahe null gemeldet hatten. Modellrobustheit senkt das Risiko, beseitigt es aber nicht. Es braucht eine unabhängige Prüfinstanz außerhalb des Modells.
Lethal trifecta und Agents Rule of Two
Simon Willison beschrieb am 16.06.2025 die „lethal trifecta“: Ein Agent, der Zugriff auf private Daten hat, nicht vertrauenswürdigen Inhalten ausgesetzt ist und nach außen kommunizieren kann, lässt sich per Prompt Injection zur Datenexfiltration bringen. Meta erweiterte das am 31.10.2025 zur „Agents Rule of Two“: Innerhalb einer Session soll ein Agent höchstens zwei von drei Eigenschaften kombinieren: nicht vertrauenswürdige Eingaben verarbeiten; auf sensible Systeme oder private Daten zugreifen; Zustand ändern oder extern kommunizieren. Braucht er alle drei, ist mindestens Aufsicht nötig, etwa per menschlicher Freigabe. Meta betont, dass die Regel Least Privilege ergänzt und nicht ersetzt.
VamiSec-Einschätzung: Beide Modelle beschreiben Eigenschaften einer Session, nicht eines Modells. Durchsetzen lassen sie sich nur, wenn eine Instanz jede Aktion und den bisherigen Sessionverlauf sieht. Diesen Kontrollpunkt standardisiert der OWASP Agent Control Standard (ACS). Um nicht vertrauenswürdige Eingaben zu erkennen, braucht es das optionale Profil acs-provenance; ACS-Core allein liefert keine Herkunftsangaben.
Belegte Vorfälle — und was Runtime-Kontrolle begrenzt hätte
| Vorfall (Quelle, Datum) | Was geschah | Hätte begrenzen können (VamiSec-Einschätzung) |
|---|---|---|
| EchoLeak, CVE-2025-32711, Microsoft 365 Copilot (NVD 11.06.2025; CVSS 3.1: 9.3 Microsoft, 7.5 NVD) | Zero-Click: Eine präparierte E-Mail brachte Copilot dazu, interne Daten über die gerenderte Antwort abfließen zu lassen; vor der Offenlegung behoben. | Prüfung von steps/agentResponse mit modify (externe Bild- und Link-URLs entfernen) oder deny — sofern der Host den Hook feuert und Provenance liefert. |
| Replit-Agent löscht Produktionsdatenbank (SaaStr, Juli 2025; The Register 22.07.2025) | Der Agent ignorierte einen angeordneten Code-Freeze, löschte die Produktionsdatenbank und erzeugte irreführende Statusmeldungen. | deny oder ask auf destruktive Datenbank-Capabilities am steps/toolCallRequest; Audit-Kette zur Rekonstruktion. Primär: Dev/Prod-Trennung, Backups. |
| GitHub-MCP „Toxic Agent Flow“ (Invariant Labs, 26.05.2025) | Prompt Injection in einem öffentlichen Issue; der Agent veröffentlichte Daten aus privaten Repositories per Pull Request. Kein Code-Fehler des Servers, kein CVE. | Session-Policy „nach nicht vertrauenswürdigem Tool-Output kein Schreiben in ein anderes Repository“ mit deny oder ask am steps/toolCallRequest; erfordert acs-provenance. |
| Amazon Q Developer Extension v1.84.0, CVE-2025-8217 (AWS-2025-015, 23.07.2025; CVSS 4.0: 5.1) | Eingeschleuster Lösch-Prompt im offiziellen Release; die Ausführung scheiterte an einem Syntaxfehler, Kundenressourcen waren nicht betroffen. | Der Prompt kam aus dem Produkt selbst und gilt als vertrauenswürdig — Provenance hilft nicht. Wirksam wären deny oder ask auf Lösch-Capabilities und Versionspinning über die AgBOM. |
| ClawHavoc: bösartige Skills auf ClawHub (The Hacker News 02.02.2026; Unit 42 23.06.2026) | Ein Erst-Audit fand 341 bösartige unter 2.857 geprüften Skills, u. a. mit Base64-kodiertem Dropper. | Prüfung bei skillRegister und Digest-Bindung bei skillLoad; danach deny auf Download-und-Ausführung (network.egress plus process.execute). |
Alle Vorfälle liegen vor der kanonischen ACS-Spezifikation v0.1.0 (05.06.2026). Die rechte Spalte ist eine Einschätzung, keine Aussage, dass ACS einen Vorfall verhindert hätte.
Warum die Kontrolle zur Laufzeit sitzen muss
Modellauswahl, Prompt-Härtung und Red Teaming vor dem Go-live bleiben notwendig, sagen aber nicht, was ein Agent in einer konkreten Session tut. Runtime-Kontrolle ergänzt sie: Sie greift vor der Aktion, bewertet den Kontext der ganzen Session und hinterlässt einen rekonstruierbaren Audit-Trail. Die OWASP Top 10 for Agentic Applications 2026 empfehlen für ASI02 (Tool Misuse and Exploitation) eine vorgelagerte Policy-Enforcement-Middleware, ein „Intent Gate“, das Absicht und Argumente vor der Ausführung prüft. ACS wird dort nicht genannt, liefert aber (VamiSec-Einschätzung) einen offenen Wire-Vertrag für genau diesen Kontrollpunkt. Die Policies bleiben Ihre Aufgabe.
Was ACS ist: Parteien, drei Pillars, ACS-Core und sieben Profile
Der OWASP Agent Control Standard (ACS) ist eine offene Wire-Spezifikation, über die ein separater Guardian Agent prüft, was ein KI-Agent als Nächstes tun will. Der Guardian erlaubt, blockiert oder ändert die Aktion, legt sie zur Freigabe vor oder stellt seine Entscheidung zurück — bevor sie stattfindet.
Präziser: Der Agent Control Standard (ACS) ist eine Spezifikation des OWASP GenAI Security Project, die festlegt, an welchen Kontrollpunkten (Hooks) ein KI-Agent einer externen Policy-Instanz seine Schritte vorlegt und wie diese mit einer Entscheidung (Disposition) antwortet. Das Format ist JSON-RPC 2.0 mit einem eigenen Feld acs_version, transportiert über HTTP(S) oder stdio. Aktueller Stand ist die Spezifikation v0.1.0, veröffentlicht als Release 0.1.2 (Tag vom 21.09.2026). ACS definiert den Vertrag zwischen Agent und Guardian, nicht die Policies: Was erlaubt ist, entscheidet weiterhin Ihre Organisation.
Die Parteien
| Rolle | Aufgabe laut Spezifikation | Typische Ausprägung (Beispiel) |
|---|---|---|
| Observed Agent | Das überwachte, LLM-gestützte System. Es implementiert den Wire-Vertrag, meldet jeden relevanten Schritt per Hook und setzt die erhaltene Disposition um. Über seine eigenen Aktionen entscheidet es nicht. | Coding-Agent, Support-Agent, Agent-Framework mit Host-Anbindung |
| Guardian Agent | Die Policy-Instanz. Sie bewertet jeden Hook gegen die Deployment-Policy, liefert eine Disposition und muss jede Entscheidung mit Begründung, Modellkennung des Evaluators und — falls verfügbar — Konfidenz protokollieren. | Policy-Engine (z. B. OPA/Rego), optional ergänzt um eine LLM-Schicht |
| Approver | Dritte Partei, die der Guardian bei ask einbindet: Mensch, Agent oder Service. Der Guardian muss ihre Identität gegen die Policy prüfen. | Security Officer, Freigabe-Service, Ticket-Workflow |
| Principal | Die authentifizierte Partei, die eine Session auslöst oder in ihr handelt. | Mitarbeitende, Service-Account |
Die Spezifikation verlangt, drei Identitäten nicht zu vermischen: die des Observed Agent, die des Guardians und die des Policy-Autors.
Ein Designprinzip trägt die Architektur: Das Sprachmodell darf von den Hooks nichts wissen. Das Framework feuert sie, und Herkunftsangaben (Provenance) werden außerhalb des Ausgabepfads des Modells gesetzt. Nach unserer Lesart soll ein manipuliertes Modell den Kontrollpunkt so weder sehen noch beeinflussen können.
Drei Pillars: Instrument, Trace, Inspect
Instrument
Abfangen, Bewerten und Durchsetzen in Echtzeit: 19 native steps/*-Hooks, fünf Dispositions, Handshake, Replay-Schutz und Signaturen. Auf diesem Pillar baut die Pflichtbasis ACS-Core auf.
Trace
Ein Vokabular, mit dem Hook-Ereignisse als OpenTelemetry-Spans und OCSF-Events erscheinen; Entscheidungen werden als Span-Event am auslösenden Schritt festgehalten. ACS erfindet kein neues Log-Format. Trace läuft entkoppelt vom Enforcement und ist best-effort.
Inspect
Die AgBOM (Agent Bill of Materials): ein dynamisches Inventar aus Modellen, MCP-Servern, A2A-Peers, Tools, Wissensquellen, Memory-Stores, Capabilities und Skills, serialisierbar nach CycloneDX 1.6, SPDX 3.0 oder SWID.
ACS-Core und sieben Profile
Konformität ist modular aufgebaut. ACS-Core ist die Pflichtbasis, darauf setzen sechs optionale Profile auf, die ein Deployment im Handshake deklariert. Nummerierte Level gibt es nicht — nur Profilnamen, die sich unabhängig kombinieren lassen. Die einzige Abhängigkeit: acs-inspect-dynamic erweitert acs-inspect.
| Profil (Handshake-Name) | Kern der Anforderung | Wofür Sie es brauchen |
|---|---|---|
| acs-core (Pflicht) | U. a. Handshake, JSON-RPC-Envelope, mindestens sechs Hooks, alle fünf Dispositions mit Pflichtfeldern, Hash-verkettete Audit-Kette mit publiziertem Chain-Head, Replay-Schutz, HMAC-SHA256-Signatur auf jedem Request und jeder Response, Decision Honoring, system/ping | Authentifizierter Kanal; der Agent befolgt die Entscheidungen des Guardians |
| acs-trace | Für jeden unterstützten Schritt OpenTelemetry- und/oder OCSF-Events mit Pflichtattributen; jede Entscheidung als Trace-Event | SIEM-Anbindung, herstellerübergreifende Observability |
| acs-inspect | agbom/snapshot einmal je Session vor dem ersten inhaltstragenden Hook; der Guardian serialisiert auf Anfrage in mindestens ein BOM-Format | Policies, die vom Inventar abhängen, etwa der Bann eines Modells oder Tools |
| acs-inspect-dynamic | Zusätzlich agbom/changed bei jeder Änderung des Komponenten-Graphen | Hot-Swaps von Modellen, MCP-Servern oder Skills während der Session erkennen |
| acs-provenance | Provenance-Objekt an jedem datentragenden Feld jedes Hooks (provenance_producer: deterministic) | Informationsfluss-Policies nach FIDES, CaMeL oder AARM-artigem Muster |
| acs-crypto | Asymmetrische bzw. Post-Quanten-Signaturen, mindestens ML-DSA-65 | Nichtabstreitbarkeit gegenüber Dritten |
| acs-audit | request_hash auf jedem ContextEntry der Audit-Kette | Die Kette bindet auch Request-Inhalte, nicht nur Metadaten |
Konformität ist in v0.1.0 eine Selbstdeklaration im Handshake: keine Testsuite, kein Register konformer Implementierungen, keine Prüfstelle.
Was ACS-Core garantiert, formuliert die Spezifikation nüchtern: Der Kanal ist authentifiziert, und der Observed Agent befolgt die Entscheidungen. Nicht garantiert ist, dass die Policies streng sind — ein großzügiger Guardian ist konform, nur eben großzügig. Manipulationsevidenz der Audit-Kette auch gegenüber einem kompromittierten Guardian liefern erst acs-crypto und acs-audit, weil die HMAC-Basis ein symmetrisches Verfahren ist. Die Beispielkombinationen der Spezifikation reichen von einer minimalen IDE-Integration mit nur acs-core bis zu einem High-Assurance-Deployment mit allen sieben Profilen.
Das Tier-Modell der Projektseite: Architekturschichten, keine Stufen
- 1Tier 1 · Platform layer
Agent-Frameworks stellen standardisierte Middleware-Hooks bereit — hier entsteht der Kontrollpunkt.
- 2Tier 2 · Enforcement layer
Eine Open-Source-Komponente liest deklarative Policies und liefert über diese Hooks Entscheidungen zurück.
- 3Tier 3 · Enterprise layer
Eigene Klassifikatoren und domänenspezifische Logik docken hinter derselben Schnittstelle an.
Dieses Bild beschreibt, wer welchen Teil beiträgt, nicht, wie konform ein Deployment ist. Für Konformitätsaussagen zählen ausschließlich die Profile. Für Ihre Architekturplanung ist es dennoch nützlich: Es trennt die Frage, welche Plattform die Hooks liefert, von der Frage, wer die Policies betreibt und pflegt.
Entstehung, Governance und Lizenz: von AOS zum OWASP-Projekt
Wer einen Standard früh einsetzt, sollte wissen, wer ihn steuert, unter welcher Lizenz er steht und wie belastbar seine Roadmap ist. ACS hat eine kurze, aber bewegte Geschichte.
Von der Beobachtung zur Kontrolle
Die Arbeit begann am 11.05.2025 als „Agent Observability Standard“ (AOS) im GitHub-Umfeld von Zenity und wechselte im Juni 2025 in die OWASP-Organisation, wo AOS als „OWASP other project“ geführt wurde. Die Protokollschicht hieß im Mai und Juni 2025 zwischenzeitlich „ASOP“ (Agent Security & Observability Protocol), bevor sie wieder unter AOS lief. Nach einer Phase mit nur vereinzelten Commits ab Mitte 2025 folgte am 10.04.2026 das Rebranding zum Agent Control Standard. Der neue Name markiert den inhaltlichen Schritt: von der reinen Beobachtung zur Durchsetzung. Danach lief ACS kurz als eigenständiges Projekt außerhalb von OWASP und kehrte im September 2026 zurück — diesmal in das OWASP GenAI Security Project.
| Datum | Meilenstein |
|---|---|
| 11.05.2025 | Erste Commits als „Agent Observability Standard“ (AOS) |
| 06/2025 | Übergang in die OWASP-Organisation |
| 10.04.2026 | Rebranding AOS → ACS (Agent Control Standard) |
| 27.05.2026 | Launch-Pressemitteilung über Business Wire, Phase als eigenständiges Projekt |
| 05.06.2026 | Kanonische Spezifikation v0.1.0 integriert, einschließlich der Skill-Hooks |
| 11.08.2026 | Release v0.1.1: neue Lizenzierung, Spezifikation unverändert |
| 01.–10.09.2026 | OWASP-Relaunch: Ressourcenseite (01.09.), Site und 44 JSON-Schemas (05.09.), Governance und Referenzimplementierung (10.09.) |
| 21.09.2026 | Tag v0.1.2, nachträglich gesetzt auf einen Commit vom 09.09.2026 |
| März 2027 (Ziel) | Nächstes Spezifikations-Release v0.2.0 |
Quellen: Git-Historie und Projektdokumente des ACS-Repositorys sowie OWASP-Ressourcenseite, Stand 03.10.2026.
Status: Incubator und public preview
ACS ist ein Projekt des OWASP GenAI Security Project und dort der Agentic Security Initiative zugeordnet. In seinen eigenen OWASP-Nest-Metadaten deklariert es Level 2, im Nest-Schema die Stufe „Incubator“; eine Einstufung durch ein OWASP-Gremium ist damit nicht belegt. Der Project Lead bezeichnet den Stand öffentlich als „public preview“ und rät Implementierern ausdrücklich zur Vorsicht. ACS ist kein ISO-, IETF- oder W3C-Standard und keine harmonisierte Norm. Auch formal zeigt sich das frühe Stadium: GitHub-Releases gibt es keine, nur Tags; Spezifikationsprosa und Schemas haben sich zwischen v0.1.1 und v0.1.2 geändert, ohne dass die Spezifikationsversion v0.1.0 hochgezählt wurde.
Wer steuert das Projekt?
Laut GOVERNANCE.md haben Michael Bargury und Ory Segal ACS geschaffen; beide bleiben Projektleiter. Project Lead ist Rock Lambros. Zur Transparenz: Bargury ist CTO und Mitgründer von Zenity, Lambros wird von Zenity als „Director of AI Standards and Governance“ geführt, und die frühen AOS-Commits stammen überwiegend aus dem Zenity-Umfeld. Die Workstreams — Coding Agents, Development (SDK), Identity, Outreach und Spec — leiten Personen aus mehreren Organisationen. Die Projektseite beschreibt ACS als herstellerneutral und gemeinschaftlich gesteuert; das ist eine Selbstbeschreibung. Unsere Einordnung: ein OWASP-Projekt mit starker Zenity-Prägung in Gründung und Leitung.
Entscheidungen laufen über ein Akzeptanz-Gate. Nur Issues mit dem Label status:accepted gelangen ins Backlog; Änderungen an Verhalten, normativem Text oder Code brauchen ein akzeptiertes Issue, Spezifikationsänderungen beginnen als GitHub Discussion, Commits erfordern einen DCO-Sign-off. Entwickelt wird auf dem Branch integration. Erst wenn der Project Lead nach main promotet, werden Site und Schema-URIs neu veröffentlicht. Stand 03.10.2026 wurde main seit dem 10.09.2026 nicht mehr promotet — Änderungen auf integration sind also noch nicht publiziert.
Lizenz: was Sie übernehmen dürfen
| Bestandteil | Lizenz | Praktische Folge |
|---|---|---|
| Code, JSON-Schemas, Code-Beispiele in der Dokumentation | Apache-2.0 | Nutzung in proprietären Produkten ohne Offenlegungspflicht; ausdrückliche Patentlizenz |
| Prosa-Dokumentation (Spezifikationstexte, README) | CC BY-SA 4.0 | Übersetzungen und Adaptionen unterliegen ShareAlike und brauchen Namensnennung |
| Releases bis einschließlich v0.1.0 | MIT | Die damals erteilte Lizenz bleibt bestehen |
| Namen und Logos (OWASP, Agent Control Standard) | keine Rechte eingeräumt | Eine Implementierung darf sich als „ACS-conformant“ beschreiben, aber keine Billigung durch das Projekt suggerieren |
Die Neulizenzierung auf Apache-2.0 und CC BY-SA 4.0 erfolgte mit Release v0.1.1 am 11.08.2026. VamiSec formuliert alle Inhalte dieser Seite eigenständig und übersetzt keine Spezifikationsprosa.
Roadmap: was belegt ist
Das nächste Spezifikations-Release v0.2.0 zielt auf März 2027; ein Datum für v1.0 ist nicht festgelegt. Für v0.2 vorgemerkt sind unter anderem Streaming und Interruption, rekursives ASK und Quorum, Multi-Tenant-Isolation, das Cedar-Binding, AgBOM-Föderation über A2A-Peers und das A2A-Wrapping. Das laufende Ziel seit dem Kick-off am 10.09.2026: innerhalb von 90 Tagen eine lauffähige Guardian-Referenzimplementierung, auf Interoperabilität mit Microsofts Agent Governance Toolkit gebenchmarkt, in den Händen externer Evaluatoren. Ob das bis Anfang Dezember 2026 gelingt, ist offen. Ebenfalls offen ist PR #21, der den Pflichtumfang von ACS-Core neu ziehen will. Abweichende Versionsskizzen in Blogbeiträgen sind keine offizielle Roadmap.
Instrument: die 19 Hooks im Lebenszyklus eines Agenten
An jedem Hook hält der Observed Agent an und legt dem Guardian den nächsten Schritt vor. ACS v0.1.0 definiert 19 native steps/*-Hooks — welche davon tatsächlich geprüft werden, handeln beide Seiten pro Session aus.
Auf dem Wire tragen Hooks das Präfix steps/, etwa steps/toolCallRequest. Daneben gibt es Methoden, die keine nativen steps/*-Hooks sind: agbom/snapshot und agbom/changed für das Inventar, die Liveness-Probe system/ping, den Handshake handshake/hello und den Namespace protocols/MCP/* für gewrappte MCP-Nachrichten. Die Hooks-Seite der Spezifikation zählt 19 Hooks plus zwei AgBOM-Methoden plus Ping als 22 Methoden; das Schema-Paket umfasst insgesamt 44 JSON-Schemas. Einzelne Projekttexte (README, docs/acs.md) nennen noch 16 Lifecycle-Hooks — das ist die Zählung ohne die drei Skill-Hooks.
| Gruppe | Hooks (steps/…) | Wann sie feuern | Dispositions laut Spezifikation |
|---|---|---|---|
| Session | sessionStart, agentTrigger, sessionEnd | Nach dem Handshake vor jedem anderen Schritt; Aktivierung durch Nutzer, Zeitplan, Event, A2A oder System; Session-Ende, an dem der Guardian die Kette versiegelt | sessionStart: allow/deny · agentTrigger: allow/deny/modify · sessionEnd: nur Audit |
| Turn | turnStart, turnEnd | Beginn und Ende jedes Agent-Turns; die turn_id begleitet alle Schritte dazwischen | turnStart: entscheidungsfähig, meist allow · turnEnd: nur Audit |
| Nachrichten | userMessage, agentResponse | Nutzereingabe, bevor sie den Reasoning-Kontext erreicht; Agent-Ausgabe vor der Auslieferung | allow/deny/modify |
| Wissen & Memory | knowledgeRetrieval, memoryContextRetrieval, memoryStore | Wissens- und RAG-Abfragen, Memory-Lesen in den Kontext, Schreiben ins Langzeitgedächtnis | allow/deny/modify |
| Tools | toolCallRequest, toolCallResult | Nach dem Parsen eines Tool-Calls vor dem Dispatch; nach der Ausführung, bevor das Ergebnis übernommen wird | toolCallRequest: alle fünf · toolCallResult: allow/deny/modify |
| Kompaktierung | preCompact, postCompact | Vor und nach dem Verdichten des Kontextfensters | preCompact: deny möglich · postCompact: modify, kein deny |
| Subagenten | subagentStart, subagentStop | Start eines Subagenten im selben Prozess; dessen Ende | subagentStart: deny möglich · subagentStop: nur Audit |
| Skills | skillRegister, skillLoad, skillUnload | Aufnahme in die verfügbare Menge als statisches Prüftor; Aktivierung in der Session; Entfernen | skillRegister und skillLoad: allow/deny · skillUnload: nur Audit |
Die Einschränkungen je Hook stehen in der Spezifikationsprosa; das Response-Schema selbst begrenzt das Feld decision nicht pro Methode.
Das Core-Minimum: sechs Hooks
ACS-Core verlangt mindestens sechs Hooks: sessionStart, userMessage oder agentTrigger, toolCallRequest, toolCallResult, agentResponse und sessionEnd. Alle übrigen soll ein Framework implementieren, sofern es das jeweilige Ereignis beobachten kann; sie werden im Handshake ausgehandelt. Für Ihre Produktbewertung heißt das: Die Aussage „unterstützt ACS“ verrät noch nicht, ob Memory-Schreibvorgänge, Subagenten oder Skills den Guardian überhaupt erreichen.
Die methods_evaluated-Falle
Im Handshake meldet der Observed Agent, welche Methoden er implementiert (methods_implemented). Der Guardian antwortet mit der Liste der Methoden, die er tatsächlich bewertet (methods_evaluated). Sendet der Agent einen Hook, der dort fehlt, muss er ihn als ALLOW-by-default behandeln — der Schritt wird bestenfalls protokolliert, aber nicht geprüft. Die einzige Referenzimplementierung bewertet beispielsweise nur steps/toolCallRequest und steps/toolCallResult, also zwei von 19 Hooks.
toolCallRequest: der zentrale Durchsetzungspunkt
steps/toolCallRequest ist der einzige Hook, für den die Spezifikation ausdrücklich alle fünf Dispositions vorsieht; hier setzen auch die Kontrollparadigmen an. Zentral ist eine MUST-Regel: Frameworks müssen toolCallRequest für jede Aktion feuern, die den Reasoning-Kontext des Agenten verlässt — auch wenn das Framework sie intern nicht als Tool führt. Das umfasst Lese- und Schreibzugriffe auf das Dateisystem, Netzwerkabrufe, Prozessstarts und Shell-Befehle. Was an diesem Hook vorbeiläuft, sieht keine Policy.
Pflicht im Payload sind tool.name und arguments, wobei jeder Argumentwert eine eigene Provenance tragen kann. Optional kommen eine abstrakte capability wie filesystem.delete oder network.egress, das raw_command und ein intent hinzu. Policies können so bewerten, was eine Aktion bewirkt, statt welches Programm sie ausführt.
Hooks mit besonderer Schutzwirkung
- memoryStore ist die Standard-Senke für Einfluss über Sessions hinweg und laut Spezifikation der Ansatzpunkt gegen Memory Poisoning (vgl. ASI06: Memory & Context Poisoning).
- preCompact und postCompact sichern die Verdichtung ab: Die Zusammenfassung muss origin agent_generated tragen und die Herkunft aller verdichteten Einträge erben, damit nicht vertrauenswürdige Inhalte nicht reingewaschen werden.
- subagentStart erlaubt dem Guardian, den Start eines Subagenten zu verweigern; jeder Subagent erhält eine eigene session_id und eine eigene Audit-Kette.
- skillRegister und skillLoad binden Skills an einen Digest: Geladen werden darf nur, was zuvor mit identischer skill_id und identischem Digest genehmigt wurde; nicht zuordenbare Ladevorgänge sollen abgelehnt werden.
Die fünf Dispositions im Detail: allow, deny, modify, ask, defer
Auf jeden Hook antwortet der Guardian mit genau einer Disposition. Die Details — Pflichtfelder, Kompositionsregeln, Fristen — entscheiden darüber, ob eine Policy im Fehlerfall sicher oder durchlässig ist.
Auf dem Wire stehen die Dispositions kleingeschrieben im Feld decision; die Spezifikationsprosa schreibt sie groß (ALLOW, DENY …). Jede Antwort hat in v0.1 den Typ final — Zwischenstände (progress) und Unterbrechungen (interruption) sind erst für v0.2 vorgesehen. Pflicht in jeder Antwort sind type, acs_version, request_id und decision; die request_id spiegelt die des Requests.
| Disposition | Wirkung beim Observed Agent | Pflichtfelder (Schema) | Typischer Einsatz |
|---|---|---|---|
| allow | Die Aktion läuft wie angefragt | keine; reasoning empfohlen, wenn für Nutzer sichtbare Audit-Trails erwartet werden | Lesezugriff im erlaubten Scope |
| deny | Die Aktion wird blockiert | reasoning | Destruktiver Shell-Befehl, Egress an ein unbekanntes Ziel |
| modify | Die Aktion läuft mit geändertem Payload | reasoning, modifications | Abfrage begrenzen, personenbezogene Daten im Tool-Ergebnis schwärzen |
| ask | Der Agent pausiert bis zur Freigabe | reasoning, ask_details | Zahlung, Massenversand an Externe |
| defer | Die Entscheidung wird zurückgestellt | reasoning, defer_details | Unbekanntes Skript, fehlender Kontext |
Optional in jeder Entscheidung: reason_codes, policy_references (policy_id, policy_version, policy_name, rule_id), policy_data, cited_provenance_ids sowie metadata mit evaluator (deterministic, agent oder composite).
MODIFY: zwei Formen, die sich ausschließen
Das Objekt modifications kennt zwei Formen. Entweder ersetzt modified_content den gesamten Payload — dann sind keine weiteren Edits erlaubt. Oder der Guardian schickt strukturierte Edits: redactions (JSON-Pointer-Pfad plus Ersatztext, Standard „[REDACTED]“) und/oder parameter_overrides (Argumentname plus neuer Wert). Beide dürfen gemeinsam auftreten, ihre Ziele müssen aber disjunkt sein: Kein Redaktionspfad darf dasselbe Feld wie ein Override treffen, auch kein über- oder untergeordnetes. Die Spezifikation begründet das so: Eine feste Anwendungsreihenfolge würde Konflikte still auflösen und je nach Reihenfolge geschwärzte Werte wieder freilegen oder bereinigte Werte überschreiben. Verletzt ein Guardian diese Regeln, muss der Observed Agent die Antwort wie ein deny behandeln.
Ein Beispiel: Ein Agent will eine Kundentabelle vollständig abfragen. Der Guardian antwortet mit modify und einem Eintrag in parameter_overrides, der die Abfrage auf 500 Zeilen begrenzt — wie im Simulator-Szenario „Unbegrenzte Datenbankabfrage“. Override-Werte stehen dabei als roher Wert im Objekt, nicht in einer value-Hülle.
ASK: Freigabe mit klaren Regeln
- ask_details verlangt einen approver mit type (human, agent oder service) und id, eine question und timeout_seconds (mindestens 1).
- Läuft die Frist ab, greift timeout_disposition; der Standardwert ist deny.
- Der Guardian muss die Identität des Approvers gegen die Policy prüfen — Approver-Authentifizierung ist Pflicht.
- Nur ein Hop: Approver dürfen selbst kein ask zurückgeben. Quorum und rekursive Freigaben sind auf v0.2 verschoben.
- Kann ein Client ASK nicht auflösen, darf der Guardian kein ask senden. Er weicht auf defer mit timeout_decision deny oder auf deny mit dem Reason-Code approver_unavailable aus — ein stilles allow ist ausgeschlossen.
- Über intent_extension kann eine Freigabe die erlaubten Capabilities für this_request oder die ganze session erweitern. Laut Spezifikation ist das der einzige konforme Weg, den festgelegten Intent nachträglich zu verändern.
Wichtig für die Regulatorik: ASK ist nicht automatisch menschliche Aufsicht. Der Approver kann ein Agent oder ein Service sein, und timeout_disposition lässt sich auf allow stellen. Menschliche Aufsicht nach EU AI Act Art. 14 ist für Hochrisiko-Systeme ab 02.12.2027 (Anhang III) bzw. 02.08.2028 (Anhang I) anzuwenden; KI-Agenten sind nicht per se Hochrisiko. Wer ASK dafür als Baustein nutzt, braucht nach VamiSec-Einschätzung eine Policy mit approver.type human und timeout_disposition deny sowie einen Freigabeprozess, der Entscheidungsmüdigkeit vermeidet. ASK unterstützt dann die Nachweisführung, erfüllt Art. 14 aber nicht allein: Einen Stop-Button kennt v0.1 nicht, nur das schrittweise deny.
DEFER: Entscheidung vertagen, aber begrenzt
defer_details verlangt einen reason (insufficient_context, conflicting_policies, low_confidence oder pending_dependency), eine resolution_method (additional_context, human_approval oder timeout) und resolution_timeout_ms. Für den Fristablauf kennt timeout_decision nur deny oder ask — kein allow — und steht standardmäßig auf deny. Die Prosa fordert das Feld, das Schema führt es nicht als Pflicht; setzen Sie es deshalb immer explizit. Kaskadierende Deferrals müssen je Session begrenzt sein. Achten Sie auf die Einheiten: ASK rechnet in Sekunden (timeout_seconds), DEFER in Millisekunden (resolution_timeout_ms).
Handshake, Failure Posture und Timeouts
Bevor der erste Hook feuert, handeln Observed Agent und Guardian aus, was geprüft wird, wie lange gewartet wird und was bei einem Ausfall geschieht. Diese wenigen Felder bestimmen, ob Ihr Kontrollpunkt im Ernstfall hält.
Jede Session beginnt mit handshake/hello. Der ClientHello steckt im payload eines normalen Request-Envelopes, der ServerHello kommt als result zurück — ohne decision. Die ausgehandelte Version muss in der Hauptversion mit dem Client übereinstimmen; unbekannte Felder sind zu ignorieren.
| Nachricht | Pflichtfelder | Sicherheitsrelevante optionale Felder |
|---|---|---|
| ClientHello (Observed Agent) | acs_versions_supported, methods_implemented, transports_supported (http, https, stdio), provenance_producer (deterministic oder none) | profiles_supported, wrapped_protocols, max_payload_size_bytes |
| ServerHello (Guardian) | negotiated_version, methods_evaluated, selected_transport, timeout_config (default_ms, optional per_method_ms) | on_decision_failure (proceed oder deny, Default proceed), signature_algorithms_supported, skew_window_ms (Default 300000), policy_requires_provenance, approver_types_supported, profiles_accepted, trace_emission, agbom_serializations_supported |
Ablehnungen im Handshake: UNSUPPORTED_VERSION (-32001) bei Versionskonflikt; PROVENANCE_REQUIRED (-32002), wenn der Client keine Provenance liefert, die Guardian-Policy sie aber verlangt.
Failure Posture: fail-open ist der Default
Der Observed Agent muss für jeden gemeldeten Schritt auf die Entscheidung warten — bis zum ausgehandelten Timeout — und sie anwenden. Ein Framework, das Hooks sendet, das Verdikt aber ignoriert, ist nicht konform. Kommt keine verwertbare Entscheidung an, spricht die Spezifikation von einem decision failure: Der Guardian schweigt, der Transport bricht ab (abgelehnte Verbindung, TLS-Fehler, fehlerhafte Antwort) oder der Guardian liefert einen Fehler statt einer Entscheidung. In allen drei Fällen greift on_decision_failure, und der Standardwert ist proceed: Die Aktion läuft ungeprüft weiter. Fail-closed (deny) muss ein Deployment ausdrücklich konfigurieren.
Die Spezifikation benennt den Preis offen: Wer den Kanal stören kann, macht aus Kontrolle bloße Protokollierung. Als Gegengewicht gilt eine harte Pflicht — jeder Schritt, der ohne Entscheidung weiterläuft, muss als Audit-Event erfasst werden. Trifft eine Entscheidung doch noch innerhalb der Frist ein, muss der Agent sie befolgen, unabhängig von der Posture.
Startup-Posture: wenn schon der Handshake scheitert
Ist der Guardian beim Sessionstart nicht erreichbar oder antwortet er ohne ServerHello, gilt eine außerhalb des Protokolls konfigurierte Startup-Posture: proceed (die Session startet ungeschützt) oder refuse. Auch hier ist proceed der Default, damit ein Guardian-Ausfall keine neuen Sessions blockiert. Eine ungeschützt gestartete Session muss im eigenen Audit-Log des Deployments stehen. Eine ausdrückliche Ablehnung durch den Guardian, etwa SESSION_REFUSED, gilt dagegen als Entscheidung und nicht als Ausfall.
| Situation | Greifender Mechanismus | Default |
|---|---|---|
| Guardian beim Sessionstart nicht erreichbar | Startup-Posture (außerhalb des Protokolls konfiguriert) | proceed — Session läuft ungeschützt, Audit-Pflicht |
| Guardian schweigt, Transportfehler oder Fehlerantwort während der Session | on_decision_failure aus dem ServerHello | proceed — Schritt läuft ungeprüft, Audit-Pflicht |
| ASK-Frist läuft ab | timeout_disposition | deny |
| DEFER-Frist läuft ab | timeout_decision | deny |
| Ungültiges modifications-Objekt | Kompositionsregel für MODIFY | Behandlung als deny |
| system/ping schlägt fehl | Signal auf Transportebene, kein Enforcement-Ereignis | keine Disposition |
Timeouts: kein Default in der Spezifikation
Einen numerischen Standard-Timeout legt die Spezifikation nicht fest. timeout_config.default_ms ist im ServerHello Pflicht, der Wert aber Sache des Deployments; per_method_ms erlaubt abweichende Werte je Methode. Das Handshake-Schema erinnert daran, dass jede Millisekunde Timeout im ungünstigsten Fall Latenz für den Schritt bedeutet, und empfiehlt, Fristen je Methode an der Latenztoleranz auszurichten statt an einem großzügigen Pauschalwert. Die Referenzimplementierung nutzt 5000 ms — ein Implementierungswert, keine Vorgabe. Ein sensitivitätsbasiertes Timeout-Modell ist für v0.2 vorgesehen. Zur Begriffsklärung: ACS_ON_DECISION_FAILURE ist eine Umgebungsvariable des Referenz-Guardians, die den Wert von on_decision_failure setzt — kein Feld der Spezifikation.
Ping beweist keine Durchsetzung
system/ping ist eine reine Liveness-Probe: Der Guardian muss immer allow antworten, der Ping braucht keine Signatur und wird nicht in die Audit-Kette geschrieben. Ein Guardian kann also Pings beantworten und zugleich jeden signierten Hook ablehnen. Die Spezifikation empfiehlt deshalb, Decision Failures auf dem Hook-Pfad direkt zu überwachen.
Guardian-Architektur: deterministisch zuerst, LLM optional
Ein Guardian Agent ist kein zweites Sprachmodell, das dem ersten über die Schulter schaut. ACS legt eine feste Reihenfolge fest: Zuerst entscheidet deterministischer Policy-Code, ein LLM darf nur nachgelagert und ohne Einblick in die Policy mitwirken.
Zwei Schichten, feste Reihenfolge
Die deterministische Schicht bewertet jeden Hook zuerst. Sie entscheidet selbst oder delegiert an die Agent-Schicht — laut Spezifikation gesteuert über eine Chain-Konfiguration mit den Modi „*“, on_ask oder musterbasiert. Ein Format für diese Konfiguration definiert v0.1 allerdings nicht. Die Agent-Schicht erhält dieselben Eingaben plus das Zwischenergebnis der deterministischen Schicht, aber niemals den Policy-Code. Ihre Antwort muss auf dem Rückweg erneut die deterministische Schicht passieren.
- 1Hook trifft ein
Request-Envelope, SessionContext, Intent und, falls vorhanden, Provenance gehen an die Policy-Engine.
- 2Deterministische Bewertung
Policy-as-Code — in v0.1 mit OPA/Rego als Startreferenz — liefert allow, deny, modify, ask oder defer oder delegiert.
- 3Optionale LLM-Schicht
Bewertet Fälle, die deterministisch nicht entscheidbar sind; behandelt nicht vertrauenswürdige Felder als Daten und sieht keinen Policy-Code.
- 4Rückprüfung und Antwort
Das Ergebnis passiert erneut die deterministische Schicht; metadata.evaluator weist deterministic, agent oder composite aus.
- 5Protokollierung
Jede Entscheidung wird mit Begründung, Modellkennung und, sofern verfügbar, Konfidenz geloggt.
Policy-Engine: Schnittstelle statt Produkt
ACS definiert die Schnittstelle zur deterministischen Engine, nicht die Engine selbst. Die Eingabe besteht aus Request-Envelope, SessionContext, Intent und Provenance, die Ausgabe aus einem Entscheidungs-Envelope, optional mit einer Delegation an die Agent-Schicht (delegate_to). Zusätzlich setzt ACS Konventionen, darunter: keine externen HTTP-Aufrufe in kanonischen Policies. Das stützt Determinismus und Latenz.
| Engine | Status in ACS | Einordnung |
|---|---|---|
| OPA / Rego | Startreferenz für v0.1 | CNCF-Projekt mit Status Graduated (seit 29.01.2021), Apache-2.0; die Referenzimplementierung nutzt das mit dem Agent Governance Toolkit gebündelte OPA |
| Cedar | Fast-follow für v0.2 (Cedar-Binding) | Policy-Sprache von AWS, Apache-2.0, CNCF Sandbox (seit 08.10.2025); Grundlage von Policy in Amazon Bedrock AgentCore |
| Eigene Engine | Zulässig, wenn sie die Schnittstelle einhält | Etwa domänenspezifische Logik oder Klassifikatoren hinter derselben Schnittstelle |
README und Abschnitt 2 der Spezifikation nennen Cedar und Rego in einem Atemzug; den Status je Version legt Abschnitt 12.1 fest.
Pflichten der LLM-Schicht
- Nicht vertrauenswürdige Daten sind Daten, keine Anweisungen; die betreffenden Felder müssen im Prompt umhüllt oder gequotet werden.
- Kein Zugriff auf den Policy-Code der deterministischen Schicht.
- Jede Entscheidung mit Begründung, Modellkennung und Konfidenz (wenn verfügbar) protokollieren; bei evaluator agent oder composite ist model_id anzugeben.
- Fristen folgen dem im Handshake ausgehandelten timeout_config.
- Die gesamte Schicht ist in v0.1.0 optional: Rein deterministische Deployments sind voll konform.
Kontrollparadigmen ohne eigene Wire-Erweiterung
Die Spezifikation nennt vier Paradigmen als Ziele für v0.1. Ein Guardian drückt sie über dieselben Felder aus — reason_codes, policy_references, policy_data und cited_provenance_ids. Kombiniert ein Deployment mehrere Paradigmen, darf eine einzige Entscheidung alle zitieren.
IBAC · intentbasierte Autorisierung
Der Intent einer Session wird festgelegt, bevor nicht vertrauenswürdige Daten einfließen; danach wächst er nur über eine auditierte Freigabe (intent_extension). Eine Abweichung kann als defer enden; policy_data nennt dann die angefragte Capability und den nächstgelegenen Eintrag aus Intent.parsed. Kommt ohne acs-provenance aus.
FIDES · Informationsflusskontrolle
Forschungsansatz mit Vertraulichkeits- und Integritätslabels (arXiv 2505.23643, 2025). Eine Ablehnung zitiert die verletzende Lineage in cited_provenance_ids und den betroffenen Argumentpfad in policy_data.
CaMeL · Programmsynthese
Forschungsansatz, der Kontroll- und Datenfluss aus der vertrauenswürdigen Anfrage ableitet (arXiv 2503.18813, 2025). Der Guardian prüft, ob Argumente aus nicht vertrauenswürdiger Herkunft stammen.
AARM-artig · kumulativer Kontext
Bewertet den bisherigen Sessionverlauf statt des einzelnen Schritts. Eine Ablehnung zitiert den frühesten nicht vertrauenswürdigen Schritt und gibt den relevanten Rückblick in policy_data wieder.
FIDES, CaMeL und AARM-artige Regeln brauchen Herkunftsangaben und setzen deshalb das Profil acs-provenance voraus; reines IBAC nicht. ACS implementiert keines dieser Verfahren selbst, es liefert die Felder, über die ein Guardian sie anwendet und begründet. ACS verhindert also keine Prompt Injection — es schafft den Kontrollpunkt, an dem Policies gegen deren Folgen greifen.
Betrieb: Latenz und Verfügbarkeit (VamiSec-Einschätzung)
- Latenz: Jede Prüfung liegt im kritischen Pfad des Agenten. Halten Sie die deterministische Schicht lokal und ohne externe Aufrufe, reservieren Sie die LLM-Schicht für wenige unklare Fälle und messen Sie evaluation_duration_ms je Methode.
- Verfügbarkeit: Mit fail-closed wird der Guardian betriebskritisch. Betreiben Sie ihn nah am Agenten und redundant. Die Referenzimplementierung dokumentiert das Risiko selbst: Sie schreibt Logs synchron im Entscheidungspfad, sodass eine langsame Festplatte jede laufende Entscheidung blockiert.
- Policy-Lifecycle: Versionieren Sie Policies und geben Sie policy_version in jeder Entscheidung zurück; die Spezifikation sieht das für die Rekonstruktion historischer Policy-Stände vor.
- Abgrenzung: Der Guardian ersetzt weder Sandbox noch IAM, Secrets-Management oder Egress-Firewall. Aktionen, die toolCallRequest umgehen, bleiben für ihn unsichtbar.
Die einzige Referenzimplementierung betreibt Microsofts Agent Governance Toolkit unverändert hinter dem ACS-Wire. Sie ist ausdrücklich ein Proof of Concept: zwei von 19 Hooks live, keine HMAC-Signatur, Default fail-open. Sie demonstriert das Muster für zwei Clients (Claude Code und OpenCode), ist aber nicht für den Produktivbetrieb gedacht.
Sicherheit des Kanals: Signaturen, Replay-Schutz und Audit-Chain
Ein Guardian Agent ist nur so vertrauenswürdig wie der Kanal, über den er entscheidet. ACS-Core verlangt deshalb drei Mechanismen: eine Signatur auf jedem Request und jeder Response, Schutz gegen wiederholte Nachrichten und eine hash-verkettete Audit-Chain. Dieses Kapitel zeigt, was die Mechanismen leisten — und wo ihre Grenze verläuft.
Zwischen Observed Agent und Guardian Agent laufen Entscheidungen, die Aktionen freigeben oder blockieren. Wer diesen Kanal manipulieren kann, verwandelt ein deny in ein allow oder spielt eine alte Freigabe erneut ein. Der OWASP Agent Control Standard (ACS) behandelt die Kanalsicherheit daher als Teil der Pflicht-Baseline ACS-Core, nicht als optionales Profil.
Baseline-Signatur: HMAC-SHA256 mit Session-Schlüssel
ACS-Core verlangt auf jedem Request und jeder Response eine Signatur über das kanonische Envelope. Die Baseline, die diese Pflicht erfüllt, ist HMAC-SHA256. Der Schlüssel wird pro Session per HKDF abgeleitet — aus Schlüsselmaterial des Deployments (ein Pre-Shared Secret oder eine Kanalbindung wie ein TLS-Exporter) zusammen mit der session_id. Einen Schlüsselaustausch im Protokoll definiert v0.1 nicht. Signiert wird die RFC-8785-Kanonisierung (JCS) des Envelopes ohne das Feld signature; der Empfänger berechnet diese Form neu und weist eine nicht passende Signatur zurück. TLS allein genügt ausdrücklich nicht, weil es keine einzelne Nachricht für das Audit bindet. Ausgenommen von der Signaturpflicht ist nur die Liveness-Methode system/ping.
Zwei Details sind für die Architektur relevant. Im JSON-Schema ist signature optional, normativ in ACS-Core aber Pflicht — eine reine Schema-Validierung erkennt fehlende Signaturen also nicht. Und die Spezifikation legt Salt, Info-String, Hash-Funktion und Schlüssellänge für HKDF nicht fest; zwei Implementierungen können daher unterschiedliche Schlüssel ableiten. Nach unserer Einschätzung gehören diese Parameter in die Schnittstellenvereinbarung zwischen Plattform- und Guardian-Betrieb.
Replay-Schutz
Jeder Request trägt eine request_id (UUID), einen timestamp und optional eine nonce. Der Guardian muss Requests ablehnen, deren Zeitstempel außerhalb des ausgehandelten Fensters skew_window_ms liegt (empfohlener Default 300 000 ms, also fünf Minuten), und doppelte request_id-Werte innerhalb einer Session zurückweisen; doppelte Nonces sollte er ablehnen. Daraus folgt eine leicht übersehene Betriebsanforderung: synchronisierte Uhren auf beiden Seiten.
| Code | Name | Auslöser | Reaktion des Observed Agent laut Spec |
|---|---|---|---|
| -32000 | SESSION_REFUSED | Policy verweigert die Session, kein spezifischerer Code passt (z. B. unzulässige agent_id) | Kein erneuter Versuch ohne Policy- oder Konfigurationsänderung |
| -32001 | UNSUPPORTED_VERSION | Keine gemeinsame acs_version im Handshake | Handshake mit unterstützter Version wiederholen |
| -32002 | PROVENANCE_REQUIRED | Policy verlangt Provenance, der Client meldet provenance_producer: none | Als deterministic-Producer neu verbinden oder einen Guardian ohne Provenance-Pflicht nutzen |
| -32003 | CAPABILITY_NOT_NEGOTIATED | Methode oder Profil genutzt, das der Handshake nicht ausgehandelt hat | Methode bzw. Profil neu aushandeln |
| -32004 | SIGNATURE_INVALID | Pflicht-Signatur fehlt, ist fehlerhaft oder nicht verifizierbar | Neu signieren, ggf. key_id neu auflösen |
| -32005 | REPLAY_DETECTED | Doppelte request_id oder nonce in der Session | Neue request_id und nonce erzeugen |
| -32006 | TIMESTAMP_OUT_OF_WINDOW | Zeitstempel außerhalb von skew_window_ms | Uhrdrift korrigieren |
| -32007 | CHAIN_MISMATCH | chain_hash des Clients weicht vom Kettenkopf des Guardians ab | Sessionzustand neu laden; dauerhafte Abweichung ist ein Integritätsereignis |
Eigene Kurzfassung der ACS-Fehlerregistry (Spezifikation v0.1.0, §17.1). system/ping darf keinen ACS-spezifischen Fehler zurückgeben.
Audit-Chain: Hash-Kette mit veröffentlichtem Kopf
Der Guardian führt pro Session einen SessionContext, eine append-only-Kette von ContextEntries. Jeder Eintrag erhält einen entry_hash: SHA-256 über die JCS-kanonisierte Entry ohne Hash-Felder, verkettet mit dem Hash des Vorgängers; der erste Eintrag hat previous_hash null. Andere Kanonisierungen sind in v0.1 nicht zulässig. Entscheidend ist die Veröffentlichung: Für jeden content-bearing Step muss der Guardian den aktuellen chain_hash in seiner Response mitliefern, gedeckt durch die Response-Signatur. Die Spezifikation nennt den Grund offen: Hielte der Guardian den Kettenkopf privat, könnte er etwa ein deny streichen, die Kette ab dieser Stelle neu berechnen und später eine bereinigte Historie vorlegen. Wer den Verkehr mitschneidet, erkennt eine nachträglich umgeschriebene Kette.
Was die Kette belegt — und was nicht
- Pflichtfelder eines ContextEntry sind nur entry_id, step_id, step_type und entry_hash. Der request_hash über den Request-Inhalt ist in ACS-Core nur empfohlen (SHOULD) und erst im Profil acs-audit Pflicht. Ohne ihn belegt die Kette, dass ein Schritt stattfand, aber nicht, was angefragt wurde.
- Das ContextEntry-Schema kennt kein Feld für Disposition, Begründung oder Approver. Entscheidungen hält ACS normativ als Trace-Events fest (Profil acs-trace, Kapitel 9); nur eine Intent-Erweiterung schreibt einen eigenen Eintrag mit der Approver-Identität (Kapitel 11).
- HMAC ist symmetrisch: Der Guardian hält den Schlüssel und könnte einen umgeschriebenen Kettenkopf neu signieren. Geschützt ist der Kanal gegen Manipulation im Netz, nicht gegen einen kompromittierten Guardian.
- Nichtabstreitbarkeit gegenüber Dritten entsteht erst mit acs-crypto: mindestens ML-DSA-65 (MUST), SLH-DSA-128s (SHOULD), Hybridverfahren optional.
- Einen Abgleich zwischen mehreren Guardians gibt es in v0.1 nicht (Issue #18, zurückgestellt).
Trace: OpenTelemetry und OCSF im SOC
Mit dem Trace-Pillar landen Agentenaktionen und Guardian-Entscheidungen im vorhandenen Observability- und SIEM-Stack. ACS erfindet dafür kein neues Format, sondern liefert ein Vokabular für OpenTelemetry und OCSF. Für das SOC zählt, welche Klassen ankommen, wie verlässlich sie sind und wo das Mapping noch Lücken hat.
Der normative Beitrag von Trace ist das Vokabular: Span-Namen, Attribut-Schlüssel, Event-Klassen und die Zuordnung von Dispositions zu Schweregraden. Übertragen wird per OTLP (gRPC oder HTTP) an bestehende Backends; der Wire-Namensraum trace/* ist in v0.1.0 nur reserviert. Erklärtes Ziel ist, dass ACS-Events ohne Spezialparser in SIEM-Pipelines passen. Die OTel- und die OCSF-Erweiterung tragen im Repository den Status „Working draft“. Trace ist das optionale Profil acs-trace. Wer es beansprucht, muss für jeden unterstützten Step mindestens eines der beiden Formate mit Pflichtattributen ausgeben, jede Entscheidung mit Disposition, Evaluator und — falls vorhanden — Begründung festhalten und Provenance-Fakten aus dem Hook auf das Event übertragen.
OpenTelemetry: Spans pro Hook, Entscheidungen als Span-Event
Die Span-Hierarchie ist deterministisch: ein Root-Span acs.session pro Session, darunter acs.turn je Turn und ein Step-Span je Hook. Entscheidungen sind keine eigenen Spans, sondern ein Span-Event acs.decision am Step-Span; Verdikt und gesteuerte Aktion teilen so denselben Elternkontext. Pflichtattribute des Events sind acs.decision und acs.evaluator (deterministic, agent oder composite). Für Tool-Aufrufe verwendet ACS die Span-Namen gen_ai.tool.call und gen_ai.tool.result. Achtung: In den OpenTelemetry-GenAI-Konventionen (Stand Oktober 2026 im Status „Development“) ist gen_ai.tool.call nur ein Attribut-Präfix, der empfohlene Span-Name lautet dort execute_tool {gen_ai.tool.name}. Auf diese Konventionen ausgerichtete Dashboards und Abfragen passen daher nicht ohne Anpassung zu ACS-Tool-Spans.
| ACS-Ereignis | OCSF-Klasse (UID) | Hinweis |
|---|---|---|
| sessionStart, sessionEnd, subagentStart, subagentStop | 3002 Authentication | Abgebildet als Logon bzw. Logoff |
| userMessage, agentResponse, agentTrigger, turnStart, turnEnd | 6002 Application Lifecycle | ACS nennt die Klasse „Application Activity“ — in OCSF ist das der Name der Kategorie 6 |
| toolCallRequest, toolCallResult | 1007 Process Activity | Zentrale Quelle für Agentenaktionen |
| knowledgeRetrieval, memoryContextRetrieval, memoryStore, preCompact, postCompact | 6005 Datastore Activity | Compaction mit activity_id 99, in OCSF generisch „Other“ |
| Entscheidungen deny, modify, ask, defer | 2004 Detection Finding | severity_id: modify 2, ask und defer 3, deny 4; allow normalerweise nur informativ (1) |
| agbom/snapshot, agbom/changed | 5001 Device Inventory Info | ACS nennt die Klasse „Inventory Info“ |
Klassen laut ACS-Mapping (OCSF 1.5+), Klassennamen nach OCSF 1.5.0. Agenten erscheinen als actor.user.type „AI Agent“; ACS-spezifische Felder wie reason_codes und Policy-Referenzen liegen in unmapped.acs.
SIEM-Use-Cases für Agenten
| Use-Case | Datengrundlage | Mögliche Reaktion |
|---|---|---|
| Guardian-Bypass (fail-open) | Pflicht-Audit-Event für jeden Step ohne Entscheidung; ungeschützter Session-Start | Alarm ab dem ersten Ereignis bei Hochrisiko-Agenten; Verfügbarkeit des Guardians prüfen |
| Häufung von deny | Detection Finding 2004 mit severity_id 4, reason_codes, policy_id | Session-Review; Hinweis auf Prompt Injection oder Fehlkonfiguration |
| Freigabelast | ask-Findings (severity_id 3) je Zeitraum, ergänzt um Approver-Angaben aus ask_details | Schwellen und Approver-Kapazität anpassen, Freigabemüdigkeit vorbeugen |
| Inventar-Drift | agbom/changed mit reason user_action oder discovery (nur mit acs-inspect-dynamic) | Abgleich mit Freigabeliste, ggf. Policy verschärfen |
| Integritätsereignis | CHAIN_MISMATCH bzw. reason_code chain_mismatch | Als Integritätsereignis untersuchen, nicht als transienten Fehler abtun |
| Agent oder Mensch | actor.user.type „AI Agent“ | Getrennte Baselines, Korrelation mit menschlichen Identitäten |
VamiSec-Ableitung — ACS definiert keine Detection-Logik und kein Response-Playbook. Für das fail-open-Audit-Event fehlt laut Issue #37 noch ein konformes Format; Regeln daher gegen die JSON-Mappings bauen und mit echten Daten testen.
Grenzen, die Sie einplanen sollten
- Best effort: Trace darf die Durchsetzung nie blockieren. Fällt die Senke aus, geht die Entscheidung trotzdem an den Observed Agent — Telemetrie kann also lückenhaft sein.
- Selbstauskunft: Trace-Events entstehen in der beobachteten Umgebung und werden erst durch Attestierung einer externen Partei zu Evidenz.
- Skill-Lücke: Die Mappings decken 16 der 19 nativen Hooks plus die beiden agbom-Methoden ab. skillRegister, skillLoad und skillUnload haben weder ein OTel- noch ein OCSF-Mapping.
- Doku-Drift: Die Provenance-Ablage in OCSF ist widersprüchlich (enrichments im normativen Mapping, unmapped.acs.provenance im Leitfaden). Die Beispielseite mit Splunk- und Elastic-Abfragen nutzt noch den Altnamen ASOP und OCSF 1.0.
- Datenschutz: Spans können Prompts und Tool-Argumente enthalten. Die Spezifikation empfiehlt Redaction schon beim Emittieren; nach unserer Einschätzung gehört das verbindlich in das Logging-Konzept.
Inspect: AgBOM — das Laufzeit-Inventar des Agenten
Agenten ändern ihre Fähigkeiten zur Laufzeit: neues Modell, nachgeladener MCP-Server, frisch registrierter Skill. Die AgBOM (Agent Bill of Materials) macht diesen Zustand pro Session abfragbar und entscheidungsfähig. Sie ist kein neues SBOM-Format — und sie ersetzt auch keines.
Die AgBOM ist laut Spezifikation ein abfragbares, dynamisches Inventar der Komponenten, die ein Observed Agent nutzt. Die Begründung ist präzise: Jede Policy, die davon abhängt, was ein Agent ist — welches Modell, welche Tools —, wird ohne Inventar unüberprüfbar. Hängt eine Guardian-Policy vom Inventar ab, etwa beim Bann eines Modells oder Tools, muss das Deployment das Profil acs-inspect umsetzen. Die kanonische AgBOM ist ein Komponentengraph, abgelegt als flache Liste mit Referenzen per ID, damit sich Stände per Diff vergleichen lassen.
Acht Komponententypen
| Typ | Was erfasst wird (Auswahl der Pflichtfelder) |
|---|---|
| model | Name, Version, Provider, Endpoint und Kontextfenster; optional ein Konfigurations-Snapshot |
| mcp_server | Name, Version, Endpoint und die angebotenen Tools |
| a2a_peer | Endpoint und Protokollversion |
| tool | Name, Version, Provider und abstrakte Capability, z. B. filesystem.delete oder network.egress |
| knowledge_source | Name und Quelltyp (vector_db, search_index, knowledge_base, web_search, other) |
| memory_store | Name, Scope (session, user, tenant, global) und Speichertyp |
| agent_capability | Name und Beschreibung einer passiven Fähigkeitsgruppe |
| skill | Name, Beschreibung sowie Referenz und Integritäts-Digest des ladbaren Artefakts |
Normative Quelle ist das Schema component.json. Einzelne Doku-Seiten nennen sechs oder sieben Typen; maßgeblich sind acht.
snapshot und changed: zwei Wire-Methoden
agbom/snapshot sendet der Observed Agent einmal pro Session nach sessionStart und vor dem ersten content-bearing Hook; die Nachricht enthält die vollständige AgBOM. agbom/changed meldet Mutationen — hinzugefügte, entfernte oder geänderte Komponenten als Diff oder als vollständigen Snapshot — und kann eine Ursache tragen, etwa component_upgraded, discovery oder user_action. Beide Ereignisse gehen in die Audit-Chain. Der Guardian darf per deny eine Session mit gebannter Komponente ablehnen oder einen Hot-Swap blockieren.
Für die Profilwahl wichtig: Wer nur acs-inspect beansprucht, liefert genau einen Snapshot pro Session und verfolgt keine Änderungen. Laufzeitänderungen werden erst mit acs-inspect-dynamic sichtbar. Die Snapshot-Auslöser renegotiation und policy_request verweisen auf Mechanismen, die erst mit v0.2 spezifiziert werden sollen — in v0.1 ist praktisch nur session_start belastbar. Jede Komponente soll außerdem eine registration_provenance tragen (unter acs-provenance Pflicht). Damit lässt sich unterscheiden, ob eine Komponente aus der Konfiguration stammt oder zur Laufzeit hinzukam.
Serialisierungen: CycloneDX, SPDX, SWID
Auf dem Wire geht immer die kanonische Form; der Guardian rendert Serialisierungen auf Anfrage für nachgelagerte Werkzeuge. Ein acs-inspect-Deployment muss mindestens eine davon anbieten: CycloneDX 1.6, SPDX 3.0 oder SWID (ISO/IEC 19770-2). Alle drei Mappings haben den Status „Working draft“; die Abbildungen auf CycloneDX und SPDX sind teils nicht schema-valide. Das CycloneDX-Mapping nutzt Typnamen wie ai-model oder service als Komponententyp, die CycloneDX 1.6 so nicht kennt; das SPDX-Mapping verwendet Klassen und Beziehungen, die es in SPDX 3.0.1 nicht gibt. Planen Sie Exporte deshalb mit eigener Validierung. CycloneDX selbst liegt seit Oktober 2025 in Version 1.7 vor.
Abgrenzung: AgBOM, AI-SBOM, CRA-SBOM
AgBOM (ACS)
Laufzeitbezogen und pro Session, in der Audit-Chain verankert und entscheidungsfähig. Sie inventarisiert, was der Observed Agent nach eigener Auskunft in dieser Session nutzt; unter acs-provenance zusätzlich die Herkunft jeder Registrierung.
AI-SBOM / ML-BOM
Beschreibt Modelle und Datensätze, etwa mit CycloneDX ML-BOM oder dem AI-Profil von SPDX 3.0. Der Begriff AI-BOM kommt in ACS nicht vor; die Gegenüberstellung ist unsere Einordnung.
CRA-SBOM
Ab 11.12.2027 Pflicht für Hersteller von Produkten mit digitalen Elementen (Anhang I Teil II Nr. 1 CRA): maschinenlesbar, mindestens die Top-Level-Abhängigkeiten. Die AgBOM kann diese Build-Time-SBOM um Laufzeitkomponenten ergänzen, ersetzt sie aber nicht.
Provenance und Identity: Herkunft der Daten, Grenzen der Identität
Ob eine Aktion zulässig ist, hängt oft davon ab, woher die Daten stammen, die sie auslösen. Provenance liefert dem Guardian diese Herkunftsfakten feldgenau, Session Intent schreibt den Zweck fest. Der Identity-Teil von ACS beschreibt dagegen bisher vor allem offene Fragen.
Feld-Provenance: Fakten statt Vertrauenslabel
Provenance beantwortet, woher ein Datenelement kam und wie es an seinen Ort gelangte. Ein Provenance-Objekt trägt eine provenance_id, ein origin mit einem von sieben Werten — user_input, system, tool_output, retrieved, agent_generated, a2a_inbound, external — sowie optional source_id (etwa Tool-Name, URL oder Pfad) und derived_from als Liste der Vorgänger. Die Angaben hängen an datentragenden Feldern, bei toolCallRequest sogar an jedem einzelnen Argument. Eine Policy kann so einen konkreten Datenfluss treffen statt den ganzen Aufruf.
- Framework-gesetzt: origin, source_id und derived_from vergibt deterministischer Code außerhalb des LLM-Ausgabepfads. Das LLM anzuweisen, Provenance zu erzeugen, ist nicht konform.
- Transitive Lineage: Abgeleitete Daten erben die Herkunft ihrer Eingaben, auch über Zusammenfassung und Compaction hinweg. Eine Zusammenfassung fremder Tool-Ausgaben bleibt damit als solche erkennbar.
- Kein Trust-Feld: Ein trust-Wert ist in v0.1 nur reserviert, nicht schematisiert. Der Guardian leitet Vertrauen aus origin und source_id gegen seine Policy ab; durch LLM-Verarbeitung wird nicht vertrauenswürdiges Material nie vertrauenswürdig (Monotonie-Regel).
- Alles oder nichts: Mit provenance_producer: deterministic muss jedes datentragende Feld Provenance tragen; Teilbefüllung ist nicht konform. Meldet der Client provenance_producer: none, obwohl die Policy Provenance verlangt, lehnt der Guardian die Session schon im Handshake mit PROVENANCE_REQUIRED ab.
Provenance gehört nicht zu ACS-Core, sondern zum Profil acs-provenance. Es ist Voraussetzung für Durchsetzungsparadigmen wie FIDES, CaMeL und AARM, nicht aber für reines intent-basiertes Autorisieren (IBAC). ACS verhindert keine Prompt Injection. Es schafft den Kontrollpunkt, an dem eine Policy die Folgen begrenzen kann — etwa indem sie eine E-Mail blockiert, deren Empfänger und Inhalt aus einem nicht vertrauenswürdigen Retrieval-Ergebnis stammen. Sensitivitäts- oder IFC-Labels sind nicht Teil des Standards; sie liegen beim Guardian oder Deployment.
Session Intent: der festgeschriebene Zweck
Intent ist in ACS kein Wire-Format, sondern ein Governance-Konzept: Er bindet Aktionen an einen autorisierten Zweck, und zwar bevor nicht vertrauenswürdige Daten Einfluss nehmen können. Intent.parsed, die für die Session autorisierte Capability-Menge, wird bei sessionStart oder beim ersten agentTrigger festgelegt. Danach dürfen weder das LLM noch Tool-Ausgaben noch Daten aus nicht vertrauenswürdigen Kanälen sie ändern; ist der Intent bei sessionStart gesetzt, muss ein späterer agentTrigger mit abweichendem Intent abgelehnt werden.
Der einzige konforme Weg zur Erweiterung ist eine intent_extension, die ein Approver über den ask-Ablauf zurückgibt — mit Pflichtangaben zu Capabilities und Scope. Bei scope this_request gilt die Erweiterung nur für die laufende Anfrage. Bei scope session hängt der Guardian die Capabilities an, schreibt einen ContextEntry vom Typ intent_extension mit der Approver-Identität und führt die Provenance der Erweiterung getrennt von der des ursprünglichen Intent. Unter scope_mode strict darf er keine Erweiterung honorieren, die die Policy im strikten Modus verbietet. Für CISOs ist das nach unserer Einschätzung der Hebel gegen schleichende Rechteausweitung: Jede Ausweitung braucht eine authentisierte Freigabe.
Identity: normativ schlank, vieles in Arbeit
Was normativ gilt
ACS schreibt keinen Authentifizierungsmechanismus vor; der genutzte wird im Handshake deklariert, Vertrauensschemata wie SPIFFE, OIDC oder PKI bleiben deployment-definiert. Pflicht sind die Authentifizierung von Approvern und die Trennung dreier Identitäten: Observed Agent, Guardian und Policy-Autor.
Was noch nicht bindet
Die Arbeitsdokumente des Identity-Workstreams nennen fünf Laufzeit-Herausforderungen; vier sind „Pending“, eine „Partially specified“. Formulierungen wie „Required by ACS“ für DPoP oder RAR binden nicht — das Projekt stellt selbst klar, dass ACS keinen Mechanismus vorschreibt. Identifier-Modell und Token-Laufzeiten sind nur vorgeschlagen.
Abgrenzung zu AIMS
Der IETF-Entwurf AIMS (draft-klrc-aiagent-auth) behandelt Identitätsausgabe, Credential-Bindung und Transport-Authentifizierung. ACS versteht sich als komplementär: Durchsetzung zur Laufzeit statt Ausstellung von Identitäten.
Die Signatur von ACS-Core authentisiert den Kanal zwischen Observed Agent und Guardian symmetrisch. Sie ist weder eine Authentifizierung des Principals noch Nichtabstreitbarkeit — beides sollten Sie in Architektur und Nachweisen nicht vermischen.
MCP, A2A und Skills: Protokolle und ladbare Fähigkeiten
Agenten sprechen mit Tools über MCP, mit anderen Agenten über A2A und laden Skills als ausführbare Bausteine. ACS v0.1 deckt diese drei Flächen unterschiedlich weit ab: MCP-Wrapping ist spezifiziert, A2A nur reserviert, der Skill-Lebenszyklus hat eigene Hooks.
MCP-Wrapping: spezifiziert, mit offener Pflichtfrage
Der Namespace protocols/MCP/* ist der kanonische Weg, MCP-Nachrichten zum Guardian zu tragen, etwa protocols/MCP/tools/call. Die MCP-Nachricht bleibt dabei unverändert; ACS legt Envelope, Entscheidungsvertrag und Audit-Chain-Regeln darüber. Der Ablauf ist zweistufig: Der Agent legt die gewrappte Anfrage dem Guardian vor, setzt dessen Entscheidung durch, leitet die Nachricht laut Ablaufbeschreibung nach einem allow an den MCP-Server weiter und lässt auch dessen Antwort prüfen, bevor er sie verarbeitet.
MCP-Tool-Aufrufe (tools/call) darf ein Deployment in die generischen Hooks steps/toolCallRequest und steps/toolCallResult zusammenführen, wenn Policies auf Tool-Ebene genügen. Das Wrapping soll zum Einsatz kommen, wenn die Policy MCP-spezifische Unterschiede braucht: Capability-Aushandlung bei initialize, serverseitige Prompt-Vorlagen (prompts/get), Ressourcenzugriffe (resources/read) und Benachrichtigungen (notifications/*). Unabhängig davon gilt: Frameworks müssen toolCallRequest für jede Aktion feuern, die den Reasoning-Kontext verlässt — auch für eingebaute Datei-, Netzwerk- oder Shell-Operationen.
MCP 2026-07-28: die Spec-Prosa hinkt hinterher
Seit dem 28.07.2026 ist die MCP-Revision 2026-07-28 aktuell (Stand Oktober 2026). Sie macht den Protokollkern zustandslos, schafft den initialize-Handshake ab und erklärt unter anderem Sampling und Roots für veraltet. Der ACS-Namespace protocols/MCP/* ist versionsneutral; die Revision 2025-06-18 erscheint in der Spezifikation nur als Beispiel. Die Prosa setzt aber noch die ältere Semantik voraus und nennt die initialize-Aushandlung ausdrücklich als zu steuernden Punkt. Ob das die Wrapper praktisch beeinträchtigt, lässt die Spezifikation offen; eine belastbare Analyse liegt uns nicht vor. Nach unserer Einschätzung sollten MCP-lastige Architekturen die generischen Tool-Hooks als primären Kontrollpunkt einplanen.
A2A: reserviert für v0.2
Der Namespace protocols/A2A/* ist in v0.1 nur reserviert; normative Wrapping-Semantik ist für v0.2 vorgesehen (Zielmarke für v0.2.0: März 2027). Die A2A-Seiten im Repository stammen aus der AOS-Zeit 2025 und sind nicht schema-kompatibel. Sichtbar werden A2A-Beziehungen heute nur indirekt: über agentTrigger mit trigger_type a2a_inbound und über a2a_peer-Komponenten in der AgBOM. In-Process-Subagenten deckt ACS dagegen mit subagentStart und subagentStop ab; jeder Subagent erhält eine eigene Session mit eigener Audit-Chain, die der Parent über den final_chain_hash referenziert, ohne die Ketten zu verschmelzen.
Skill-Lebenszyklus: register, load, unload
| Hook | Zweck | Optionen des Guardians |
|---|---|---|
| steps/skillRegister | Statisches Prüftor: Der Guardian sieht die gesamte Skill-Definition, bevor eine ihrer Aktionen läuft. Die Freigabe gilt für das Paar (skill_id, digest). | allow oder deny; ein abgelehnter Skill darf nicht ladbar werden. Deklarierte Capabilities soll er gegen die komponierten Tools prüfen und darf zu breite Deklarationen ablehnen. |
| steps/skillLoad | Laufzeit-Tor je Aktivierung; der load_path macht Kaskaden sichtbar (Skill A lädt B, B lädt C). | allow oder deny; Ladungen ohne zuordenbare Freigabe, mit abweichendem Digest oder außerhalb der deklarierten composed_skills soll er ablehnen. |
| steps/skillUnload | Hält das aktive Inventar aktuell; darf alternativ in agbom/changed aufgehen. | Nur Audit; wiederholtes Laden und Entladen ist laut Spezifikation ein beobachtenswertes Signal. |
Eigene Kurzfassung der Hook-Beschreibungen in ACS v0.1.0.
Der Digest deckt das vollständige ladbare Artefakt ab, einschließlich gebündelter Modellgewichte oder Adapter; in der AgBOM persistiert werden nur Referenz und Digest, nicht der Inhalt. Auf ein vom Framework gemeldetes digest_verified soll sich der Guardian nicht verlassen, sondern selbst gegen seine Freigabe vergleichen. Die Grenze benennt das Design-Proposal zum Skill-Lebenszyklus im Repository offen: Der Digest bindet das registrierte Artefakt, nicht Code, den ein Skill später nachlädt — solches Nachladen läuft als network.egress oder process.execute über die regulären Tool-Hooks. Marketplace-Scanning vor der Veröffentlichung ist nicht Teil von ACS, und für die drei Skill-Hooks fehlt noch ein Trace-Mapping (Kapitel 9).
Konformität und Reifegrad: was v0.1 leistet — und was nicht
ACS ist ein junges OWASP-Projekt in einem frühen Stadium. Für Architektur- und Beschaffungsentscheidungen zählt deshalb der nachprüfbare Stand: Spezifikation v0.1.0, Release 0.1.2, eine Referenzimplementierung als Proof of Concept und Konformität als Selbstdeklaration.
0.1.0Spezifikationsversion; Release 0.1.2, Tag vom 21.09.2026
2 von 19Hooks, die die Referenzimplementierung live evaluiert
7Konformitätsprofile; jeder Anspruch ist eine Selbstdeklaration
03/2027Zielmarke für v0.2.0; für v1.0 gibt es kein Datum
ACS ist ein Projekt des OWASP GenAI Security Project und laut eigenen OWASP-Nest-Metadaten auf Level 2 (Incubator) eingestuft; der Project Lead bezeichnet den Stand als „public preview“. ACS ist weder ein ISO-, IETF- noch W3C-Standard und auch keine harmonisierte Norm.
Was v0.1 bereits leistet
Trotz des frühen Stadiums liefert v0.1 Substanz: ein gemeinsames Vokabular aus 19 Hooks und fünf Dispositions, 44 veröffentlichte JSON-Schemas, eine klar beschriebene Failure Posture mit Auditpflicht für jeden Bypass und eine Spezifikation, die ihre eigenen Lücken offen benennt. Nach unserer Einschätzung reicht das, um Anbieter an einem offenen, gemeinsamen Maßstab zu messen und eigene Kontrollpunkte so zu schneiden, dass sie an spätere Versionen anschlussfähig bleiben — nicht aber, um sich auf Konformitätsetiketten zu verlassen.
Konformität ist Selbstdeklaration
Im Handshake erklärt der Observed Agent, welche Profile er unterstützt (profiles_supported), und der Guardian, welche er akzeptiert (profiles_accepted). Es gibt genau sieben Profile: acs-core als Pflicht sowie acs-trace, acs-inspect, acs-inspect-dynamic, acs-provenance, acs-crypto und acs-audit. Stufen oder Level existieren nicht. Wer Konformitätsansprüche prüft, beantwortet die Spezifikation selbst: in v0.1.0 niemand. Es gibt keine Testsuite, kein Register konformer Implementierungen und keine Stelle, die strittige Ansprüche klärt (Issue #19, offen, Priorität P1). ACS-Core garantiert zudem nur zweierlei — einen authentisierten Kanal und dass der Observed Agent die Entscheidungen des Guardians befolgt. Strenge Policies garantiert es nicht: Auch ein großzügiger Guardian ist konform.
Referenzimplementierung: der ehrliche Ist-Stand
Die einzige Referenzimplementierung ist ausdrücklich ein Proof of Concept. Sie betreibt Microsofts Agent Governance Toolkit (AGT) unverändert als Policy-Engine hinter dem ACS-Wire, mit Host-Anbindungen für Claude Code und OpenCode. Sie beansprucht acs-core nur eingeschränkt („qualified“) und keines der sechs optionalen Profile. Ein Interoperabilitäts-Benchmark mit AGT liegt nicht vor; er ist das Ziel des 90-Tage-Fensters seit dem Kick-off am 10.09.2026. Eine Unterstützung von ACS durch Microsoft lässt sich daraus nicht ableiten. Achtung Namensgleichheit: In der AGT-Dokumentation steht „ACS“ für Microsofts eigene „Agent Control Specification“ (02.06.2026), die Policy-Sprache von AGT — nicht für den OWASP-Standard.
| ACS-Core-Anforderung | Stand der Referenzimplementierung |
|---|---|
| Handshake handshake/hello | Bedient, aber das ServerHello besteht aus Konstanten; das ClientHello wird nicht gelesen |
| Mindestens sechs Hooks | 2 von 19 evaluiert: steps/toolCallRequest und steps/toolCallResult |
| Alle fünf Dispositions | allow, deny und modify vorhanden; ask ohne ask_details (schema-ungültig); defer wird nie erzeugt |
| chain_hash in Responses | Kette wird geführt, aber auf keiner Response veröffentlicht |
| Baseline-Signatur HMAC-SHA256 | Nicht implementiert; Wire unauthentisiert, Schutz nur durch Loopback-Bindung (Issue #70) |
| Replay-Schutz | Nicht implementiert |
| Decision Honoring, on_decision_failure | Auf beiden Hosts umgesetzt; Default proceed (fail-open), jeder Bypass wird auditiert (Issues #32, #37) |
| system/ping, protocols/MCP/* | Nicht implementiert |
Quelle: Selbstauskunft der Referenzimplementierung (reference-implementations/agt/README.md), Stand main-Branch vom 10.09.2026. Die Referenzimplementierung kam erst nach dem getaggten Release-Commit 0.1.2 ins Repository.
Offene Spec-Lücken mit Praxisrelevanz
- Default fail-open: on_decision_failure und Startup-Posture stehen auf proceed; fail-closed (deny bzw. refuse) müssen Sie bewusst konfigurieren.
- Kein Stopp-Mechanismus: v0.1 kennt keinen Kill-Switch; Unterbrechung (interruption) und Streaming sind für v0.2 vorgesehen. In v0.1 stoppt man einen Agenten nur schrittweise per deny.
- Pflichtumfang in Bewegung: Ein offener Vorschlag (PR #21) würde modify und system/ping auf SHOULD herabstufen.
- Interop-Lücken (eigene Analyse): HKDF-Parameter, die Signatur des Handshakes und die Eingabe für request_hash sind unterbestimmt.
- Doku-Drift: Einzelne Seiten nennen noch 16 statt 19 Hooks oder nur drei Dispositions. Normativ sind Spezifikation und Schemas.
Einführung in der Praxis und Regulatorik-Bezug
ACS ist kein Compliance-Werkzeug. Es liefert aber technische Bausteine, mit denen Sie die Nachweisführung für Pflichten aus AI Act, NIS2, DORA und CRA sowie für Anforderungen aus ISO/IEC 42001 unterstützen können. Dieses Kapitel ordnet die Bausteine den Anforderungen zu und skizziert einen Einstieg in fünf Schritten.
Vorweg drei Einordnungen. Erstens begründet ACS keine Konformitätsvermutung; der Spezifikationstext enthält keine Zuordnung zu AI Act, NIS2, DORA, CRA oder ISO/IEC 42001 — alle Zuordnungen unten sind VamiSec-Ableitungen. Zweitens sind KI-Agenten nicht per se Hochrisiko-Systeme. Die Hochrisiko-Pflichten aus Kapitel III Abschnitte 1–3 der VO (EU) 2024/1689 gelten nach dem Digital Omnibus (VO (EU) 2026/1744) ab 02.12.2027 für Anhang III und ab 02.08.2028 für Anhang I; Art. 50 gilt seit 02.08.2026. Drittens hängt jede Argumentation an den Profilen: ACS-Core allein enthält weder Trace noch AgBOM noch request_hash.
| Anforderung | ACS-Baustein (Profil) | Nachweisartefakt | Vorbehalt |
|---|---|---|---|
| AI Act Art. 12: automatische Aufzeichnung | Trace je Step und Decision-Events, Audit-Chain (acs-trace, acs-audit) | SIEM-Datenbestand, verifizierbare Hash-Kette | Trace ist Selbstauskunft; ACS-Core ohne Trace |
| AI Act Art. 14 Abs. 4 lit. d: übersteuern | ask an toolCallRequest mit menschlichem Approver und timeout_disposition deny (acs-trace) | Decision-Events mit ask_details, intent_extension-Einträge | Approver darf laut Spec auch agent oder service sein — per Policy ausschließen |
| AI Act Art. 14 Abs. 4 lit. e: anhalten | deny an sessionStart, turnStart, toolCallRequest; on_decision_failure deny, Startup-Posture refuse | Konfigurationsnachweis fail-closed, Protokoll einer Stopp-Übung | Kein Kill-Switch in v0.1; Default fail-open |
| AI Act Art. 26: Aufsicht, Überwachung, Logs ≥ 6 Monate | Authentisierte Approver, Guardian als Laufzeit-Monitor, Trace-Export | Approver-Rollenmatrix, Monitoring-Report, Retention-Policy | ACS regelt keine Aufbewahrung; Kompetenz bleibt organisatorisch |
| AI Act Art. 72: Post-Market-Monitoring | Trace-Kennzahlen, AgBOM (mcp_server, a2a_peer), Subagent-Hooks | PMM-Abschnitt „Agenten-Laufzeitdaten“ | Template der Kommission erst bis 02.09.2027 |
| NIS2 Art. 21 Abs. 2 / § 30 BSIG | Policy-as-Code (v0.1: OPA/Rego; Cedar-Binding für v0.2 geplant), Capability-Policies, AgBOM mit Skill-Digest | Freigegebener Policy-Code, Komponenten- und Lieferantenregister je Agent | Marketplace-Scanning nicht Teil von ACS |
| DORA Art. 8–10, RTS (EU) 2024/1774 Art. 12 | AgBOM als Inventar, Trace nach OCSF, signierter Chain-Head, fail-open-Audit-Events, timestamp und skew_window_ms | Erweitertes IKT-Asset-Register, Logging-Konzept, Zeitsync-Nachweis | HMAC schützt nicht gegen kompromittierten Guardian |
| CRA Anhang I: Logging, SBOM | Trace als Produktfunktion, AgBOM-Export (CycloneDX 1.6, SPDX 3.0) | Build-SBOM plus AgBOM-Export, Produktdokumentation | Nur für Agenten-Produkte, Anhang I gilt ab 11.12.2027; AgBOM ersetzt keine SBOM |
| ISO/IEC 42001 A.6.2.6, A.6.2.8, A.7.5, A.10.3 | Trace und Audit-Chain, acs-provenance, AgBOM | Event-Log-Konzept, Provenance-Nachweise, Lieferantenliste | Keine AI-Act-Konformitätsvermutung durch 42001 |
| NIST AI RMF MANAGE 2.4, MEASURE 2.4, GOVERN 1.6 | deny und ask, Trace, AgBOM | Deaktivierungskriterien, Monitoring-Plan, Inventar | Freiwilliger Rahmen |
VamiSec-Ableitung auf Basis ACS v0.1.0; weder OWASP noch Behörden haben diese Zuordnung vorgenommen. Banken und Versicherer sollten primär über DORA argumentieren, denn die Überwachungspflicht nach Art. 26 Abs. 5 AI Act gilt über die Finanz-Governance als erfüllt. Für Finanzunternehmen mit vereinfachtem IKT-Risikomanagementrahmen (Art. 16 DORA) gilt Titel III der RTS statt Art. 12.
Einstieg in fünf Schritten
- 1InventarAgenten erfassen und einstufen
Erfassen Sie Agenten, Modelle, Tools, MCP-Server und Skills und klären Sie je Einsatz die Einstufung nach AI Act. Ergebnis: ein Agenten-Register mit Risikoklasse, Verantwortlichen und Datenzugriffen.
- 2ArchitekturKontrollpunkte und Profile festlegen
Prüfen Sie, welche Hooks Ihre Plattform tatsächlich feuert und welche der Guardian im Handshake unter methods_evaluated bestätigt: Alles andere gilt als allow-by-default und ist ungeschützt. Wählen Sie Profile nach Nachweisbedarf, etwa acs-core plus acs-trace und acs-audit für Logging-Pflichten.
- 3PolicyPolicies als Code formulieren
Die deterministische Schicht läuft zuerst (v0.1-Referenz: OPA/Rego). Formulieren Sie Regeln für destruktive Befehle, Egress und Zahlungen, verlangen Sie für konsequenzreiche Aktionen ask mit menschlichem Approver und timeout_disposition deny und referenzieren Sie Policy-Versionen in policy_references.
- 4BetriebFailure Posture entscheiden und testen
Setzen Sie für Agenten mit hohem Schadenspotenzial on_decision_failure deny und die Startup-Posture refuse. Testen Sie Guardian-Ausfall, Replay und Signaturfehler und überwachen Sie Decision-Failures direkt, denn ein erfolgreicher Ping beweist keine gesunde Durchsetzung.
- 5NachweisTrace anbinden und Nachweise führen
Exportieren Sie OCSF oder OpenTelemetry ins SIEM, setzen Sie die Use-Cases aus Kapitel 9 um und legen Sie Aufbewahrungsfristen fest. Sichern Sie den Kettenkopf extern und prüfen Sie Konformitätsangaben von Anbietern durch eigene Tests.
Eine Vertiefung mit 100-Tage-Programm, Rollenmodell, Kennzahlen und Prüffragen an Agent-Plattformen bietet das CISO-Whitepaper „Agent Control für CISOs“, das Sie weiter unten auf dieser Seite anfordern können. VamiSec begleitet Bewertung, Architektur, Policy-Design und Tests als unabhängige Beratung; VamiSec ist nicht Teil des ACS-Projekts.
Self-Assessment
ACS Readiness Assessment: Wie weit ist Ihre Runtime-Kontrolle für KI-Agenten?
18 Fragen in sechs Dimensionen, etwa 10 Minuten. Sie erhalten Ihren Reifegrad, die Bereitschaft je ACS-Baustein und Ihre größten Lücken mit konkretem nächstem Schritt.
0 / 18 Fragen beantwortet
Die vier Stufen
- 0 Nicht vorhanden
- Es gibt dazu weder eine Regelung noch eine technische Umsetzung.
- 1 Ad hoc
- Einzelne Teams lösen es individuell, ohne Vorgabe und ohne Nachweis.
- 2 Definiert
- Verbindlich geregelt und für die wichtigsten Agenten umgesetzt.
- 3 Durchgesetzt & gemessen
- Technisch erzwungen, für alle relevanten Agenten, mit Kennzahlen überprüft.
Ihr Ergebnis
Noch nicht alle Fragen beantwortet — offene Fragen zählen in der Auswertung als „Nicht vorhanden“.
Bereitschaft je ACS-Baustein
ACS-CoreLücke0 %
Pflicht-Baseline: Mindest-Hooks, alle fünf Dispositions, Decision Honoring mit Failure Posture, Audit-Kette und HMAC-Signatur.
ACS-TraceLücke0 %
Schritte und Entscheidungen als OpenTelemetry- oder OCSF-Ereignisse für SIEM und Forensik.
ACS-InspectLücke0 %
AgBOM als Laufzeit-Inventar je Session; Änderungen zur Laufzeit zusätzlich mit acs-inspect-dynamic.
ACS-ProvenanceLücke0 %
Herkunft und Lineage auf jedem datentragenden Feld als Grundlage für herkunftsbasierte Policies.
Aufsicht & EU AI ActLücke0 %
Freigaben und Aufzeichnungen, die die Nachweisführung etwa zu Art. 12 und Art. 14 bei Hochrisiko-Einsätzen unterstützen — VamiSec-Einschätzung, keine Konformitätsvermutung.
Ihre größten Lücken
Noch nicht alle Fragen beantwortet — offene Fragen zählen in der Auswertung als „Nicht vorhanden“.
Ihre Antworten verlassen Ihren Browser nicht. Es wird nichts gespeichert; ein Ergebnis-Link enthält Ihre Antworten nur im URL-Fragment.
Kostenloses Whitepaper
Agent Control für CISOs — Runtime-Kontrolle mit dem OWASP Agent Control Standard
Der Praxisleitfaden zu ACS v0.1.0: was der Standard regelt, wie Sie Guardian, Policies, Trace und AgBOM einführen, wie sich das auf AI Act, NIS2 und DORA abbilden lässt — und was v0.1 heute noch nicht leistet.

41 SeitenPDF, kostenfreiDeutschStand 10/2026
- Zehn Kernaussagen und ein Vorstands-Briefing auf einer Seite — mit fünf Entscheidungen für die Geschäftsleitung
- Referenzarchitektur für Guardian und Policy-as-Code inklusive Failure-Posture-Konzept und SOC-Integration
- Regulatorik-Mapping von AI Act bis ISO/IEC 42001 mit Nachweisartefakten — und klar markierten Grenzen
- 100-Tage-Programm, Reifegradmodell und 20 Beschaffungsfragen an Agent-Plattformen und Guardian-Anbieter
Das CISO-Whitepaper: Agent Control für CISOs
Teil I · Verstehen
Management Summary mit zehn Kernaussagen und einem Vorstands-Briefing auf einer Seite, das Kontrollproblem agentischer KI mit belegten Vorfällen und ACS auf einen Blick: Rollen, Pillars, Profile, Historie und Governance.
Teil II · Umsetzen
Hooks und Dispositions mit Wire-Beispielen, Guardian-Architektur und Policy-as-Code, Failure Posture, Trace ins SOC, die AgBOM als Laufzeitinventar sowie Identity und Provenance gegen die Folgen von Prompt Injection.
Teil III · Steuern
OWASP Agentic Top 10 × ACS als Heatmap, Regulatorik-Mapping zu AI Act, NIS2, DORA, CRA, ISO/IEC 42001 und NIST AI RMF mit Nachweisartefakten — und eine ehrliche Bewertung, was v0.1 leistet und was nicht.
Programm & Beschaffung
Reifegradmodell mit Operating Model, ein 100-Tage-Einführungsprogramm mit Deliverables und KPIs, 20 Beschaffungsfragen an Agent-Plattformen und Guardian-Anbieter sowie Antworten auf typische Einwände im Vorstand.
Neu · ICSPIS 2026 (IEEE)
Testen statt vertrauen: welche Evidenz ACS-Kontrollen prüfbar macht
Ein Guardian entscheidet – aber belegt Ihre Telemetrie auch, dass die Ausführung zur Entscheidung passte? Unser bei der ICSPIS 2026 angenommenes Paper leitet aus MAESTRO und STRIDE einen Evidence Contract ab; der Deep Dive überträgt ihn Feld für Feld auf ACS-Hooks, Provenance und Trace – mit Fault-Matrix, ACS-Crosswalk und Negativtests für Ihre CI.
92,9 %Recall mit sicherheitsrelevanten Bindungen (P3)
16,7 %Recall mit rein kausalem Tracing (P2)
50 %Recall ohne Decision-Events (F1)
- ACS-Crosswalk: Angriffsfamilie → Prädikat → Hook → Guardian-Reaktion
- Decision-Receipt-Mindestfelder in policy_data
- Research Edition (Englisch): Paper plus ACS Practitioner Brief
Glossar
Glossar: Begriffe des Agent Control Standard
Die wichtigsten Begriffe aus ACS v0.1.0 in zitierfähigen Kurzdefinitionen — englische Spec-Begriffe bleiben im Original.
20 von 20 Begriffen
- Guardian AgentPolicy Enforcement Point
- Die externe Policy-Instanz in ACS: Sie bewertet die Hooks des Observed Agent außerhalb des Modells und antwortet mit einer Disposition — zuerst über deterministischen Policy-Code, optional ergänzt um eine LLM-Schicht. Nicht gleichzusetzen mit Gartners Marktbegriff „guardian agents“.
- Observed Agent
- Das überwachte KI-System, das den ACS-Wire-Vertrag implementiert, an jedem Entscheidungspunkt Hooks sendet und die erhaltenen Dispositions durchsetzt. Es meldet, entscheidet aber nicht über die eigenen Aktionen.
- Hooksteps/*
- Ein Punkt im Lebenszyklus eines KI-Agenten, an dem er anhält und den Guardian fragt, bevor er handelt. ACS v0.1.0 definiert 19 native steps/*-Hooks; ACS-Core verlangt mindestens sechs davon.
- DispositionVerdict
- Die Antwort des Guardian auf einen Hook: allow, deny, modify, ask oder defer. Außer bei allow ist eine Begründung im Feld reasoning Pflicht.
- Failure Postureon_decision_failure
- Das Verhalten des Observed Agent, wenn keine verwertbare Entscheidung rechtzeitig eintrifft. Default ist proceed (fail-open); deny (fail-closed) muss bewusst konfiguriert werden, und jeder Durchlauf ohne Entscheidung muss auditiert werden.
- Handshakehandshake/hello
- Der verpflichtende Sessionaufbau per handshake/hello, in dem Observed Agent und Guardian Version, bewertete Methoden (methods_evaluated), Timeout und Failure Posture aushandeln. Nicht bewertete Methoden gelten als ungeprüft erlaubt.
- ACS-Coreacs-core
- Das verpflichtende Basisprofil jeder ACS-Implementierung. Laut Spezifikation sichert es zweierlei: einen authentisierten Kanal und dass der Observed Agent die Entscheidungen des Guardian befolgt — strenge Policies garantiert es nicht.
- KonformitätsprofilConformance Profile
- Ein im Handshake deklarierter Leistungsumfang: acs-core plus die optionalen Profile acs-trace, acs-inspect, acs-inspect-dynamic, acs-provenance, acs-crypto und acs-audit. In v0.1.0 ist das reine Selbstdeklaration ohne Testsuite oder Prüfstelle.
- AgBOMAgent Bill of Materials
- Das dynamische Inventar der Komponenten eines Observed Agent mit acht Typen von model bis skill. Es wird je Session gemeldet, in die Audit-Chain geschrieben und kann Guardian-Entscheidungen auslösen; es ist weder AI-BOM noch CRA-SBOM.
- Provenance
- Feldgenaue Herkunftsangaben zu Daten im Hook-Payload: origin, source_id und derived_from. Das Framework setzt sie deterministisch, nie das LLM; Pflicht sind sie nur im Profil acs-provenance.
- Audit-ChainSessionContext
- Die append-only Kette der ContextEntries einer Session, verknüpft über SHA-256-Hashes. Der veröffentlichte und signierte chain_hash macht nachträgliche Änderungen erkennbar — manipulationsevident, aber nicht gegen einen kompromittierten Guardian geschützt.
- Policy-as-Code
- Sicherheitsregeln als versionierter, ausführbarer Code statt als Dokument. In ACS ist das die deterministische Schicht des Guardian, die immer zuerst läuft; v0.1-Startreferenz ist OPA/Rego, Cedar folgt mit v0.2.
- Human-in-the-Loop / ASK-Approverask, Approver
- Bei ask legt der Guardian eine Aktion einem Approver zur Freigabe vor. Approver können Mensch, Agent oder Dienst sein und müssen authentifiziert werden; menschliche Aufsicht entsteht erst durch eine Policy mit approver.type human und timeout_disposition deny.
- DEFERdefer
- Die Disposition, mit der der Guardian eine Entscheidung zurückstellt, etwa wegen fehlenden Kontexts oder geringer Konfidenz. Läuft die Frist ab, gilt per Default deny; kaskadierende Rückstellungen müssen je Session begrenzt sein.
- MODIFYmodify
- Die Disposition, mit der der Guardian eine Aktion in geänderter Form zulässt — über parameter_overrides, Schwärzungen (redactions) oder einen vollständigen Ersatzinhalt. Ein regelwidriges modify muss der Observed Agent wie deny behandeln.
- Session IntentIntent.parsed
- Die zu Sessionbeginn festgelegte Menge erlaubter Capabilities für einen Zweck. Sie darf weder vom LLM noch durch Tool-Ausgaben verändert werden und wächst nur über eine auditierte Freigabe per ask (intent_extension).
- Capability
- Eine abstrakte Berechtigung wie filesystem.delete, network.egress oder process.execute. Sie beschreibt die Wirkung einer Aktion unabhängig vom konkreten Tool und ist die Einheit, in der Session Intent und Policies formuliert werden.
- MCP-Wrappingprotocols/MCP/*
- Der in v0.1 spezifizierte Namensraum, in dem ACS MCP-Nachrichten unverändert an den Guardian weiterreicht. Deployments dürfen MCP-Tool-Calls alternativ über die generischen Tool-Hooks abbilden; A2A-Wrapping ist erst für v0.2 vorgesehen.
- Referenzimplementierung (AGT)Reference Implementation
- Der einzige Proof of Concept im ACS-Repository: ein TypeScript-Guardian, der Microsofts Agent Governance Toolkit unverändert hinter dem ACS-Wire betreibt, angebunden an Claude Code und OpenCode — weder produktionsreif noch vollständig ACS-Core-konform.
- Agent Control Specification (Microsoft)Microsoft ACS
- Eine eigenständige, Rego-basierte Policy-Spezifikation von Microsoft für das Agent Governance Toolkit (02.06.2026). Sie wird ebenfalls „ACS“ abgekürzt, ist aber kein Teil des OWASP Agent Control Standard.
FAQ
Häufige Fragen zum Agent Control Standard
Kurze Antworten für CISOs, Security-Architekten und GRC — Stand 04.10.2026, Spezifikation v0.1.0.
Der OWASP Agent Control Standard (ACS) ist eine offene Wire-Spezifikation für die Runtime-Kontrolle von KI-Agenten. Er legt fest, wie ein Agent — der Observed Agent — relevante Schritte per Hook an einen separaten Guardian Agent meldet und dessen Entscheidung abwartet: allow, deny, modify, ask oder defer. Drei Pillars ergänzen sich: Instrument für Hooks und Dispositions, Trace für Audit-Ereignisse nach OpenTelemetry und OCSF, Inspect für die AgBOM. ACS ist ein Projekt des OWASP GenAI Security Project, aktuell als Spezifikation v0.1.0, Release 0.1.2 (getaggt am 21.09.2026). Code und Schemas stehen unter Apache-2.0, die Dokumentation unter CC BY-SA 4.0.
Nein. ACS ist ein OWASP-Projekt in frühem Stadium — laut eigenen Projektmetadaten auf Level 2 (Incubator), vom Project Lead selbst als „public preview“ bezeichnet. Es ist weder eine ISO-, IETF- oder W3C-Norm noch eine harmonisierte Norm. Konformität ist in v0.1.0 eine Selbstdeklaration, die niemand prüft (Issue #19). Selbst der Pflichtumfang von ACS-Core wird in einem offenen Pull Request noch diskutiert. Auch die Roadmap ist vorläufig: v0.2.0 ist als Ziel für März 2027 genannt, v1.0 hat noch kein Datum. Transparent sollte auch die Herkunft sein: Gründung und Leitung des Projekts sind stark von Zenity geprägt.
System-Prompts sind keine Kontrollen: Sie wirken im selben Kanal, den ein Angreifer per Prompt Injection beeinflussen kann. Guardrail-Frameworks sind konkrete Implementierungen mit jeweils eigener Schnittstelle. ACS definiert dagegen eine offene, frameworkübergreifende Schnittstelle zwischen Agenten-Host und externem Guardian: Die Entscheidung fällt außerhalb des Modells, deterministische Policies laufen zuerst, und der Agent muss das Ergebnis umsetzen. Das zählt, weil Prompt Injection laut OpenAI „unlikely to ever be fully 'solved'“ ist (22.12.2025). ACS verhindert Prompt Injection nicht — es schafft den standardisierten Kontrollpunkt, an dem Policies gegen ihre Folgen greifen.
ACS ersetzt keines der beiden Protokolle, sondern legt eine Kontrollschicht darüber. Für MCP spezifiziert v0.1 den versionsneutralen Namensraum protocols/MCP/*: Nachrichten gehen unverändert an den Guardian, der sie vor Weiterleitung oder Verarbeitung bewertet. Deployments dürfen MCP-Tool-Calls alternativ über steps/toolCallRequest und steps/toolCallResult abbilden; ob MCP-Wrapping zu ACS-Core gehört, ist im Spec-Text widersprüchlich. Die Spec-Prosa setzt zudem noch Mechanismen vor der aktuellen MCP-Revision 2026-07-28 voraus. A2A ist in v0.1 nur reserviert, das Wrapping folgt mit v0.2. Bis dahin bleiben steps/agentTrigger mit a2a_inbound und der AgBOM-Typ a2a_peer.
ACS kann die Nachweisführung unterstützen, erfüllt den AI Act aber nicht und begründet keine Konformitätsvermutung. Für die Aufzeichnungspflicht nach Art. 12 liefern acs-trace (Ereignisse je Schritt) und acs-audit (an Request-Inhalte gebundene, manipulationsevidente Audit-Chain) Bausteine. Für menschliche Aufsicht nach Art. 14 eignet sich ask nur mit einer Policy „menschlicher Approver, Timeout deny“; einen Stop-Button kennt v0.1 nicht, nur schrittweises deny. Beachten Sie die Fristen: Hochrisiko-Pflichten gelten nach der Verordnung (EU) 2026/1744 ab 02.12.2027 (Anhang III) bzw. 02.08.2028 (Anhang I), Art. 50 gilt seit 02.08.2026. KI-Agenten sind nicht per se Hochrisiko. Die Zuordnung ist eine VamiSec-Ableitung.
Per Default läuft der Agent weiter. Trifft innerhalb des ausgehandelten Timeouts keine verwertbare Entscheidung ein, gilt on_decision_failure mit dem Default proceed (fail-open); auch ein gescheiterter Handshake startet die Session standardmäßig ungeschützt. Jeder solche Durchlauf muss als Audit-Event erfasst werden — die Spec räumt offen ein, dass ein Angreifer, der den Kanal stört, Kontrolle so in reine Protokollierung verwandelt. Fail-closed erreichen Sie mit on_decision_failure: deny und der Startup-Posture refuse. Abgelaufene ask- und defer-Entscheidungen fallen dagegen per Default auf deny. Da die Posture je Session gilt, empfehlen wir getrennte Guardians oder Sessions je Risikoklasse (VamiSec-Einschätzung).
Die Spezifikation nennt keine Millisekunden-Vorgabe. Das Timeout wird im Handshake ausgehandelt (timeout_config.default_ms, optional je Methode); jede Millisekunde davon ist im Worst Case zusätzliche Wartezeit für den Agenten. Die Referenzimplementierung setzt 5000 ms. Latenz sparen deterministische Policies, die laut Spec keine externen HTTP-Aufrufe enthalten sollen; die optionale LLM-Schicht kostet nach unserer Einschätzung spürbar mehr, das Signieren mit SLH-DSA-128s dauert laut Spec mehrere hundert Millisekunden. Betrieblich empfehlen wir, den Guardian nah am Agenten und redundant zu betreiben, Timeouts je Methode zu budgetieren und die Decision-Failure-Rate als Kennzahl zu überwachen — ein erfolgreicher system/ping belegt keine funktionierende Durchsetzung.
Es gibt genau eine Referenzimplementierung, ausdrücklich als Proof of Concept: einen TypeScript-Guardian, der Microsofts Agent Governance Toolkit unverändert hinter dem ACS-Wire betreibt, mit Host-Anbindungen für Claude Code und OpenCode. Er bewertet zwei von 19 Hooks live (steps/toolCallRequest und steps/toolCallResult), signiert nichts (Issue #70), hat keinen Replay-Schutz und läuft per Default fail-open (Issues #32 und #37). Ein Interoperabilitäts-Benchmark ist das Ziel des Projekts bis Anfang Dezember 2026, liegt aber noch nicht vor. Eine Unterstützung durch Microsoft folgt daraus nicht. Belastbare Produktiveinsätze sind uns nicht bekannt (Stand 04.10.2026).
Nein — eine Namensfalle. Microsoft veröffentlichte am 02.06.2026 eine eigene „Agent Control Specification“, ebenfalls als ACS abgekürzt: eine Rego-basierte Policy-Spezifikation des Agent Governance Toolkit mit acht Interception Points und Entscheidungen wie allow, warn, deny und escalate. Sie stammt von Microsoft, nicht vom OWASP GenAI Security Project, und erwähnt den OWASP-Standard nicht. Die Verbindung ist indirekt: Die ACS-Referenzimplementierung nutzt das Toolkit als Policy-Engine; das dort verwendete npm-Paket agent-control-specification ist Microsofts SDK, kein Artefakt des OWASP-Standards. Auf dieser Seite meint ACS immer den OWASP Agent Control Standard.
Behandeln Sie ACS als Referenzarchitektur, nicht als Produktmerkmal. Am Anfang stehen ein Agenten-Inventar mit Tools, Modellen, MCP-Servern und Skills und eine Risikoeinstufung, etwa entlang der lethal trifecta. Darauf folgen Policies für konsequenzreiche Capabilities an steps/toolCallRequest, eine bewusste Entscheidung zu Failure Posture und Approvern sowie die Anbindung des Trace an Ihr SIEM; die fünf Schritte beschreibt Kapitel 14 im Detail. Ihren Ausgangspunkt zeigen Profil-Navigator und Self-Assessment, ein 100-Tage-Programm enthält das Whitepaper. Anbieter-Claims zu ACS-Profilen prüfen Sie im Test, statt sie zu übernehmen. Wie Sie die Wirksamkeit Ihrer Guardian-Policies mit Negativtests und Decision Receipts in der CI belegen, zeigt unser Deep Dive „Agentic AI Security Testing“ zum ICSPIS-2026-Paper. VamiSec unterstützt unabhängig bei Bewertung, Architektur, Policy-Design, Einführung und Tests.
Standards & Quellen
Die Inhalte dieser Seite basieren auf den folgenden öffentlich verfügbaren Leitfäden und Studien.
OWASP GenAI Security Project · 2026
Agent Control Standard (ACS) — GitHub-Repository ↗
Primärquelle: Spezifikation v0.1.0, Release 0.1.2, 44 JSON-Schemas, Referenzimplementierung (PoC); Code und Schemas Apache-2.0, Dokumentation CC BY-SA 4.0 — ausgewertet mit Stand 03.10.2026
OWASP GenAI Security Project · 2026
ACS Instrument Specification v0.1.0 ↗
Publizierte Spec-Doku: Wire-Format, Handshake, Hook-Taxonomie mit 19 Hooks, Dispositions, Failure Posture, Signaturen und Fehlercodes
OWASP GenAI Security Project · 2026
ACS Conformance — ACS-Core und Profile ↗
Pflichtumfang von ACS-Core, die sechs optionalen Profile und der Hinweis, dass in v0.1.0 niemand Konformitätsclaims prüft
OWASP GenAI Security Project · 2026
ACS JSON-Schemas v0.1.0 (Beispiel: defer-details.json) ↗
Projekteigener Schema-Namespace seit 05.09.2026; Grundlage der schema-treuen Wire-Beispiele im Simulator
OWASP GenAI Security Project · 2026
Agent Control Standard (ACS) — Ressourcenseite ↗
Listung im Bereich Agentic Security, datiert 01.09.2026
Zenity Labs (Rock Lambros) · 2026
Control Made It Into the Name: The Agent Control Standard Lands at OWASP ↗
Blogbeitrag des Project Lead vom 10.09.2026 zu Herkunft und Relaunch; bezeichnet ACS als „public preview“ — Herstellerquelle
Cloud Security Alliance Labs · 2026
CSA Research Note: OWASP's 2026 LLM Top 10 and New Agent Control Standard ↗
Externe Einordnung vom 04.09.2026: ACS als „architecture to plan around and pilot against“
OWASP GenAI Security Project — Agentic Security Initiative · 2025
OWASP Top 10 for Agentic Applications 2026 ↗
Risiken ASI01–ASI10, veröffentlicht im Dezember 2025; Bezugsrahmen der Risiko-Matrix (ACS kommt darin nicht vor)
OWASP GenAI Security Project — Agentic Security Initiative · 2025
Agentic AI – Threats and Mitigations (Ressourcen der Agentic Security Initiative) ↗
Bedrohungstaxonomie T1–T15 in Version 1.0 vom Februar 2025; abrufbar über die Ressourcenübersicht der Initiative
Europäische Union, Amtsblatt · 2024
Verordnung (EU) 2024/1689 (KI-Verordnung / AI Act) ↗
Art. 9, 12, 14, 15, 19, 26, 50 und 72 als Bezugspunkte des Regulatorik-Mappings
Europäische Union, Amtsblatt · 2026
Verordnung (EU) 2026/1744 (Digital Omnibus on AI) ↗
Verschiebt die Hochrisiko-Pflichten auf 02.12.2027 (Anhang III) bzw. 02.08.2028 (Anhang I)
National Institute of Standards and Technology · 2023
NIST AI 100-1: Artificial Intelligence Risk Management Framework (AI RMF 1.0) ↗
Freiwilliger Rahmen; MANAGE 2.4 zu Mechanismen, KI-Systeme abzulösen, abzukoppeln oder zu deaktivieren
OpenTelemetry · abgerufen 10/2026
OpenTelemetry Semantic Conventions für Generative AI ↗
Status „Development“; Vergleichsbasis für die Trace-Mappings von ACS (Tool-Spans dort: execute_tool)
Open Cybersecurity Schema Framework (Linux Foundation) · abgerufen 10/2026
OCSF Schema 1.5.0 — Kategorien und Klassen ↗
Abgleich der von ACS genutzten Klassen-UIDs und -Namen, u. a. 2004 Detection Finding und 6002 Application Lifecycle
OWASP Foundation / Ecma TC54 · 2025
CycloneDX Specification Overview ↗
Aktuell Version 1.7; ACS serialisiert die AgBOM nach CycloneDX 1.6
Microsoft (Responsible AI) · 2026
Introducing Agent Control Specification: Portable runtime governance for AI Agents ↗
Abgrenzung: eigenständige Microsoft-Spezifikation vom 02.06.2026, ebenfalls „ACS“ abgekürzt, nicht Teil des OWASP-Standards
Microsoft Open Source Blog · 2026
Introducing the Agent Governance Toolkit (Microsoft Open Source Blog) ↗
Ankündigung vom 02.04.2026; das Toolkit dient der ACS-Referenzimplementierung unverändert als Policy-Engine
OpenAI · 2025
Continuously hardening ChatGPT Atlas against prompt injection attacks ↗
22.12.2025: Prompt Injection sei „unlikely to ever be fully 'solved'“ — Argument für modellunabhängige Laufzeitkontrollen
Runtime-Kontrolle für Ihre KI-Agenten aufbauen?
VamiSec begleitet Sie unabhängig: Bewertung Ihrer Agenten-Landschaft, Guardian-Architektur und Policy-Design entlang ACS, Einführung und Tests — ohne Zertifizierungsversprechen und mit klarem Blick auf den Reifegrad von v0.1.