| Internet-Draft | COGITATOR Witness Protocol | April 2026 |
| G | Expires 11 October 2026 | [Page] |
This document specifies the COGITATOR Witness Protocol -- a scheme for producing cryptographically verifiable, tamper-evident records of AI agent execution. A conforming implementation produces a single witness root value that any third party can independently recompute from the same inputs to verify the record was not altered after the fact.¶
The protocol is implementation-agnostic. The reference implementation is COGITATOR (Rust), but any language or framework can produce conforming witness bundles.¶
This document also describes how the COGITATOR Witness Protocol relates to the IETF SCITT architecture, with which it is designed to be used as a payload inside SCITT Signed Statements.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 11 October 2026.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document.¶
AI agents deployed in regulated or high-stakes environments issue tool calls with real-world consequences. Existing audit approaches -- log ingestion, post-hoc summaries, model cards -- are reconstructive. They describe what probably happened, not what provably happened. Logs are mutable. Post-hoc summaries are interpretations.¶
The COGITATOR Witness Protocol takes the position that agent execution should be as auditable as a compiled binary in a reproducible build system. The witness root is the runtime equivalent of a content-addressed store path: a cryptographic commitment that ties a specific output to a specific, verifiable execution.¶
This specification is intended to complement, not replace, the SCITT architecture (draft-ietf-scitt-architecture). SCITT provides the outer envelope: a Signed Statement registered on a Transparency Service with a verifiable Receipt. The COGITATOR Witness Protocol provides the inner payload: a structured, hash-chained record of what the agent did, attempted, and was blocked from doing.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, they appear in all capitals, as shown here.¶
A conforming witness bundle MUST contain the following files:¶
run_<id>/ +-- agent_trace.json # Agent steps: inputs, tool requests, outputs +-- tool_transcript.json # All tool calls (real and phantom) with outcomes +-- chaos_profile.json # Fault injection schedule (may be empty) +-- drift_report.json # Replay mismatch report (empty if no drift) +-- hash_chain.txt # Per-call BLAKE3 hashes, one per line +-- meta.json # Witnessed metadata +-- witness_manifest.json # Per-file hashes and bundle hash +-- witness_root.txt # Single hex string -- the tamper-evident root¶
All JSON files MUST be serialised as RFC 8785 canonical JSON before hashing.¶
{
"schema_version": 4,
"run_id": "<string>",
"agent_id": "<string>",
"seed": "<uint64>",
"policy_digest": "<sha256-hex | null>",
"started_at": "<ISO 8601 datetime>",
"finished_at": "<ISO 8601 datetime>",
"cogitator_version": "<semver string>"
}
¶
{
"schema_version": 4,
"entries": [ /* ToolCall[] */ ],
"phantom_entries": [ /* PhantomEntry[] */ ],
"policy_digest": "<sha256-hex | null>"
}
¶
{
"step": "<uint>",
"tool_call_idx": "<uint>",
"tool_name": "<string>",
"request": { },
"response": { },
"chaos_fault": "<string | null>",
"call_hash": "<blake3-hex>"
}
¶
call_hash MUST be the BLAKE3 digest of the RFC 8785 canonical JSON of this object, with call_hash set to the empty string before hashing.¶
{
"step": "<uint>",
"tool_call_idx": "<uint>",
"tool_name": "<string>",
"request": { },
"disposition": "Blocked | Phantom",
"rule_id": "<string | null>",
"reason": "<string | null>",
"entry_hash": "<blake3-hex>"
}
¶
A newline-delimited text file. Each line is the call_hash or entry_hash of one record in the order they were produced, interleaving real calls and phantom entries chronologically.¶
{
"files": {
"agent_trace.json": "<blake3-hex>",
"tool_transcript.json": "<blake3-hex>",
"chaos_profile.json": "<blake3-hex>",
"drift_report.json": "<blake3-hex>",
"hash_chain.txt": "<blake3-hex>",
"meta.json": "<blake3-hex>"
},
"bundle_hash": "<blake3-hex>"
}
¶
A single line containing the BLAKE3 hex digest of the RFC 8785 canonical JSON of the complete witness_manifest.json object (including bundle_hash). This is the only value that needs to be published for a third party to verify the entire bundle.¶
The witness root is computed as follows:¶
A verifier replays steps 1-6 from the bundle files and asserts the computed root matches the published witness_root.txt.¶
The policy layer is optional. If no policy file is provided, all tool calls are implicitly allowed and policy_digest MUST be null in both meta.json and tool_transcript.json.¶
When a policy file is provided:¶
| Verdict | Tool dispatched? | Agent receives | Chain entry |
|---|---|---|---|
| allow | Yes | Real tool response | ToolCall |
| block | No | blocked: true | PhantomEntry(Blocked) |
| phantom | No | blocked: true | PhantomEntry(Phantom) |
A conforming implementation MUST support replay mode. Given the original agent_trace.json, chaos_profile.json, policy file (identified by policy_digest), and seed, a replay run MUST produce an identical witness_root to the original run. Any deviation MUST be reported as a DriftIssue in drift_report.json.¶
An implementation is conforming if:¶
The COGITATOR Witness Protocol is designed to be used as a payload within the SCITT architecture (draft-ietf-scitt-architecture). The RECOMMENDED integration pattern is:¶
This provides two independently verifiable guarantees: the SCITT Receipt proves the witness root was registered at a specific time; the witness root proves the bundle contents have not been altered since computation.¶
The COGITATOR Witness Protocol is designed to address requirements of:¶
This document describes protocol version 1.0, corresponding to schema_version 4 in bundle files. Breaking changes will increment both version numbers together.¶
This document has no IANA actions.¶
The integrity guarantees of the witness root depend on the collision resistance of BLAKE3. As of the date of this document, BLAKE3 is not known to have practical collision attacks.¶
The protocol does not provide confidentiality. Witness bundles may contain sensitive agent inputs and outputs. Implementors are responsible for access controls on bundle storage and transmission.¶
The policy digest commits to the policy file bytes but does not authenticate the provenance of the policy file itself. Deployments requiring policy provenance guarantees should sign policy files independently before committing the digest.¶