Edictum
Security & Compliance

Compliance Mapping

Edictum enforces runtime rulesets on AI agent tool calls.

AI Assistance

Right page if: you need to map Edictum capabilities to EU AI Act, SOC 2, OWASP Top 10 for LLM Applications, or OWASP Top 10 for Agentic Applications requirements, or an auditor is asking how AI agent decisions are logged. Wrong page if: you want to configure audit sinks or OTel export -- see https://docs.edictum.ai/docs/reference/audit-sinks or https://docs.edictum.ai/docs/reference/telemetry. Gotcha: every pipeline evaluation produces an AuditEvent with a policy_version (SHA-256 hash) that links each decision to the exact YAML rule file -- this is your immutable decision log for compliance evidence.

Edictum enforces runtime rulesets on AI agent tool calls. This page maps Edictum capabilities to specific requirements in the EU AI Act, SOC 2 Trust Services Criteria, the OWASP Top 10 for LLM Applications (2025), and the OWASP Top 10 for Agentic Applications (2026), with concrete configuration guidance for each control.

Capability mappings, not compliance attestations. The tables below show how Edictum features map to regulatory and framework requirements. Having a feature that maps to a control is not the same as passing an audit -- your organization must implement the processes, collect the evidence, and undergo independent assessment. Edictum provides the enforcement and audit tooling; your compliance program provides the governance around it.


EU AI Act

Article 9 -- Risk Management System

Article 9 requires providers of high-risk AI systems to establish a risk management system that identifies risks, estimates their likelihood and severity, adopts mitigation measures, and documents the process throughout the system lifecycle.

RequirementEdictum FeatureEvidence / Configuration
Risk identificationPreconditions define what constitutes a risky tool call. Each rule names a specific risk (e.g. no-destructive-bash, no-secrets-in-args).YAML rule file listing all enforced risks. edictum validate confirms rulesets are well-formed.
Risk estimation and evaluationObserve mode (mode: observe) runs rulesets in observe mode without blocking, letting you measure how often each rule would fire on real traffic.Audit events with action: call_would_deny record observed blocks. Query decision_name to get per-rule frequency.
Risk mitigationEnforce mode (mode: enforce) blocks tool calls that violate rulesets. Side-effect classification (pure, read, write, irreversible) scales the response to the severity of the action.Audit events with action: call_denied confirm active mitigation. side_effect field in each event shows the risk tier.
Documentation throughout lifecyclepolicy_version (SHA-256 of YAML) tracks which rule set was active for every decision. edictum diff shows changes between versions. edictum replay quantifies the impact of proposed changes.Audit log with policy_version field. CI pipeline running edictum diff on every rule change PR.
Residual risk monitoringPostconditions run after tool execution and record warnings when results violate expectations. Failures are recorded on the CALL_EXECUTED event.Audit events with action: call_executed and postconditions_passed: false.

Article 14 -- Human Oversight

Article 14 requires that high-risk AI systems are designed to be effectively overseen by natural persons, including the ability to understand the system's capacities and limitations, to monitor operation, and to intervene or interrupt.

RequirementEdictum FeatureEvidence / Configuration
Understand capacities and limitationsRule files are human-readable YAML that declare exactly what the agent is and is not allowed to do. edictum check lets a human test any hypothetical tool call without running it.YAML rule file reviewed in code review. edictum check output in documentation or runbooks.
Monitor operationAudit sinks stream every pipeline decision to local logs. OpenTelemetry spans route decisions to any observability backend (Datadog, Splunk, Grafana, Jaeger) via an OTel Collector.StdoutAuditSink or FileAuditSink for local logs. configure_otel() or YAML observability.otel block for OTel span emission. OTel edictum.calls.blocked / edictum.calls.allowed counters on dashboards.
Human-in-the-loop observe mode testingObserve mode evaluates rulesets without enforcing them, producing call_would_deny audit events. Teams review observed blocks before switching to enforce mode.Pipeline configured with mode: observe. Audit log analysis showing observed block rates over time before cutover.
Intervene and interruptPrincipal-based gating allows human-specified context (role, ticket reference) to gate tool access. Session limits (max_attempts, max_tool_calls) automatically halt runaway agents.Rulesets with principal.role conditions. OperationLimits configured with appropriate caps. Audit events showing decision_source: attempt_limit or decision_source: operation_limit.
Ability to override or reversePer-rule observe mode lets operators disable enforcement on individual rulesets without a full redeploy. edictum replay lets operators preview the impact before re-enabling enforcement.Per-rule mode: observe in YAML. edictum replay <rules.yaml> --audit-log <events.jsonl> output in change management ticket.

