Skip to content

RFC: agent-decision/v0.1 predicate for AI agent policy decisions #554

Description

@0xff4c1d

RFC: Register agent-decision/v0.1 predicate in in-toto/attestation

Status: Ready to file (copy this body into a GitHub issue on in-toto/attestation)
Author: Auxidus Technologies
Predicate URI (proposed): https://auxidus.dev/attestation/agent-decision/v0.1
Reference implementation: Auxidus/auxecurity (auxidus-evidence crate)


Summary

Request registration of a new in-toto attestation predicate type for AI agent authorization decisions: which tool was requested, which policies evaluated, allow/deny outcome, and optional trace correlation. Envelopes use standard DSSE with in-toto Statement v1, matching existing predicates such as human-review/v0.1.

Motivation

  • Build provenance (SLSA, SBOM) already uses in-toto; runtime agent decisions have no registered predicate.
  • Regulated deployers (EU AI Act Art. 12 logging) need portable, signed decision records, not vendor-specific JSON logs.
  • Policy engines (e.g. Cedar) on MCP tool paths need a standard evidence shape for allow/deny.

Predicate type URI

https://auxidus.dev/attestation/agent-decision/v0.1

(URI may be aliased to https://in-toto.io/attestation/agent-decision/v0.1 upon WG consensus.)

Statement shape

  • _type: https://in-toto.io/Statement/v1
  • subject[]: in-toto subject descriptors (name, digest.sha256) — typically the tool or resource acted upon
  • predicateType: URI above
  • predicate: see schema below

Predicate schema (JSON Schema)

Canonical schema in upstream repo proposal:

  • File: predicates/agent-decision/v0.1/agent-decision-v0.1.json
  • Source copy today: crates/auxidus-evidence/schemas/agent-decision-v0.1.schema.json
  • Human spec: spec/agent-decision-v0.1.md

Required predicate fields

Field Type Description
agent_id string Stable agent instance identifier
principal object { "subject": string, "spiffe_id"?: string }
policy_evaluations array { policy, decision: allow|deny, reason, policy_ids? }
tool_calls array { name, args_hash } where args_hash is sha256:<hex>
decided_at string RFC 3339 timestamp

Optional predicate fields

Field Type Description
evaluation_results array { name, passed } drop-gate results
trace_parent string W3C Trace Context traceparent

Example statement (payload before DSSE)

{
  "_type": "https://in-toto.io/Statement/v1",
  "subject": [
    {
      "name": "write_file",
      "digest": {
        "sha256": "0000000000000000000000000000000000000000000000000000000000000000"
      }
    }
  ],
  "predicateType": "https://auxidus.dev/attestation/agent-decision/v0.1",
  "predicate": {
    "agent_id": "agent-demo-001",
    "principal": { "subject": "demo-user" },
    "policy_evaluations": [
      {
        "policy": "taint_aware",
        "decision": "deny",
        "reason": "untrusted write denied by policy",
        "policy_ids": ["policy0"]
      }
    ],
    "tool_calls": [
      {
        "name": "write_file",
        "args_hash": "sha256:8f6f16d89f7084b2edec5d0236ec45fbe0ea34cc8f27658cd6ccd2f73ff8e6db"
      }
    ],
    "evaluation_results": [{ "name": "cedar-ifc-gate", "passed": false }],
    "trace_parent": "",
    "decided_at": "2026-05-18T12:00:00Z"
  }
}

Implementation notes

  • Reference signer/verifier: auxidus_evidence::dsse::{sign_agent_decision, verify_agent_decision} (Ed25519 DSSE).
  • Modeled after human-review/v0.1 for reviewer/decision semantics.
  • v0.1 roadmap: SPIFFE-bound principal, cosign-compatible verification, OpenTelemetry trace_parent population.

Proposed upstream layout

docs/predicates/agent-decision/v0.1/
  README.md
  agent-decision-v0.1.json   # JSON Schema

Ask

  1. Feedback on predicate URI namespace (auxidus.dev vs in-toto.io).
  2. WG review of schema fields (especially args_hash vs embedding redacted args).
  3. Guidance on linking to SLSA / OIDC identities in a follow-on v0.2.

Maintainer: file the issue

gh issue create \
  --repo in-toto/attestation \
  --title "RFC: agent-decision/v0.1 predicate for AI agent policy decisions" \
  --body-file docs/rfc/in-toto-agent-decision-v0.1-rfc.md

After filing, update spec/agent-decision-v0.1.md status with the issue URL.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions