The Signed Decision Packet: Machine-Readable AI Decision Evidence
The signed decision packet is the machine-readable record of one sealed AI decision. Its top-level sections are: a decision summary (the decision, confidence, category, risk level), context (the request being decided), the deliberation (arguments for and against with weights and evidence references), alternatives considered with rejection reasons, a rationale summary, an impact assessment, the human-oversight status, and audit metadata including tamper-evidence fields. The packet is signed with Ed25519 at sealing; any third party can verify the signature offline against the public JWKS at /.well-known/jwks.json, without trusting the vendor's storage. Signed packets feed GRC tooling, power decision retrieval, and travel embedded inside the Decision Record PDF. The counterarguments captured in the deliberation section are what distinguish a decision record from an execution log.
The packet is one bounded JSON object per decision — summary, context, deliberation, alternatives, evidence references, rationale, impact, oversight status — signed at sealing so anyone can verify it offline.
- •Bounded, not a log stream — a GRC tool ingests one object per decision, not a million spans.
- •Counterarguments included — the deliberation section records what argued against the decision, with weights.
- •Signed at sealing — Ed25519 signature, verifiable against the public JWKS, offline.
- •Same object everywhere — embedded in the Decision Record PDF, returned by the API, retrieved as precedent.
Traceability tells you what an agent did. This cluster is about the next step: records that stand up — under the EU AI Act, NIST AI RMF and ISO/IEC 42001.
- 1.Defensible AI Decisions: The Complete Guide to Records an Auditor Can Act On
- 2.They Made Agents Traceable. We Make Their Decisions Defensible.
- 3.The Decision Record: the PDF an Auditor Actually Opens
- 4.Inside the Signed Decision Packet (the JSON)You are here
- 5.Inside an EU AI Act Evidence Package (Folder by Folder)
- 6.Human Oversight You Can Prove (Because Machines Can't Hold the Permission)
- 7.Article 86: What Affected Persons Can Demand From Your AI
- 8.From First Trace to Evidence Package: an EU AI Act Flow Walk-Through
- 9.A NIST AI RMF Self-Assessment You Can Actually Finish
- 10.ISO/IEC 42001 Readiness: 38 Controls, One Honest Score
- 11.Agent-Native Onboarding: Tracing in 10 Lines (and Agents Can Sign Themselves Up)
Ask an observability stack "why did the agent decide this?" and you get spans. Thousands of them.
Somewhere in there is the answer — if you already know what you're looking for, which is exactly what the person asking does not.
The decision packet is the opposite bet: one bounded, signed object that is the answer.
One Object Per Decision
When an agent's trace is sealed, everything the decision needs to be understood later is compiled into a single machine-readable object: the decision packet. It is the machine half of the pair we introduced in the Decision Record walk-through — the PDF is for humans, the packet is for software, and the two travel together.
The design constraint that shapes everything: the packet must be bounded. An auditor's tooling, a GRC platform, or another agent should be able to fetch one object and hold the entire decision in hand — not paginate through an event stream. That constraint is also what makes packets retrievable as precedent, the idea behind decision tracing as institutional memory.
The Top-Level Sections, One by One
Here are the packet's top-level sections and the question each one answers. (Field names below are illustrative of the top-level structure — the point is the shape, not a schema reference.)
| Section | The question it answers |
|---|---|
| Decision summary | What was decided, with what confidence, in which category, at what risk level |
| Context | What was being decided — the request, the entity, the relevant parameters |
| Deliberation | The arguments for and against, each with a weight and a reference to its evidence |
| Alternatives considered | The options not taken, each with its rejection reason |
| Evidence references | Pointers to the sources relied on — cited, not paraphrased |
| Rationale summary | The plain-language justification connecting evidence to outcome |
| Impact assessment | The expected consequences — immediate, short-term, long-term |
| Human oversight | Whether approval was required, why, and the review status |
| Audit metadata | The tamper-evidence fields that tie the packet to its sealed trace |
An Abridged Sample
Abridged to top-level structure, a packet for a credit decision looks like this:
{
"packet_id": "pkt_...",
"trace_id": "trace_...",
"generated_at": "2026-08-05T14:32:00.000Z",
"decision_summary": {
"decision": "Approve credit application",
"confidence": 0.87,
"category": "financial_services",
"risk_level": "high"
},
"context": { "request_type": "credit_increase", "amount_requested": 5000 },
"deliberation_tree": {
"pro_arguments": [ { "argument": "Strong payment history over 24 months",
"weight": 0.85, "evidence": { "source": "payment_records" } } ],
"con_arguments": [ { "argument": "Recent employment change (3 months)",
"weight": 0.40, "evidence": { "source": "employment_records" } } ]
},
"alternatives_considered": [
{ "option": "Partial approval", "rejection_reason": "Net score supports full amount" }
],
"rationale_summary": "Approval recommended: payment history and income ratio outweigh ...",
"impact_assessment": { "immediate": "Credit limit increased", "long_term": "..." },
"human_oversight": { "requires_approval": true, "status": "pending_review" },
"audit_metadata": { "chain_valid": true }
}Two things to notice. First, the con arguments are in there — the packet records what argued against the decision, not just the winning side. A record that only contains supporting reasons is marketing, not evidence. Second, every argument carries an evidence reference, so a reviewer can walk from claim to source instead of taking the rationale on faith.
Why the Packet Is Signed — and How to Verify One Offline
An unsigned record's integrity argument is "trust our database." For an artifact whose whole purpose is to be shown to people who should not have to trust you, that is not enough. So the packet is signed at sealing with Ed25519, and the public verification keys are published as a standard JWKS at /.well-known/jwks.json.
Verification is deliberately vendor-free: fetch the public keys once, then check any packet's signature offline — in your GRC pipeline, in an audit tool, in a script. A valid signature proves the packet was produced by us and has not been modified since sealing. Combined with the tamper-evident hash chain over the underlying trace, the full claim reads: this decision's history is intact, and this summary of it is authentic.
This is the same verification a reader performs on the Decision Record — the PDF simply carries the packet inside it, so the offline check works on the extracted attachment too.
"Isn't This Just Structured Logging With Extra Steps?"
It is a fair challenge, and the honest answer is: the difference is not the format, it is the unit. Logging — structured or not — is event-oriented: it accumulates facts about execution. The packet is decision-oriented: it is the closed argument for one outcome, with the counterarguments and the not-taken paths inside it.
The practical consequences diverge fast. You cannot sign a log stream meaningfully — it never ends. You cannot hand a regulator a query language. And you cannot retrieve "how did we decide cases like this before?" from spans, because the spans do not know what the decision was. We wrote the full comparison in AIAgentree vs LLM logging.
Diagnostic question: in your stack today, is there any single object you could sign that represents a complete decision — or does 'the decision' only exist as a query someone runs over logs after the fact?
Who Consumes Packets
- ✓GRC and audit tooling — ingest packets as evidence objects; verify signatures in the pipeline.
- ✓The Decision Record — every Record embeds its packet, so the human and machine views never diverge.
- ✓Other agents — packets are the retrieval unit for precedent search: past decisions come back as bounded, auditable objects, not text chunks. That story continues in Agent-Native Onboarding.
- ✓Evidence packages — sampled packets ship in the transparency folder of every regulator-facing package.
Sources & Further Reading
- •RFC 8032 — EdDSA / Ed25519 — the signature scheme, IETF (2017)
- •RFC 7517 — JSON Web Key (JWK) — the JWKS publication format, IETF (2015)
- •Regulation (EU) 2024/1689 (EU AI Act) — Articles 12 and 13, the obligations packets serve — EUR-Lex (2024)
Frequently Asked Questions
What is a signed decision packet?
A signed decision packet is the machine-readable record of one sealed AI decision: a single bounded JSON object containing the decision summary, context, deliberation (arguments for and against with evidence references), alternatives considered, rationale, impact assessment, human-oversight status, and audit metadata — signed at sealing so any third party can verify its authenticity offline.
How do I verify a decision packet's signature?
Fetch the public keys from the JWKS published at /.well-known/jwks.json, then verify the packet's Ed25519 signature with any standard library — offline, in your own pipeline. A valid signature proves the packet is authentic and unmodified since sealing; you never have to trust the vendor's storage or portal.
What is the difference between a decision packet and structured logs?
The unit. Logs are event-oriented — an open-ended stream of execution facts you query after the fact. A packet is decision-oriented — one closed, signable object that contains the complete argument for an outcome, including counterarguments, alternatives and evidence references. You can sign, hand over, and retrieve a packet as a unit; none of that works on a stream.
Why does the packet include arguments against the decision?
Because a record containing only supporting reasons is advocacy, not evidence. Auditors and reviewers specifically look for whether risks and counterarguments were considered. The deliberation section records opposing arguments with their weights and evidence references, which is what lets a reviewer see the decision was weighed rather than rationalized.
Is the decision packet format machine-readable for GRC tools?
Yes — that is its purpose. GRC and audit tooling can ingest packets as one evidence object per decision, verify signatures in the pipeline, and index the top-level sections (category, risk level, oversight status) without parsing free text. The same packet is embedded in the human-readable Decision Record PDF, so both audiences read one artifact.
Can other AI agents use decision packets?
Yes. Packets are the retrieval unit for precedent search: an agent facing a new decision can retrieve how similar cases were decided before, returned as bounded, auditable packets rather than text fragments. That makes the record system double as institutional memory instead of write-only compliance storage.
Related Topics
Related Articles
Defensible AI Decisions: The Complete Guide
The hub for this cluster: every artifact, every framework, and where to go deeper.
The Decision Record: the PDF an Auditor Actually Opens
The human half of the pair — with this packet embedded inside it.
Agent-Native Onboarding: Tracing in 10 Lines
How packets get created — and retrieved as precedent — from ten lines of agent code.
AIAgentree Team
Decision Infrastructure
The AIAgentree team is building decision tracing and retrieval infrastructure for AI agents. Our mission is to make AI reasoning visible, auditable, retrievable, and improvable.
Seal your first packet today.
The SDKs are on PyPI and npm, and the free tier covers the trace lifecycle. Ten lines of code from now, your agent's next decision has a signed record.
Start Tracing Free