SOC 2 Trust Services Criteria (CC6)

CC6.1 -- Logical Access Security

The entity implements logical access security software, infrastructure, and architectures to protect information assets.

RequirementEdictum FeatureEvidence / Configuration
Logical access controls over AI agent actionsPrincipal object carries identity context (user_id, service_id, org_id, role, ticket_ref, claims) through the entire pipeline. Preconditions can gate tool access based on any principal field.YAML rulesets with selectors like principal.role: { in: [admin, sre] } and principal.claims.team: { equals: platform }. Programmatic preconditions can also access envelope.principal.role in Python. Audit events containing the full principal dict.
Protection of sensitive datadeny_sensitive_reads() built-in blocks access to common secret paths (~/.ssh/, .env, /var/run/secrets/, AWS credentials). RedactionPolicy scrubs sensitive data from audit payloads.deny_sensitive_reads() registered in Edictum. RedactionPolicy configured on all audit sinks.
Classification of information assetsSideEffect classification (pure, read, write, irreversible) categorizes every tool call by its potential impact. Unregistered tools default to irreversible (most restrictive).ToolRegistry configuration with explicit side-effect assignments. Default IRREVERSIBLE for unknown tools.

CC6.2 -- Prior to Issuing System Credentials and Granting System Access

The entity authorizes, establishes, and manages credentials for system users.

RequirementEdictum FeatureEvidence / Configuration
Identity propagationPrincipal is set at the adapter level and propagated to every ToolCall, AuditEvent, and pipeline decision. All eight adapters support principal injection.Adapter configuration passing Principal(user_id=..., service_id=..., org_id=...). Audit events with principal field populated.
Credential-based access decisionsPreconditions can require specific principal fields to be present or match expected values before allowing tool execution.YAML rulesets with principal.user_id: { exists: true }, principal.role: { equals: admin }, principal.ticket_ref: { exists: true }. Programmatic preconditions can check envelope.principal directly in Python code.

CC6.3 -- Authorization of System Access

The entity authorizes access to system resources consistent with job responsibilities.

RequirementEdictum FeatureEvidence / Configuration
Role-based tool accessPreconditions gate tool access by principal.role. Different roles can have different tool permissions.YAML rulesets with conditions like principal.role in ["admin", "sre"] for destructive operations.
Ticket-based authorizationprincipal.ticket_ref enables change-management workflows where destructive operations require an associated incident or change ticket.YAML rulesets with principal.ticket_ref: { exists: true } for write/irreversible tools.
Claims-based fine-grained accessprincipal.claims is an extensible dict that carries arbitrary authorization context (e.g. team membership, feature flags, ABAC attributes).YAML rulesets with principal.claims.team: { equals: platform } or similar custom claims selectors.

CC6.6 -- System Operations

The entity implements logical access security measures to protect against threats from sources outside its system boundaries.

RequirementEdictum FeatureEvidence / Configuration
Comprehensive decision logEvery pipeline decision produces an AuditEvent with 27 fields covering identity, tool details, principal, decision rationale, execution outcome, and session counters.Audit sinks configured and emitting. JSONL files or log aggregator queries showing complete event records.
Session boundary enforcementOperationLimits caps total attempts (max_attempts), total executions (max_tool_calls), and per-tool executions (max_calls_per_tool).OperationLimits(max_attempts=500, max_tool_calls=200, max_calls_per_tool={"Bash": 50}). Audit events with decision_source: operation_limit.
Runaway agent detectionmax_attempts counts blocked calls too, catching agents stuck in retry loops. The Session object also exposes consecutive_failures() as a building block for custom hooks -- it tracks consecutive failed tool executions and resets on success, but no built-in rule or pipeline logic reads it automatically.Session rulesets with max_attempts. Custom hooks can call await session.consecutive_failures() to implement circuit-breaker logic. Audit events with session_attempt_count and session_execution_count.

CC6.8 -- Change Management

The entity authorizes, designs, develops, configures, documents, tests, approves, and implements changes to infrastructure and software.

