🚀 Beta: All Pro and Team features are free. Install on GitHub →

Execution proof

A final answer can carry its own execution proof.

When a guarded call produces a machine GuardExecutionProof (outcome.proof), the guard can attach a human-readable proof block to the agent’s final answer. It is a signed, structural attestation of the receipt and execution fields the guard has available — with its boundary stated in the block itself.

What the proof carries

The rendered block makes these structural fields visible: the proof spec; preflight and receipt fields (preflighted, decision_id, receipt verification, status, and expiry); currently_authorized; the bound operation and change_fp; and execution fields including verdict kind, attempted, executed, enforced, and execution_result_hash.

Receipt vocabulary: an authorize response may mint a chain_receipt; downstream gates verify it conjunctively. currently_authorized: null is SKIPPED, not a pass.

What it does NOT claim

The proof states its own boundary. These lines are rendered from the proof’s limits:

  • This block does NOT claim the change is safe.
  • This block does NOT claim the host cannot bypass the package.
  • Absent fields are NOT compliance.
  • change_fp is what was CHECKED at preflight — not what the factory applied.
  • Calls outside the guarded path are invisible to this proof.
  • execution_result_hash is NOT proof that applied artifacts match change_fp.
  • conditional_write:true is host-asserted (the host says it conditioned on a version token); it is NOT independently CAS-verified by the guard.
  • commit_observation is observed at T3, not atomic: another writer may act between write and observation; token-only adapters compare version token not content; host attestation is a host claim layered on the measurement

How to verify one

For the public key registry, frozen format pointer, and reference verifier, use Portable Proof of Authorization →

How to get it

After guardToolCall / withCodeRifts, render or attach the proof from outcome.proof. A string response appends the block; an object response adds final_answer_proof and final_answer_proof_text.

import { renderFinalAnswerProof, attachProofToAgentResponse } from '@coderifts/agent-guard';

// After guardToolCall / withCodeRifts …
const block = renderFinalAnswerProof(outcome.proof); // markdown string
const answer = attachProofToAgentResponse('I applied the authorized edit.', outcome.proof);
// string → appends block; object → adds final_answer_proof + final_answer_proof_text