RequirementEdictum FeatureEvidence / Configuration
Policy versioningpolicy_version in every audit event is the SHA-256 hash of the YAML rule file. This ties every decision to a specific, reproducible rule state.Audit events with policy_version field. Rule files stored in version control.
Change impact analysisedictum diff compares two rule files and reports added, removed, and changed rule IDs. edictum replay re-evaluates historical audit events against a proposed rule file and reports what would change.edictum diff old.yaml new.yaml in CI on every PR. edictum replay new.yaml --audit-log prod.jsonl in change approval workflow.
Policy error detectionpolicy_error: true in audit events indicates a rule loading failure. The system fails closed (blocks tool calls) when rulesets cannot be loaded, and records the error state for monitoring.Alerts on policy_error: true in audit events. Monitoring dashboard for rule load failures.
Staged rolloutPer-rule observe mode allows new rulesets to be deployed in observe mode, evaluated against real traffic, and promoted to enforce mode after validation.New rulesets added with mode: observe. Observe-mode audit events analyzed. Mode changed to enforce after review.

OWASP Top 10 for LLM Applications (2025)

The OWASP Top 10 for LLM Applications v2025 identifies the most critical security risks in LLM-powered systems. Edictum operates at the tool-call layer and addresses a subset of these risks. The table below maps each risk to what Edictum can and cannot do.

OWASP RiskEdictum CoverageEvidence / Configuration
LLM01:2025 Prompt InjectionPartial. Edictum does not filter prompts or detect injection attempts. However, it enforces rulesets on the tool calls that result from a successful injection. A prompt injection that tricks an agent into calling rm -rf / is blocked by preconditions -- the injection's influence stops at the enforcement point. This does not prevent text-only attacks that never trigger a tool call.Precondition rulesets on destructive tools. Audit events with decision_source: yaml_pre.
LLM02:2025 Sensitive Information DisclosurePartial. deny_sensitive_reads() blocks access to .env, .ssh/, .aws/credentials, and key files. Sandbox rulesets restrict file paths to explicit allowlists. Postcondition redaction catches secrets that appear in tool output. This covers disclosure via tool calls but not disclosure embedded in LLM text responses.deny_sensitive_reads() precondition. Sandbox within/not_within boundaries. RedactionPolicy on audit sinks.
LLM05:2025 Improper Output HandlingPartial. Postconditions with action: redact strip matched patterns (SSNs, API keys, credentials) from tool output before it reaches downstream consumers. action: block suppresses output entirely for READ/PURE tools. This covers tool output only -- LLM text output is not inspected.Postcondition rulesets with regex patterns. Audit events with postconditions_passed: false.
LLM06:2025 Excessive AgencyStrong. Session rulesets cap per-tool, per-session, and per-attempt counts. max_attempts catches retry loops. Principal-based rulesets enforce role-level permissions. Approval gates (action: ask) require human sign-off for high-risk operations. Every tool call passes through the full pipeline regardless of which tool triggered it. Unregistered tools default to IRREVERSIBLE (most restrictive).OperationLimits configuration. Session rulesets. Preconditions with action: ask. Tool registry with explicit side-effect assignments.
LLM10:2025 Unbounded ConsumptionPartial. Session limits (max_attempts, max_tool_calls, max_calls_per_tool) cap tool-call volume per session. The pipeline short-circuits on the first failure. This limits tool-call consumption but does not control token usage, API costs, or compute resources at the model layer.OperationLimits in Edictum constructor or YAML limits block. Audit events with decision_source: attempt_limit or decision_source: operation_limit.

Risks outside Edictum's enforcement boundary

These risks operate at layers that Edictum does not cover (model training, supply chain, embeddings, text generation):

  • LLM03:2025 Supply Chain -- Edictum does not inspect third-party components, model weights, or training pipelines.
  • LLM04:2025 Data and Model Poisoning -- Edictum does not validate training data or model integrity. Ruleset YAML is protected by SHA-256 hashing for change detection. Ed25519 signing is implemented on the control-plane server side; SDK-side signature verification is planned but not yet shipped (see roadmap).
  • LLM07:2025 System Prompt Leakage -- Edictum does not filter LLM text output. If the system prompt leaks via text (not via a tool call), Edictum has no enforcement point.
  • LLM08:2025 Vector and Embedding Weaknesses -- Edictum does not inspect vector stores, embeddings, or retrieval pipelines.
  • LLM09:2025 Misinformation -- Edictum enforces rulesets on actions, not on factual accuracy of text responses.

See Defense Scope for a full analysis of what Edictum covers and where other controls are needed.


OWASP Top 10 for Agentic Applications (2026)

The OWASP Top 10 for Agentic Applications focuses specifically on autonomous AI agent systems. This list is more directly relevant to Edictum than the LLM Applications list above, because Edictum operates at the agent tool-call layer.

OWASP RiskEdictum CoverageEvidence / Configuration
ASI01: Agent Goal HijackStrong. Preconditions block unauthorized tool calls regardless of how the agent was manipulated. A hijacked goal that results in a tool call is evaluated against rulesets -- the hijack's influence stops at the enforcement point.Precondition rulesets on all tools. Audit events with action: CALL_DENIED.
ASI02: Tool MisuseStrong. Sandbox rulesets restrict file paths (within/not_within), commands (allows.commands), and domains (allows.domains) to explicit allowlists. Tools operating outside boundaries are blocked before execution.Sandbox rulesets in YAML. Audit events with decision_source: yaml_sandbox.
ASI03: Identity & Privilege AbuseStrong. Principal-based rulesets enforce role-level permissions on every tool call. Rulesets can require specific principal.role, principal.ticket_ref, or principal.claims values.YAML rulesets with principal.* selectors. Audit events with full principal dict.
ASI05: Unexpected Code ExecutionStrong. Preconditions block dangerous shell patterns (rm -rf, sudo, curl|sh). BashClassifier categorizes commands by side-effect level. Sandbox allows.commands restricts which commands can execute.Precondition rulesets on bash/shell tools. Sandbox command allowlists.
ASI06: Memory & Context PoisoningPartial. Session limits (max_tool_calls, max_attempts, max_calls_per_tool) cap tool-call volume, preventing unbounded context manipulation through excessive tool use. This does not protect against poisoning of the LLM's context window via text.OperationLimits configuration. Session rulesets.
ASI09: Human-Agent Trust ExploitationPartial. Approval gates (action: ask) require human sign-off for high-risk operations. Rulesets can enforce boundaries on sub-agent spawning and cross-tool chaining. The decision log provides evidence for post-hoc review. However, Edictum cannot prevent an agent from producing misleading explanations in text.Preconditions with action: ask. Audit trail with full tool-call details.

Risks outside Edictum's enforcement boundary

  • ASI04: Agentic Supply Chain Vulnerabilities -- Edictum does not inspect MCP servers, A2A protocols, or dynamically loaded agent components.
  • ASI07: Insecure Inter-Agent Communication -- Edictum does not authenticate or verify messages between agents. It evaluates tool calls from within a single agent process.
  • ASI08: Cascading Failures -- Edictum can limit individual agent tool-call volume (session limits), but does not coordinate across multi-agent pipelines to prevent cascading effects.
  • ASI10: Rogue Agents -- Edictum enforces rulesets on tool calls but cannot detect agent misalignment, concealment, or self-directed behavior that does not manifest as a tool call.

Audit Evidence Matrix

For auditors who need a quick reference mapping evidence artifacts to controls:

Evidence ArtifactEU AI ActSOC 2
YAML rule file in version controlArt. 9 (documentation)CC6.8 (change management)
edictum validate output in CIArt. 9 (risk identification)CC6.8 (testing)
edictum diff output in PR reviewArt. 9 (lifecycle documentation)CC6.8 (change impact)
edictum replay reportArt. 9 (risk estimation), Art. 14 (override preview)CC6.8 (change impact analysis)
Audit events with action: call_deniedArt. 9 (risk mitigation)CC6.6 (system operations)
Audit events with action: call_would_denyArt. 14 (observe mode testing)CC6.8 (staged rollout)
Audit events with principal populatedArt. 14 (oversight)CC6.1 (logical access), CC6.2 (credentials)
Audit events with policy_versionArt. 9 (documentation)CC6.8 (versioning)
Audit events with policy_error: trueArt. 9 (residual risk)CC6.8 (error detection)
OTel dashboards with block ratesArt. 14 (monitoring)CC6.6 (system operations)
RedactionPolicy configuration--CC6.1 (data protection)
OperationLimits configurationArt. 14 (interrupt capability)CC6.6 (boundary enforcement)

Last updated on

On this page