<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 4.0.6) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-kondoju-evc-01" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="External Verifier Contract">An External Verifier Contract for Agent Authorization Decisions</title>

    <author initials="V. P." surname="Kondoju" fullname="Viswanadha Pratap Kondoju">
      <organization>Bolyra</organization>
      <address>
        <email>viswa@bolyra.ai</email>
      </address>
    </author>

    <date year="2026" month="August" day="27"/>

    <area>Security</area>
    <workgroup>Individual Submission</workgroup>
    <keyword>agent</keyword> <keyword>authorization</keyword> <keyword>verifier</keyword> <keyword>zero-knowledge</keyword> <keyword>selective-disclosure</keyword>

    <abstract>


<?line 53?>

<t>This document specifies the External Verifier Contract (EVC): a small, testable,
proof-system-agnostic boundary between a host (the program about to take a
privileged action on an agent's behalf) and an external verifier (a subprocess
that renders an allow/deny verdict on an opaque proof bundle). The contract
governs only the transport and verdict envelope: how the host hands a single JSON
request to a verifier subprocess over stdin, how the verifier answers with exactly
one JSON verdict on stdout, and how the host interprets exit codes, timeouts, and
malformed output under a fail-closed rule. Three properties make the boundary
standardizable: (1) a single-shot subprocess transport with a closed JSON verdict
schema; (2) fail-closed host semantics that are independently testable by a
host-conformance suite; and (3) proof-system agnosticism, so the same envelope
carries classical-signature, zero-knowledge, and third-party verdicts,
distinguished only by an OPTIONAL self-description field. EVC is deliberately not a
governance framework, not a delegation model, and not a policy language. It is the
narrow decision boundary those larger systems all require at the point of
enforcement.</t>



    </abstract>



  </front>

  <middle>


<?line 72?>

<section anchor="introduction"><name>Introduction</name>

<section anchor="problem"><name>Problem</name>

<t>Agent frameworks -- Model Context Protocol (MCP) hosts, orchestrators, and
gateways -- increasingly need to gate a privileged tool call on a single question:
is this agent actually authorized to take this action right now? Today each host
reimplements a bespoke check and couples itself to one proof format. There is no
interoperable, language-neutral boundary at which a host can ask an external
verifier -- one the host did not build -- for a decision.</t>

</section>
<section anchor="what-evc-standardizes"><name>What EVC Standardizes</name>

<t>EVC standardizes the transport and verdict envelope only. Specifically: how the
host hands a request to a verifier subprocess (one JSON object on stdin, then EOF),
how the verifier answers (exactly one JSON verdict on stdout), how exit codes and
timeouts are interpreted, and the fail-closed obligations that bind the host. The
proof bundle itself is opaque to the host: only a verifier vendor needs to
understand its internal structure. A host adopts the contract by learning four
steps (Section 3), not a proof format.</t>

</section>
<section anchor="what-evc-deliberately-excludes"><name>What EVC Deliberately Excludes</name>

<t>EVC does not define credential issuance, the internal proof format, policy
authoring, delegation semantics, revocation infrastructure, or any PKI. These
belong to the verifier vendor or to adjacent specifications. Keeping the boundary
this small is the design thesis: it is what makes the contract testable rather
than aspirational. Every normative obligation in this document is placed either on
the host or on a conforming verifier at the wire boundary, and nothing below it.</t>

</section>
<section anchor="why-interoperable-why-now"><name>Why Interoperable, Why Now</name>

<t>The contract is not tied to one runtime. Two independent reference hosts already
exist -- one in JavaScript ("spec/reference-host.js") and one in Rust
("spec/reference-host-rs/") -- demonstrating that the host obligations can be
implemented and tested in more than one language. The maintainer of a separate
MCP project (mcp_agent_mail_rust) built an off-by-default Ed25519
registration-proof gate designed to this contract's v1 boundary (issue #183
defines the corresponding spawnable-verifier slot shape); that gate exercises
the contract's request/verdict surface without depending on any Bolyra
component. The host obligations are mechanically testable by a conformance
suite (Section 8), so a host's fail-closed behavior is a checkable property
rather than an assertion. See also the Implementation Status section
(<xref target="impl-status"/>).</t>

</section>
<section anchor="positioning-versus-online-introspection-non-normative"><name>Positioning Versus Online Introspection (Non-Normative)</name>

<t>A verdict is produced offline from a self-contained bundle plus host-supplied
context and the host's wall-clock; there is no round-trip to an authorization
server. This is a deliberate contrast with, not a competitor to, OAuth 2.0 token
introspection <xref target="RFC7662"/>, which resolves a token's state through an online request
to an introspection endpoint. EVC and online introspection can coexist: a bundle
can carry a token that a classical-class verifier (Section 5) validates by
whatever means it chooses, including an out-of-band introspection call, but the
host↔verifier decision boundary itself is a single local subprocess exchange.</t>

</section>
</section>
<section anchor="conventions-and-requirements-language"><name>Conventions and Requirements Language</name>

<t>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 <xref target="RFC2119"/> <xref target="RFC8174"/> when,
and only when, they appear in all capitals, as shown here.</t>

<t>The wire representations in this document are JSON <xref target="RFC8259"/>.</t>

<section anchor="terminology"><name>Terminology</name>

<dl>
  <dt>host:</dt>
  <dd>
    <t>The program about to take a privileged action on an agent's behalf. The host
spawns the verifier, supplies the request, and enforces the verdict fail-closed.</t>
  </dd>
  <dt>verifier:</dt>
  <dd>
    <t>A program the host spawns as a subprocess to decide whether a bundle authorizes a
privileged action. It reads one request on stdin and writes one verdict on
stdout.</t>
  </dd>
  <dt>bundle:</dt>
  <dd>
    <t>An opaque proof string carried in the request. It is opaque to the host: the host
MUST NOT inspect, rewrite, or normalize it. Only a verifier vendor understands its
internal structure.</t>
  </dd>
  <dt>verdict:</dt>
  <dd>
    <t>The single JSON object the verifier writes to stdout: an allow, an allow with
host-owned nonce consumption, or a deny with a code and message.</t>
  </dd>
  <dt>request:</dt>
  <dd>
    <t>The single JSON object the host writes to the verifier's stdin, describing the
privileged action it is about to authorize.</t>
  </dd>
  <dt>decision:</dt>
  <dd>
    <t>The host's enforced outcome (proceed or reject) after applying the verdict and all
fail-closed obligations.</t>
  </dd>
  <dt>proof-system class:</dt>
  <dd>
    <t>The cryptographic family a verifier implements, one of "classical", "zk", or
"external" (Section 5). Self-described by the OPTIONAL verdict field "kind".</t>
  </dd>
  <dt>host nonce mode / local nonce mode:</dt>
  <dd>
    <t>The two replay-protection modes (Section 7). In local mode the verifier owns the
durable nonce store; in host mode the verifier returns nonces for the host to
reserve.</t>
  </dd>
  <dt>reserve-before-act:</dt>
  <dd>
    <t>The host obligation, in host nonce mode, to durably reserve every returned nonce
with unique-insert semantics before performing the privileged action (Section 7).</t>
  </dd>
  <dt>Host-Under-Test (HUT):</dt>
  <dd>
    <t>A host driven by the conformance runner through the environment convention of
Section 8, so hosts in any language can be tested against the same fixtures.</t>
  </dd>
</dl>

</section>
</section>
<section anchor="architecture-and-trust-model"><name>Architecture and Trust Model</name>

<t>The host↔verifier boundary is a single-shot subprocess protocol of four steps:</t>

<t><list style="numbers" type="1">
  <t>The host spawns the verifier command.</t>
  <t>The host writes exactly one JSON request object to the verifier's stdin, then
closes (EOF) stdin.</t>
  <t>The verifier writes exactly one JSON verdict object to its stdout and exits.</t>
  <t>The host reads that one verdict and enforces it fail-closed (Section 6).</t>
</list></t>

<t>Language-neutral pseudocode for the host side:</t>

<figure><artwork><![CDATA[
child   = spawn(verifier_cmd, timeout = 10_000ms)
write(child.stdin, json(request)); close(child.stdin)
status, out, err = wait(child)                 // out = stdout, err = stderr

if status != 0:                               reject("non-zero exit")   // Sec 6
if timed_out(child):                          reject("timeout")         // Sec 6
verdict = parse_single_json_object(out)        // Sec 4; on any failure -> reject
if verdict is null:                            reject("unparseable stdout")

switch verdict.verdict:
  case "allow":
    for entry in (verdict.consume_nonces or []):        // Sec 7 host mode
      if not reserve_nonce_atomically(entry): reject("replay")   // reserve ALL
    proceed()
  case "deny":
    reject(verdict.code)                        // branch on Sec 4.2 registry
  default:
    reject("unknown verdict")
]]></artwork></figure>

<t>The contract is host-agnostic and language-agnostic: a host in any ecosystem MAY
implement or consume the contract without depending on any verifier's internals.</t>

<section anchor="trust-boundaries"><name>Trust Boundaries</name>

<t>The host trusts exactly two things: (a) the verifier command it configured -- which
binary and argument vector it spawned -- and (b) the trust configuration it supplied
to that verifier, such as trusted roots, a capability map, or a signer list. The
host does NOT trust the bundle, and it MUST NOT infer trust from any self-reported
field in the verdict, notably the "kind" self-description (Section 5).</t>

<t>The verifier trusts its configured roots and policy. "No roots configured" is never
"all roots trusted": a verifier that has no trust source configured MUST fail
closed rather than accept anything.</t>

</section>
<section anchor="time-source"><name>Time Source</name>

<t>The host owns the clock. The request field "now_unix" is host-supplied, and the
verifier MUST evaluate credential expiry against that value rather than its own
clock. This is an explicit trust-model property: expiry is judged against the
host's wall-clock, so the host, not the verifier, is authoritative about the
current time.</t>

</section>
</section>
<section anchor="request-and-verdict-envelopes"><name>Request and Verdict Envelopes</name>

<t>This section transcribes the wire envelopes. The full JSON Schemas appear
normatively in <xref target="schemas"/>.</t>

<section anchor="request"><name>Host to Verifier Request (stdin)</name>

<t>The host MUST write exactly one JSON object, UTF-8 encoded, to the verifier's
stdin, and then MUST close (EOF) stdin. The host MUST NOT write more than one
object, trailing bytes, or a stream of objects.</t>

<figure><sourcecode type="json"><![CDATA[
{
  "version": 1,
  "bundle": "<opaque proof string>",
  "request": {
    "agent_name": "research-bot",
    "project_key": "/work/acme/research",
    "program": "crewai",
    "model": "opus-4.1",
    "granted_capabilities": ["fetch_inbox", "send_message"]
  },
  "now_unix": 1751990400
}
]]></sourcecode></figure>

<t>Field requirements:</t>

<t><list style="symbols">
  <t>"version" (integer, REQUIRED) -- envelope version of the host request. A verifier
that implements this contract MUST support "1" and MUST reject any other value
with "deny code=unsupported_version" (<xref target="denial-codes"/>). Negotiation is by major only
(<xref target="versioning"/>).</t>
  <t>"bundle" (string, REQUIRED, non-empty) -- opaque to the host. The verifier owns
its internal structure. The host MUST NOT inspect, rewrite, or normalize it.</t>
  <t>"request" (object, REQUIRED) -- the privileged action the host is about to
authorize. It MUST contain:
  <list style="symbols">
      <t>"agent_name" (string, REQUIRED).</t>
      <t>"project_key" (string, REQUIRED) -- compared literally, byte-for-byte, against
the bundle's signed binding. The verifier MUST NOT apply path canonicalization
(no ".." resolution, no symlink resolution): "a/../b" and "b" are distinct
keys. This byte-literal rule is a subtle interoperability hazard and is stated
explicitly to prevent a verifier from silently normalizing a project key.</t>
      <t>"program" (string, REQUIRED).</t>
      <t>"model" (string, REQUIRED).</t>
      <t>"granted_capabilities" (array of strings, REQUIRED) -- host-defined capability
tokens the host intends to grant. They are opaque strings that the verifier
maps to its internal permission model. An empty array is permitted.</t>
    </list></t>
  <t>"now_unix" (integer, REQUIRED, positive) -- the host's current wall-clock time in
seconds since the Unix epoch. The verifier MUST evaluate credential expiry
against this value, not against its own clock.</t>
</list></t>

<t>A request that is not a JSON object, is missing a REQUIRED field, or has a field of
the wrong type MUST yield "deny code=malformed_input". A well-formed request whose
"version" is not "1" MUST yield "deny code=unsupported_version".</t>

</section>
<section anchor="verdict"><name>Verifier to Host Verdict (stdout)</name>

<t>The verifier MUST write exactly one JSON object to stdout and nothing else
(<xref target="fd-isolation"/> governs this strictly). The verdict is one of three shapes.</t>

<section anchor="allow"><name>Allow</name>

<figure><sourcecode type="json"><![CDATA[
{ "verdict": "allow" }
]]></sourcecode></figure>

</section>
<section anchor="allow-with-host-owned-nonce-consumption"><name>Allow With Host-Owned Nonce Consumption</name>

<t>Emitted only in host nonce mode (Section 7). It instructs the host to durably
record each one-time nonce so the same proof cannot be replayed. A presentation can
carry more than one nonce to reserve -- for example the agent nullifier plus a
human-uniqueness nullifier when the bundle is human-backed (the human entry's
"nonce" is namespaced "human:NULLIFIER-HASH").</t>

<figure><sourcecode type="json"><![CDATA[
{
  "verdict": "allow",
  "consume_nonces": [
    {
      "issuer_key": "15617329...:20201653...",
      "nonce": "12616665119450508255185458876855962314592339945640375882344193391684757282246",
      "retain_until": 4102444800
    }
  ]
}
]]></sourcecode></figure>

<t>"consume_nonces" (array of objects, OPTIONAL, allow-only). When present it is a
non-empty list (the key is omitted entirely when there is nothing to burn). The
host MUST reserve-before-act EACH entry (Section 7). Each entry:</t>

<t><list style="symbols">
  <t>"issuer_key" (string, REQUIRED) -- the issuer/operator key that scopes the nonce
namespace, for host bookkeeping only; the "nonce" is already globally unique
(Section 7).</t>
  <t>"nonce" (string, REQUIRED) -- the one-time value the host MUST record.</t>
  <t>"retain_until" (integer, REQUIRED) -- Unix seconds until which the host MUST
retain the consumed nonce.</t>
</list></t>

</section>
<section anchor="deny"><name>Deny</name>

<figure><sourcecode type="json"><![CDATA[
{
  "verdict": "deny",
  "code": "scope_exceeded",
  "message": "required scope exceeds the credential effective scope",
  "detail": { "required_scope": "2", "effective_scope": "1", "excess_bits": "2" }
}
]]></sourcecode></figure>

<t><list style="symbols">
  <t>"verdict" (string, REQUIRED) -- "allow" or "deny".</t>
  <t>"code" (string, REQUIRED on deny) -- a stable machine token from the registry in
<xref target="denial-codes"/>. The host MAY branch on it.</t>
  <t>"message" (string, REQUIRED on deny) -- a one-line, human-actionable reason. It
MUST NOT contain secrets.</t>
  <t>"detail" (object, OPTIONAL) -- structured context for logs/debugging. A verifier
SHOULD echo the originating internal error code here so the coarse wire "code"
stays stable while logs stay precise.</t>
  <t>"kind" (string, OPTIONAL) -- the verifier's proof-system self-description, one of
"classical", "zk", or "external" (Section 5). It MAY appear on either an "allow"
or a "deny" verdict. When absent, the host MUST interpret the verdict as "zk". A
verifier whose class is not "zk" MUST set "kind" explicitly, because omission is
read as "zk".</t>
</list></t>

</section>
</section>
<section anchor="denial-codes"><name>Denial-Code Registry</name>

<t>The stable, lowercase snake_case vocabulary for the verdict "code" field. This
table is the single normative source; hosts MAY branch on these tokens.</t>

<t>Within a wire major, this registry is closed: the deny schema (<xref target="schemas"/>)
enumerates exactly these codes, so a verdict carrying any other "code" fails
the verdict schema and the host MUST fail closed (<xref target="fail-closed"/>) under its own
classification ("schema_invalid", <xref target="failure-classes"/>) rather than relay it. A host
MUST NOT relay an unrecognized "code" as if it were a valid verifier decision:
an out-of-registry code identifies a non-conforming verifier, not a
forward-compatible denial, and relaying it would let such a verifier introduce
denial semantics this contract never defined. The net effect for the caller is
unchanged -- an unrecognized "code" always ends in deny -- but the deny is the
host's fail-closed override, never a relayed verdict. (This paragraph replaces
the -00 sentence "hosts ... MUST treat an unrecognized future 'code' as deny",
which was ambiguous about the mechanism and was readable as relay-tolerance;
see the implementation experience in <xref target="impl-status"/>.)</t>

<t>Verifiers MUST NOT add, remove, or
rename a code without a wire-major version bump (<xref target="versioning"/>). The registry is
proof-system-agnostic (Section 5): a "classical"- or "external"-kind verifier
reuses the same codes -- for example "invalid_proof" covers a failed classical
signature or token check as well as a failed zero-knowledge verification.</t>

<texttable>
      <ttcol align='left'>code</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c>malformed_input</c>
      <c>stdin missing / oversized (&gt; 1 MiB) / not JSON, or a required request field is missing or ill-typed.</c>
      <c>unsupported_version</c>
      <c>host request "version" is not "1", or the bundle's internal version is unsupported.</c>
      <c>invalid_bundle</c>
      <c>the opaque "bundle" is undecodable, not an object, or structurally wrong.</c>
      <c>invalid_proof</c>
      <c>envelope validation or proof verification failed, the mandatory verification-key pin is absent/mismatched, or the credential-to-proof anchoring failed.</c>
      <c>untrusted_root</c>
      <c>a proof's trust anchor (agent, human, or delegatee) is not in the configured trusted-root source.</c>
      <c>delegation_invalid</c>
      <c>a delegation chain break, hop-cap overflow, scope expansion, or expiry expansion.</c>
      <c>invalid_signature</c>
      <c>the request-binding signature (Appendix B) did not verify against the proven operator key.</c>
      <c>request_mismatch</c>
      <c>a host "request" field does not match the signed binding, or "granted_capabilities" are not covered by the binding's capabilities.</c>
      <c>model_mismatch</c>
      <c>the proof's committed model does not equal the requested model -- the proof is for a different model.</c>
      <c>unknown_capability</c>
      <c>a requested capability has no scope mapping (fail-closed; unmapped is never silently allowed).</c>
      <c>scope_exceeded</c>
      <c>the capability-required permission bits are not a cumulative-bit subset of the proven effective scope.</c>
      <c>expired</c>
      <c>proof-anchored "now_unix &gt;= effective_expiry" -- a strict comparison; the equality boundary is rejected.</c>
      <c>nonce_missing</c>
      <c>the proof lacks a usable nullifier / session-nonce signal.</c>
      <c>nonce_replayed</c>
      <c>the proof's one-time nonce was already seen (local mode).</c>
      <c>internal_error</c>
      <c>unexpected failure, missing artifacts, or missing trust configuration. Emitted as a deny AND with a non-zero exit code.</c>
</texttable>

<t>All rows are terminal denies. Only "internal_error" additionally sets a non-zero
exit code (Section 6). This 15-code table is the candidate IANA registry
(<xref target="iana"/>).</t>

</section>
<section anchor="fd-isolation"><name>stdout / stderr / fd-Level Isolation (Load-Bearing)</name>

<t>The whole contract depends on stdout carrying exactly one JSON object and nothing
else. This is the single most fragile part of the implementation and is normative
for both sides.</t>

<t>Verifier obligations:</t>

<t><list style="symbols">
  <t>The verifier MUST write exactly one serialized verdict to the host-facing stdout,
at the very end. A single trailing newline is OPTIONAL.</t>
  <t>No other code path may write to the host-facing stdout. Proof-verification
libraries (native, WASM, or otherwise) can write to file descriptor 1 directly --
progress bars, warnings, debug output -- bypassing any language-level stdout
wrapper. A "console.log"-style monkeypatch is therefore insufficient: it misses
native writes.</t>
  <t>A conforming verifier MUST separate verification from verdict-emission at the
file-descriptor level. The reference mechanism is process isolation with a private
verdict channel: the command spawns a worker whose stdio binds fd 0 = request in,
fd 1 = captured (everything native writes here), fd 2 = inherited parent stderr,
and fd 3 = the private verdict channel. Any raw fd-1 writes inside the worker MUST
be captured by the parent and forwarded to the parent's stderr, and MUST NOT reach
the host-facing stdout. The worker emits the single verdict only on fd 3; the
parent performs the sole write to fd 1.</t>
  <t>If the private verdict channel cannot be established on the platform, the verifier
MUST fail closed ("deny code=internal_error", non-zero exit). It MUST NOT silently
fall back to sharing fd 1. An in-process fd-redirect realization is equally
acceptable where the platform exposes the primitive; the process-isolation form is
the reference implementation and is strictly stronger.</t>
</list></t>

<t>Host obligations (single-object parse):</t>

<t>The host MUST parse the verifier's stdout as exactly one JSON object with no
trailing bytes, and MUST reject (treat as deny, Section 6) any of:</t>

<t><list style="symbols">
  <t>stdout that is empty, not valid JSON, or contains a leading/trailing prefix or
suffix around the object;</t>
  <t>multiple concatenated JSON values (a lenient parser that reads only the first
object MUST NOT be used -- two objects is a fail-closed condition);</t>
  <t>a verdict whose "verdict" field is neither "allow" nor "deny", or a "deny" missing
"code"/"message".</t>
</list></t>

<t>All diagnostics, timing, and debug logging MUST go to stderr. Hosts MUST NOT parse
stderr for the verdict.</t>

</section>
</section>
<section anchor="kind"><name>Proof-System Classes and the <spanx style="verb">kind</spanx> Self-Description</name>

<t>Because the contract is proof-system-agnostic (Section 1), the same wire envelope
carries verdicts from verifiers built on different cryptographic foundations: a
classical-signature verifier, a zero-knowledge verifier, and a third-party verifier
all speak the identical request and verdict schema and differ only in which command
the host spawns. This is the property that lets a host adopt privacy-preserving
verification without changing its wire contract.</t>

<t>The OPTIONAL verdict field "kind" lets a verifier declare which class it implements,
so a host that spawns a verifier it did not build -- or that fans a request across
several verifiers -- can record and, if it chooses, branch on the class of proof
that produced the decision. "kind" takes exactly one of three values:</t>

<texttable>
      <ttcol align='left'>kind</ttcol>
      <ttcol align='left'>Proof-system class</ttcol>
      <ttcol align='left'>Examples</ttcol>
      <c>classical</c>
      <c>Classical public-key crypto -- signatures, tokens, policy/nonce checks, no zero-knowledge.</c>
      <c>ES256K-signed receipts, JWT delegation tokens, capability/scope and replay-nonce checks.</c>
      <c>zk</c>
      <c>Zero-knowledge circuit proofs.</c>
      <c>Zero-knowledge proofs for private delegation, credential predicates, human-uniqueness nullifiers.</c>
      <c>external</c>
      <c>A third-party verifier implementing this contract with its own proof system.</c>
      <c>A vendor verifier the host adopts without depending on any specific internals.</c>
</texttable>

<section anchor="selective-disclosure-as-a-first-class-optional-lane"><name>Selective Disclosure as a First-Class, Optional Lane</name>

<t>A "zk"-class verifier proves properties of a credential -- scope, expiry, a
human-uniqueness nullifier, delegation narrowing -- without revealing the agent's
identity or the underlying attribute values. This selective-disclosure capability
is one that no signature-only contract can express, because a classical signature
necessarily discloses the signed content it authenticates.</t>

<t>The normative point is deliberately narrow: EVC does NOT require zero-knowledge
verification, but it reserves a first-class lane for it via "kind=zk". A host that
wants privacy-preserving verification and a host that wants a plain signature check
speak the identical wire protocol and differ only in which verifier command they
spawn. The privacy property is a property of the verifier the host configures, not
of the wire contract.</t>

</section>
<section anchor="normative-rules-for-kind"><name>Normative Rules for <spanx style="verb">kind</spanx></name>

<t><list style="symbols">
  <t>A verifier SHOULD set "kind" to the class it implements.</t>
  <t>A verifier that implements this contract as a "classical"- or "external"-class
verifier MUST set "kind" explicitly, because omission is read as "zk". A verifier
MUST NOT emit a "kind" value outside the three-member set above; a host MUST treat
an unrecognized "kind" as a malformed verdict and fail closed (Section 6).</t>
  <t>For backward compatibility, a verdict without "kind" MUST be interpreted by the
host as "zk". A "zk"-class verifier MAY therefore omit the field. Because a host
validating against the original closed verdict schema rejects any "kind"-bearing
verdict (<xref target="versioning"/>), a "zk"-class verifier that must remain interoperable with
such a host SHOULD omit "kind" rather than emit "kind":"zk".</t>
</list></t>

</section>
<section anchor="guardrails-advisory-metadata-not-an-authorization-input"><name>Guardrails (Advisory Metadata, Not an Authorization Input)</name>

<t>"kind" is advisory metadata about provenance, and it is self-reported by the
verifier and NOT authenticated. The "verdict", "code", and (in host nonce mode)
"consume_nonces" fields are the sole enforcement surface. A host:</t>

<t><list style="symbols">
  <t>MUST NOT upgrade a "deny" to an "allow" on the basis of "kind";</t>
  <t>MUST NOT relax any Section 6 fail-closed obligation, schema validation, verifier
selection, or nonce handling on the basis of "kind";</t>
  <t>MUST establish a verifier's proof-system class from its configured verifier
identity or policy -- which command it spawned and the trust configuration it
supplied -- never from the self-reported "kind" string alone.</t>
</list></t>

<t>A host MAY use "kind" for logging, or to deny more strictly on a mismatch between
the expected and reported class. An unrecognized "kind" is a malformed verdict and
MUST fail closed (Section 6). The threat guarded against is a hostile or buggy
verifier claiming "kind=zk" to imply privacy guarantees it did not provide.</t>

</section>
<section anchor="relationship-to-the-related-aps-draft"><name>Relationship to the Related APS Draft</name>

<t>The related draft <xref target="I-D.pidlisnyi-aps"/> does not define a zero-knowledge or
selective-disclosure verifier class (<xref target="aps"/>). EVC's "kind" lane is where
privacy-preserving verification plugs into an otherwise-identical host contract,
regardless of which framework produced the bundle.</t>

</section>
</section>
<section anchor="fail-closed-chapter"><name>Exit Codes, Timeouts, and Host Fail-Closed Obligations</name>

<section anchor="exit-code-semantics-verifier"><name>Exit-Code Semantics (Verifier)</name>

<t><list style="symbols">
  <t>Exit "0" -- a verdict object was produced ("allow" or any policy/crypto "deny").
The host reads stdout for the decision.</t>
  <t>Exit non-zero -- the verifier could not produce a trustworthy verdict at all
(could not read stdin, could not load required artifacts or trust configuration,
catastrophic internal failure). Decision-level outcomes (invalid proof, expired,
replay, mismatch) are NOT errors: they exit "0" with "verdict=deny".</t>
  <t>The one nuance: "internal_error" is emitted as "deny code=internal_error" AND
exits non-zero, so the host both sees a machine reason and fail-closes.</t>
</list></t>

</section>
<section anchor="exit-status-dominates-a-stdout-allow"><name>Exit Status Dominates a stdout Allow</name>

<t>A host MUST treat a non-zero exit as deny even when a syntactically valid "allow"
was written to stdout. Exit status is part of the contract; whenever it is non-zero
the host MUST ignore stdout for the purpose of the decision. This is the one place
an implementer may be tempted to trust stdout, and it is stated explicitly to close
that temptation. No non-zero exit -- including "internal_error" -- ever yields an
allow.</t>

</section>
<section anchor="timeout-and-input-bounds"><name>Timeout and Input Bounds</name>

<t>The host owns the timeout; the verifier does not implement its own. The host MUST
enforce a wall-clock timeout on the spawned process and treat expiry as deny. The
RECOMMENDED timeout is 10 000 ms (10 s); a conforming verifier targets under 2 s at
the 99th percentile, so 10 s leaves ample headroom. The verifier MUST bound the
request read from stdin; the reference limit is 1 MiB (1 048 576 bytes). A request
over the bound MUST yield "deny code=malformed_input"; the verifier MUST NOT buffer
an unbounded request.</t>

</section>
<section anchor="fail-closed"><name>The Fail-Closed Set</name>

<t>The host MUST treat ALL of the following as deny, regardless of what (if anything)
reached stdout:</t>

<t><list style="symbols">
  <t>non-zero exit code;</t>
  <t>timeout -- the host MUST kill the process and deny;</t>
  <t>death by signal / crash;</t>
  <t>unparseable, empty, oversized, or multi-object stdout (<xref target="fd-isolation"/>);</t>
  <t>an unknown "verdict" value or a "deny" missing required fields;</t>
  <t>a verdict that otherwise fails the verdict schema (<xref target="schemas"/>) -- including an
unrecognized "kind" value, a "code" outside the denial-code registry
(<xref target="denial-codes"/>), or any disallowed additional property.</t>
</list></t>

<t>Several of these conditions can co-occur for one verifier run: a killed process
both dies by signal and leaves stdout unparseable. The decision is a deny on
every branch. When a host reports fail-closed classes (<xref target="failure-classes"/>), it SHOULD
classify the cause it acted on in this precedence: the host's own kills first
(output bound, then timeout), then an unsolicited signal death, then a non-zero
exit, and only then the stdout parse and schema checks. In particular, death by
an unsolicited signal and a non-zero exit are distinct conditions
("signal_death" and "nonzero_exit", <xref target="failure-classes"/>) and a host MUST NOT collapse
them into one classification. Both reference hosts implement this precedence;
an early independent host implementation collapsed the two and was caught by
the conformance suite (see <xref target="impl-status"/>).</t>

<t>The verifier is designed so these are the only ways it fails ambiguously; every
outcome it can reason about is an explicit "deny" with a "code" (<xref target="denial-codes"/>).</t>

</section>
</section>
<section anchor="replay-protection-and-reserve-before-act"><name>Replay Protection and Reserve-Before-Act</name>

<t>A verifier supports one of two replay modes, selected by the host at spawn time.</t>

<t><list style="symbols">
  <t>local (default). The verifier owns durable replay state. On an otherwise-allow it
burns the proof's one-time nonce locally; a second presentation of the same proof
yields "deny code=nonce_replayed". Suitable for a single-host deployment. If the
store errors, the verifier MUST fail closed ("deny code=internal_error", non-zero
exit).</t>
  <t>host. The verifier does not persist nonces. On an otherwise-allow it returns
"consume_nonces" (Section 4.2), one entry per one-time nullifier the presentation
carries (the agent nullifier, plus the human-uniqueness nullifier for a
human-backed bundle), and the host owns durable storage under the
reserve-before-act rule. This is the mode for multi-host or clustered deployments
where the host already owns a database.</t>
</list></t>

<t>The agent nonce value is globally unique per (credential, session-nonce), so no
separate operator namespacing is needed; "consume_nonces[].issuer_key" is provided
for host-side bookkeeping only. Delegation hops add no entry: each per-hop
delegation nullifier is bound to the agent's session nonce, so reserving the agent
nullifier already covers delegation replay. The human-uniqueness nullifier for a
human-backed bundle is carried as a second reserved entry, namespaced
"human:NULLIFIER-HASH".</t>

<section anchor="reserve-before-act-host-nonce-mode"><name>Reserve-Before-Act (Host Nonce Mode)</name>

<t>When the host runs the verifier in host nonce mode and receives "allow" with
"consume_nonces", the host MUST reserve every entry in the list before performing
the privileged action:</t>

<t><list style="numbers" type="1">
  <t>For each entry in "consume_nonces", atomically insert "entry.nonce" into durable
storage with a unique-insert / "on conflict reject" semantic, retaining it until
"entry.retain_until".</t>
  <t>If all inserts are novel, proceed with the action.</t>
  <t>If any insert conflicts (that nonce was already recorded), the host MUST reject
the action as a replay -- even though the verifier returned "allow".</t>
</list></t>

<t>"Record after proceeding" is a replay window and is FORBIDDEN. The verifier's
"allow" in host mode is conditional on every host insert being novel.</t>

</section>
</section>
<section anchor="conformance"><name>Host Conformance</name>

<t>The differentiator between this contract and a governance framework is that the
host obligations are mechanically testable. Sections 4, 6, and 7 place the
load-bearing obligations on the host: it owns the timeout, the single-object stdout
parse, the exit-code interpretation, and reserve-before-act nonce consumption. A
verifier that follows the contract is not enough -- a host that trusts a
misbehaving verifier is the actual vulnerability. This section makes those host
obligations testable.</t>

<t>The suite spawns a deliberately misbehaving verifier fixture in place of a real
verifier and asserts that the host-under-test fails closed. A conforming host MUST
deny in every non-positive case below.</t>

<section anchor="misbehaving-verifier-fixtures"><name>Misbehaving-Verifier Fixtures</name>

<t>The fixtures are small, dependency-free scripts, each violating exactly one contract
obligation. The "Required host outcome" column is the normative behavior a
conforming host MUST produce; the "Class" column is the reference host's canonical
failure classification (Section 8.3). The inventory below is 27 fixtures that drive
28 "host_behavior" vectors, confirmed in "spec/test-vectors.json": the
"allow-consume-nonces.js" fixture drives two vectors (a novel-reserve allow and a
replay deny), so the fixture count is one fewer than the vector count.</t>

<texttable>
      <ttcol align='left'>Fixture</ttcol>
      <ttcol align='left'>Violates</ttcol>
      <ttcol align='left'>Required host outcome</ttcol>
      <ttcol align='left'>Class</ttcol>
      <c>well-behaved-allow</c>
      <c>-- (positive control)</c>
      <c>relay allow</c>
      <c>--</c>
      <c>well-behaved-deny</c>
      <c>-- (positive control)</c>
      <c>relay deny code=expired</c>
      <c>--</c>
      <c>well-behaved-allow-kind-classical</c>
      <c>-- (positive control, "kind")</c>
      <c>relay allow</c>
      <c>--</c>
      <c>well-behaved-allow-kind-external</c>
      <c>-- (positive control, "kind")</c>
      <c>relay allow</c>
      <c>--</c>
      <c>non-json-stdout</c>
      <c>stdout not valid JSON</c>
      <c>deny</c>
      <c>unparseable_stdout</c>
      <c>multiple-objects</c>
      <c>two concatenated verdicts</c>
      <c>deny</c>
      <c>multiple_objects | unparseable_stdout</c>
      <c>schema-invalid-verdict</c>
      <c>"verdict" neither allow nor deny</c>
      <c>deny</c>
      <c>schema_invalid</c>
      <c>deny-missing-fields</c>
      <c>"deny" missing code/message</c>
      <c>deny</c>
      <c>schema_invalid</c>
      <c>allow-trailing-garbage</c>
      <c>valid allow then trailing bytes</c>
      <c>deny</c>
      <c>unparseable_stdout</c>
      <c>binary-garbage-stdout</c>
      <c>raw non-UTF-8 bytes on stdout</c>
      <c>deny</c>
      <c>unparseable_stdout</c>
      <c>leading-garbage</c>
      <c>non-JSON prefix before a valid allow</c>
      <c>deny</c>
      <c>unparseable_stdout</c>
      <c>allow-extra-property</c>
      <c>closed schema -- disallowed additional property</c>
      <c>deny</c>
      <c>schema_invalid</c>
      <c>bad-kind</c>
      <c>"kind" outside classical/zk/external</c>
      <c>deny</c>
      <c>schema_invalid</c>
      <c>empty-consume-nonces</c>
      <c>"consume_nonces" violates minItems:1</c>
      <c>deny</c>
      <c>schema_invalid</c>
      <c>malformed-consume-nonce</c>
      <c>nonce entry missing issuer_key/retain_until</c>
      <c>deny</c>
      <c>schema_invalid</c>
      <c>deny-extra-property</c>
      <c>closed "deny" -- disallowed additional property</c>
      <c>deny</c>
      <c>schema_invalid</c>
      <c>unknown-denial-code</c>
      <c>well-formed "deny" with an out-of-registry "code" (<xref target="denial-codes"/>)</c>
      <c>deny, never relayed</c>
      <c>schema_invalid</c>
      <c>nonce-entry-extra-property</c>
      <c>nonce entry has an extra property</c>
      <c>deny</c>
      <c>schema_invalid</c>
      <c>nonce-entry-wrong-type</c>
      <c>nonce entry retain_until not an integer</c>
      <c>deny</c>
      <c>schema_invalid</c>
      <c>no-output-hang</c>
      <c>no output, never exits</c>
      <c>deny (kill on timeout)</c>
      <c>timeout</c>
      <c>partial-json-hang</c>
      <c>partial verdict then hangs</c>
      <c>deny (kill on timeout)</c>
      <c>timeout</c>
      <c>slow-allow-past-deadline</c>
      <c>valid allow, but only after the deadline</c>
      <c>deny (kill on timeout)</c>
      <c>timeout</c>
      <c>nonzero-exit-after-allow</c>
      <c>valid allow on stdout but non-zero exit</c>
      <c>deny (Section 6.2)</c>
      <c>nonzero_exit</c>
      <c>killed-by-signal</c>
      <c>death by signal, no verdict</c>
      <c>deny</c>
      <c>signal_death | unparseable_stdout</c>
      <c>oversize-flood</c>
      <c>floods stdout past the output bound</c>
      <c>deny (bound + kill)</c>
      <c>oversize_stdout</c>
      <c>allow-consume-nonces</c>
      <c>-- (drives reserve-before-act)</c>
      <c>reserve then allow, or deny on replay</c>
      <c>replay on conflict</c>
      <c>allow-consume-nonces-multi</c>
      <c>-- (drives reserve-all)</c>
      <c>deny if any entry conflicts</c>
      <c>replay on conflict</c>
</texttable>

<t>The "schema_invalid" fixtures collectively exercise the closed verdict schema at
every level: an unknown "verdict", a "deny" missing "code"/"message", additional
properties on both the "allow" and "deny" objects, a bad "kind", and -- for
"consume_nonces" -- an empty array, a missing required entry field, an extra entry
property, and a wrong-typed entry field. A host that validates only the outer
object, or only a subset of the nonce-entry schema, is therefore caught.</t>

</section>
<section anchor="host-under-test-hut-convention"><name>Host-Under-Test (HUT) Convention</name>

<t>The runner drives any host through a thin, language-neutral convention so a host in
any ecosystem can be tested against the same fixtures. The runner spawns the host
once per vector and communicates as follows.</t>

<t>Environment -- the runner sets, and the host MUST honor:</t>

<t><list style="symbols">
  <t>"HUT_VERIFIER_CMD" -- a JSON array (argv) the host MUST spawn as its verifier. The
host MUST NOT substitute a different command.</t>
  <t>"HUT_TIMEOUT_MS" -- the wall-clock timeout the host MUST enforce.</t>
  <t>"HUT_MAX_STDOUT_BYTES" -- the stdout output bound the host MUST enforce; exceeding
it is a fail-closed condition.</t>
  <t>"HUT_NONCE_MODE" -- "local" or "host".</t>
  <t>"HUT_NONCE_STORE" -- a filesystem path the host uses as its durable nonce store in
host nonce mode. For the harness only, the store format is newline-delimited
decimal nonce strings, UTF-8. A production host with a different store tests
against this suite by pointing a thin test adapter at this file format; the format
is a test convention, not part of the wire contract.</t>
  <t>"HUT_ACTION_LOG" -- a filesystem path. The host MUST append a non-empty marker at
the moment it authorizes the action -- after every reservation succeeds and
immediately before returning "allow" -- and MUST NOT write on any deny. This is
the observable proxy for the "act" in reserve-before-act.</t>
  <t>"HUT_FIXTURE_PIDFILE" -- a filesystem path the host MUST propagate to the spawned
verifier so the kill-proof fixtures can record their PID; the runner then confirms
the host killed the verifier on timeout/oversize. For kill-proof vectors a missing
pidfile is itself a failure.</t>
</list></t>

<t>stdin -- the runner writes exactly one request object (Section 4.1) to the host's
stdin and closes it. The host forwards this to the verifier.</t>

<t>stdout -- the host MUST write exactly one decision object and exit "0". The
fail-closed signal is the decision object, NOT the host's own exit code; a host
that itself exits non-zero fails the convention. The decision is exactly one of
three closed shapes:</t>

<t><list style="symbols">
  <t>{"decision":"allow"} -- the verifier allowed (and, in host nonce mode, every nonce
was reserved as novel); no other key is permitted;</t>
  <t>{"decision":"deny","code":"CODE"} -- a schema-valid verifier "deny", relayed
unchanged; the host MUST NOT attach a "failure_class" to a genuine verifier deny;</t>
  <t>{"decision":"deny","failure_class":"CLASS"} -- the host itself fail-closed or
rejected a replay; it MUST NOT also carry a "code".</t>
</list></t>

<t>This decision envelope exists only for the conformance harness; it is NOT part of
the wire contract and imposes nothing on a production host's internal API.</t>

</section>
<section anchor="failure-classes"><name>Host Failure Classes</name>

<t>When a host fails closed, the runner asserts why, using the classification the host
reports in "decision.failure_class". This proves the host detected the specific
violation rather than denying by accident. The normative requirement is always
deny; the failure class is the finer-grained assertion.</t>

<texttable>
      <ttcol align='left'>failure_class</ttcol>
      <ttcol align='left'>Fail-closed condition</ttcol>
      <c>nonzero_exit</c>
      <c>verifier exited non-zero</c>
      <c>timeout</c>
      <c>host timeout fired; host killed the process</c>
      <c>signal_death</c>
      <c>verifier died by an unsolicited signal</c>
      <c>unparseable_stdout</c>
      <c>stdout empty, not JSON, or with trailing bytes</c>
      <c>multiple_objects</c>
      <c>stdout carried more than one JSON value</c>
      <c>oversize_stdout</c>
      <c>stdout exceeded the host output bound</c>
      <c>schema_invalid</c>
      <c>a parsed verdict failed the verdict schema</c>
      <c>replay</c>
      <c>a "consume_nonces" entry was already reserved</c>
      <c>spawn_error</c>
      <c>the host could not spawn or drive the verifier at all</c>
</texttable>

<t>Because several fail-closed conditions can co-occur for one input, a vector MAY
admit more than one acceptable class. For example, a verifier killed by a signal
both dies by signal and leaves stdout empty. Where a fixture triggers a single
unambiguous condition, the vector pins the single class: a host that denies but
misclassifies it (for example calling an unbounded flood "unparseable_stdout"
instead of enforcing the "oversize_stdout" bound) is flagged, because the
misclassification reveals a real gap.</t>

</section>
<section anchor="two-independent-reference-hosts-and-scope-limits"><name>Two Independent Reference Hosts and Scope Limits</name>

<t>Two independent reference hosts demonstrate portability: one in JavaScript
("spec/reference-host.js") and one in Rust ("spec/reference-host-rs/", producing an
"evc-reference-host" binary). Both pass the full suite; each is concrete interop
evidence that the host obligations are implementable and testable in more than one
language.</t>

<t>As a black-box harness the suite proves three things about reserve-before-act: the
reservation is durably written (novel case), authorization is gated on the durable
uniqueness check (replay case, the primary guarantee), and every entry is checked
(reserve-all case). It does NOT prove the fine-grained intra-allow-path ordering --
that within a single "allow" the durable write is committed strictly before the
action marker -- because distinguishing "reserve then act" from "act then reserve,
both before returning allow" would require fault injection, which a portable
black-box runner cannot induce. That crash-safety property remains a host
obligation (Section 7); this suite asserts the observable gate, not the write
barrier. Implementers SHOULD additionally cover the crash-window ordering with an
in-process test in their own codebase. Stating this limit openly is deliberate: it
scopes exactly what the conformance claim does and does not cover.</t>

</section>
</section>
<section anchor="versioning"><name>Wire Versioning</name>

<t>Two version tokens live at different layers with deliberately different rules.</t>

<t>Wire-facing envelopes are integer-major. The host request "version" (Section 4.1)
and the internal bundle version are single integers, negotiated by major only. A
verifier supports a fixed set of wire majors; an unsupported major is
"deny code=unsupported_version". There is no minor/patch at the wire layer: any
breaking change to the request or verdict envelope increments the integer. The
denial-code registry (<xref target="denial-codes"/>) is part of the wire contract and is therefore
also governed by the integer-major rule: adding, removing, or renaming a code is a
wire-major change. Embedded proofs carried inside the opaque bundle keep their own
semantic-version string and the verifier's existing major-only compatibility rule.</t>

<t>Additive OPTIONAL fields with a defined default do not bump the wire major. The
verdict "kind" field (Section 5) is OPTIONAL and its absence has a defined meaning
("zk"). Adding it is compatible in the two directions that occur in practice: (i) a
verifier that omits "kind" -- which includes every wire-1 verifier that predates
the field, all of them "zk"-class -- produces verdicts that both pre-revision and
revision-aware hosts accept; and (ii) a revision-aware host accepts those older
no-"kind" verdicts unchanged, reading them as "zk".</t>

<t>The one caveat, stated plainly: the verdict schema is closed
("additionalProperties: false"), so a host validating against the original schema
will reject any verdict that actually carries "kind" -- including a "zk" verifier's
explicit "kind":"zk". The compatibility guarantee is therefore precise rather than
absolute: omitted-"kind" verdicts interoperate in both directions, but any verdict
that emits "kind" requires a revision-aware host. This does not force a wire-major
bump, because the two classes of verifier that would emit "kind" are already paired
with revision-aware hosts: a "zk"-class verifier that must remain interoperable with
a strict pre-revision host SHOULD simply omit the field, and a "classical"- or
"external"-class verifier -- which MUST emit "kind" -- did not exist under the
original wire-1 contract and so is consumed only by revision-aware hosts. A field
that is REQUIRED, or whose omission would change how an existing verdict is
interpreted, would instead remain a wire-major change.</t>

</section>
<section anchor="rsd"><name>Relationship to Receipt Signer Discovery</name>

<t>A sibling specification, Receipt Signer Discovery (RSD), defines a
".well-known/bolyra-signers.json" document (an RFC 8615 <xref target="RFC8615"/> well-known URI)
that lets a receipt verifier learn which ES256K signer address(es) to accept. It is
relevant to EVC because a "classical"-class verifier that checks signed receipts
MAY consume it to establish which signers it trusts.</t>

<t>RSD is not part of the EVC wire boundary, and a full treatment is out of scope for
this document. Three consumer rules from RSD are pulled into the Security
Considerations (<xref target="security"/>) because they bear on a verifier's trust configuration:
a consumer MUST fetch over HTTPS, and plain "http://" MUST be rejected except for
loopback addresses (development); a consumer MUST NOT follow redirects; and a
consumer MUST treat any transport or schema failure as a verification failure,
never as "no signer restriction". A separate RSD Internet-Draft, including any
well-known-URI
registration, is deferred past this document (<xref target="iana"/>).</t>

</section>
<section anchor="relationship-to-other-work"><name>Relationship to Other Work</name>

<section anchor="draft-klrc-aiagent-auth-03-complementary"><name>draft-klrc-aiagent-auth-03 (Complementary)</name>

<t><xref target="I-D.klrc-aiagent-auth"/> ("AI Agent Authentication and Authorization",
draft-klrc-aiagent-auth-03, 2026-07-06, Informational) addresses agent
authentication and authorization by leveraging existing standards rather than
defining new protocols. Its Section 7 ("Agent Credentials") adopts the WIMSE
credential formats -- the Workload Identity Token (WIT) and the X.509 Workload
Identity Certificate (WIC); Section 6 addresses agent identifiers (WIMSE
identifiers, potentially SPIFFE IDs); and Section 10 covers authorization via OAuth
2.0 <xref target="RFC6749"/> access tokens, including Section 10.3 ("Use of OAuth 2.0 Access
Tokens") on how the "sub" claim carries a delegated subject and Section 10.4.1
("User Delegates Authorization") on delegating authorization to an agent through an
OAuth Authorization Code Grant.</t>

<t>EVC addresses the downstream decision boundary that draft-klrc-aiagent-auth-03 does
not: given a bundle -- which can carry a WIMSE credential or an OAuth access token
inside its opaque "bundle" -- how does a host obtain and enforce a fail-closed
authorization verdict at the point of a privileged action? The framing is that EVC
is the verdict-and-enforcement companion to the identity and authorization layer
that draft-klrc-aiagent-auth-03 assembles from WIMSE and OAuth. A WIMSE/OAuth token
is one possible payload a "classical"-class verifier (Section 5) validates; a
zero-knowledge credential is what a "zk"-class verifier validates. The host contract
is identical either way. The two documents are complementary and operate at
different points in the flow; EVC does not compete with, restate, or depend on the
draft-klrc-aiagent-auth-03 mechanisms.</t>

</section>
<section anchor="aps"><name>draft-pidlisnyi-aps-03 (Related -- Agent Passport System)</name>

<t><xref target="I-D.pidlisnyi-aps"/> ("Agent Passport System", draft-pidlisnyi-aps-03, 2026-07-18)
is a broad governance framework. It defines a DID method "did:aps" using
multibase-encoded Ed25519 public keys, Ed25519-based agent passports, and a
three-record policy chain (action intent, policy decision, receipt) whose
signatures are computed with EdDSA per RFC 8032.</t>

<t>A factual, citable point: draft-pidlisnyi-aps-03 does not define a zero-knowledge or
selective-disclosure verifier class; its signed artifacts are Ed25519-signed and
content-addressed. Its Security Considerations (its Section 9) speak to evidence
authenticity rather than disclosure minimization -- for example, that "A valid
receipt signature proves that the issuer attests the receipt's payload; it does not
prove the payload corresponds to external fact."</t>

<t>The positioning is neutral and about altitude, not merit. APS is a full
governance/passport/receipt framework; EVC is the narrow, testable host↔verifier
decision boundary that any such framework needs at the point of enforcement. The
two are complementary: an APS policy-decision engine could be wrapped as an
"external"-class (or "classical"-class) EVC verifier, and in the lane APS does not
define, a "zk"-class verifier adds selective disclosure -- proving authority without
revealing the passport or the underlying attributes. This document does not
characterize APS's disclosure model beyond the factual statement that it defines no
zero-knowledge class.</t>

</section>
</section>
<section anchor="impl-status"><name>Implementation Status</name>

<t>[Note to the RFC Editor: please remove this section before publication, per
<xref target="RFC7942"/>.]</t>

<t>This section records the status of known implementations of the contract at the
time of writing, per the process in <xref target="RFC7942"/>. Listing here does not imply
endorsement.</t>

<section anchor="verifier-bolyra-verify-production"><name>Verifier: bolyra verify (production)</name>

<t>The "@bolyra/cli" npm package (version 0.9.0 at the time of writing) ships
"bolyra verify", a spawnable external verifier implementing the verifier side
of this contract: one JSON request on stdin, one verdict object on stdout,
fail-closed on every malformed, oversized, or unexpected input, with the
denial-code registry of this document. It implements the "zk" and "classical"
verifier classes. Maturity: released, publicly installable.</t>

</section>
<section anchor="reference-hosts-two-languages"><name>Reference hosts (two languages)</name>

<t>Two reference hosts implement the host obligations independently: a JavaScript
host ("spec/reference-host.js") and a Rust host ("spec/reference-host-rs/").
Both pass the host-conformance suite (<xref target="conformance"/>): 27 misbehaving- and
well-behaved-verifier fixtures driving 28 "host_behavior" vectors. The suite
itself is published as the "@bolyra/evc-conformance" npm package (version
0.2.0, vector set 0.6.0 at the time of writing) with a build-provenance
attestation, runnable against any host with no dependency on the authors'
implementations. Maturity: reference implementations and released suite,
maintained alongside this document.</t>

</section>
<section anchor="independent-host-implementation-mcp-use-evc-example"><name>Independent host implementation: mcp-use-evc-example</name>

<t>A maintainer of the mcp-use framework built a standalone TypeScript host
implementation of this contract ("khandrew1/mcp-use-evc-example") behind that
framework's pre-dispatch tool-call middleware, developed from the contract text
alone with no dependency on any component of the authors' implementations. At
pinned commit "17642a5efd5e1c42991ab8aa399cd6138f64f635"
(https://github.com/khandrew1/mcp-use-evc-example) it passes 27 of 27
"host_behavior" vectors of vector set 0.5.0. Earlier implementation feedback from this work identified two -00 obligations
that were easy to miss: distinct handling of signal death versus non-zero exit
in failure reporting, and treatment of out-of-registry denial codes as schema
failures rather than relayed verifier denials. That feedback motivated the
explicit precedence language in <xref target="fail-closed"/>, the registry-closure language
in <xref target="denial-codes"/>, and the added conformance vector in this revision. It is listed
here with the maintainer's permission; per that project's own framing, this
contract is independent of and not part of MCP or mcp-use. Maturity: released
example, maintained in that project.</t>

</section>
<section anchor="hosted-verifier-preview"><name>Hosted verifier (preview)</name>

<t>A hosted HTTP mapping of the same contract ("POST /v1/verify", one request
object in, one verdict object out, fail-closed) is operated as a preview for
design partners. It carries no service-level commitment and is not a normative
part of this document; it exists to demonstrate that the contract is
transport-portable. Maturity: preview, access-controlled.</t>

</section>
<section anchor="independent-implementation-experience"><name>Independent implementation experience</name>

<t>The maintainer of an unrelated MCP server project (mcp_agent_mail_rust) built
an off-by-default Ed25519 registration-proof gate designed to the v1 contract
boundary, developed without depending on any component of the authors'
implementations. Maturity: shipped in that project, off by default.</t>

</section>
</section>
<section anchor="security"><name>Security Considerations</name>

<section anchor="fail-closed-is-the-whole-safety-property"><name>Fail-Closed Is the Whole Safety Property</name>

<t>Every ambiguous outcome -- non-zero exit, timeout, signal death, unparseable,
oversized, or multi-object stdout, schema failure, or an unrecognized "kind" -- MUST
result in deny (Section 6). This is the entire safety property of the contract: the
host never proceeds on ambiguity. The host-conformance suite (Section 8) is the
mechanism that makes this claim checkable rather than asserted, spawning
deliberately misbehaving verifiers and confirming the host fails closed. Exit status
dominates a stdout allow (Section 6.2): a non-zero exit is a deny even when a
syntactically valid "allow" reached stdout.</t>

</section>
<section anchor="kind-is-unauthenticated-self-report"><name><spanx style="verb">kind</spanx> Is Unauthenticated Self-Report</name>

<t>A host MUST establish a verifier's proof-system class from configured verifier
identity or policy, never from the "kind" string, and MUST NOT relax trust, verifier
selection, schema validation, or nonce handling on its basis (Section 5). The threat
is a hostile or buggy verifier that claims "kind=zk" to imply privacy guarantees it
did not provide, or that emits an unfamiliar "kind" to probe for a lenient host. An
unrecognized "kind" is a schema failure and MUST fail closed.</t>

</section>
<section anchor="nonce-reservation-and-replay"><name>Nonce Reservation and Replay</name>

<t>Reserve-before-act ordering (Section 7) is a load-bearing property. "Record after
proceeding" is a replay window and is FORBIDDEN. On a multi-entry "consume_nonces"
(agent nullifier plus human-uniqueness nullifier), the host MUST reserve every entry
and MUST reject on any conflict. In local nonce mode, a store error MUST fail closed.
The black-box conformance suite proves the observable gate -- that authorization is
conditioned on the durable uniqueness check -- but not the intra-allow-path
write-barrier ordering (Section 8.4); hosts SHOULD cover that crash-window ordering
with an in-process test.</t>

</section>
<section anchor="redirect-and-downgrade-in-signer-discovery"><name>Redirect and Downgrade in Signer Discovery</name>

<t>For a "classical"-class verifier that consumes a Receipt Signer Discovery document
(<xref target="rsd"/>): a consumer MUST fetch over HTTPS, and plain "http://" MUST be
rejected except for loopback addresses (development); a consumer MUST NOT follow
redirects, because a redirect can move the fetch to a plaintext or attacker-chosen
origin after the protocol check; and a consumer MUST treat any transport, status, or
schema
failure as a verification failure, never as "no signer restriction". Discovery is
trust-in-origin, not endorsement and not PKI. When both an out-of-band pinned signer
and a discovery-URL signer source are supplied, a consumer MUST require the two to
agree.</t>

</section>
<section anchor="output-bound-truncation-and-resource-exhaustion"><name>Output-Bound Truncation and Resource Exhaustion</name>

<t>The stdout output bound and the stdin bound (Section 6.3) bound a hostile verifier
that floods or hangs; the host MUST enforce both and kill on breach. The
"oversize-flood" and hang fixtures (Section 8.1) prove this. A truncated stdout is
unparseable and MUST deny, never yield a partial allow.</t>

</section>
<section anchor="tail-truncation"><name>Tail Truncation of Hash-Chained Receipts (Informative)</name>

<ul empty="true"><li>
  <t><strong>NEW -- draft-only; not in shipped EVC v1 / RSD v1.</strong></t>
</li></ul>

<t>For a hash-chained signed-receipt log that a "zk"- or "classical"-class verifier may
consult, an attacker who can drop the newest entries can mount a tail-truncation
attack: the chain still verifies as a valid prefix, so the verifier sees an older,
shorter-but-consistent history. This is a real property, but it sits below the EVC
host↔verifier boundary -- receipt-chain semantics live in the receipt library, not
in the EVC wire envelope -- so this document states no new normative EVC obligation
here. As guidance a verifier vendor may adopt: a verifier that relies on receipt
ordering should anchor the expected chain tip (a signed high-water mark or a
monotonic counter) out of band and treat a shorter-than-expected chain as a
verification failure. A normative mitigation, if desired, belongs in a dedicated
receipts/RSD companion draft where a MUST can be properly grounded, and would be
referenced from here.</t>

</section>
<section anchor="domain-separation"><name>Domain Separation</name>

<t>The request-binding signature (Appendix B) is domain-separated by a tag that
prevents a binding signature from being replayed as any other signature the
verifier's scheme produces, and vice-versa. This closes a cross-context signature
replay class. The tag is versioned; the binding revision described in Appendix B
uses the ".v2" tag. This consideration applies only to a verifier whose internal
binding follows Appendix B; it is below the EVC boundary (the host never sees the
binding) and is included because Appendix B is retained as informative.</t>

</section>
<section anchor="binding-of-credential-expiry"><name>Binding of Credential Expiry</name>

<t>This consideration applies only to a verifier whose internal binding follows
Appendix B; it is below the EVC boundary (the host never sees the binding) and is
included because Appendix B is retained as informative.</t>

<t>The binding in Appendix B originally signed five fields and did not cover the
credential expiry; that revision is referred to here as binding v1. A verifier whose
proof system does not independently bind expiry -- a "classical"- or
"external"-class verifier (Section 5) -- could therefore be presented a binding whose
signed fields matched an issued mandate while an expiry value drawn from outside the
signature was substituted. A presenter able to re-anchor a later expiry onto an
already-issued mandate could obtain an "allow" past the mandate's intended lifetime,
extending the credential's effective duration. The escalation is bounded: it extends
duration at the already-granted permission tier and audience, and does not permit
tier, audience, or payee escalation. A "zk"-class verifier that binds expiry within
its proof was not exposed to this substitution.</t>

<t>The current binding (binding v2, Appendix B) places "expiry" inside the signed
binding, versions the domain-separation tag to
"bolyra.external-verifier.binding.v2", and, after the signature verifies, requires
the signed "binding.expiry" to equal the credential expiry that the scope and expiry
checks consume; a mismatch is a verification failure ("deny code=invalid_bundle"). A
binding carrying only the earlier five fields is treated as an obsolete binding v1
and rejected as an unsupported version ("deny code=unsupported_version"), with no
compatibility mode and no advisory-expiry fallback. A verifier following Appendix B
therefore signs "expiry" as part of the binding and rejects a five-field binding
rather than accept an expiry that no signature covers. As with Domain Separation
above, this is a property of the reference verifier's internal binding, stated with
the lowercase "must" convention of Appendix B; it is below the EVC wire boundary and
imposes no new normative obligation on the host contract.</t>

</section>
<section anchor="privacy-considerations"><name>Privacy Considerations</name>

<t>A "zk"-class verifier lets the host authorize an action without learning the agent's
identity or attribute values; this is the selective-disclosure property of
Section 5. EVC bounds what the verifier learns, not what the host already knows: the
request context the host supplies ("agent_name", "project_key", "program", "model",
"granted_capabilities") is host-chosen and may itself be identifying. Implementers
should note this asymmetry -- a privacy-preserving verifier does not make the host's
own request context private -- and minimize identifying content in the request where
the deployment's threat model calls for it.</t>

</section>
</section>
<section anchor="iana"><name>IANA Considerations</name>

<ul empty="true"><li>
  <t><strong>NEW -- draft-only, not in shipped EVC v1.</strong></t>
</li></ul>

<section anchor="external-verifier-denial-codes-registry"><name>External Verifier Denial Codes Registry</name>

<t>This document requests that IANA create a new registry, "External Verifier Denial
Codes", to catalog the machine-readable denial-code vocabulary of <xref target="denial-codes"/>.</t>

<t><list style="symbols">
  <t>Registry name: External Verifier Denial Codes.</t>
  <t>Registration policy: Specification Required <xref target="RFC8126"/>.</t>
  <t>Columns: "code" (the snake_case token); brief description; wire version
introduced; change controller; reference.</t>
</list></t>

<t>Critical clarification reconciling the registry with the closed wire enum: the
wire denial-code set is a closed enum on the wire. A verifier MUST NOT add, remove,
or rename a code without a wire-major version bump (<xref target="denial-codes"/> and <xref target="versioning"/>). The
IANA registry does NOT relax this and does NOT open the enum at runtime. It is a
catalog of the codes each spec version defines: a new registration is admissible
only as part of a published EVC wire-major/spec revision that adds the code, and
each registry entry records the wire version that introduced it. A verifier that
emits an unregistered code is non-conformant exactly as it is today; the registry
changes discoverability, not the closed-set semantics or the version-bump rule.
Third-party ("external"-class) verifiers reuse the existing vocabulary and do not
mint private codes at runtime.</t>

<t>Initial contents: the 15 codes of <xref target="denial-codes"/>, each recorded with its meaning, the
wire version that introduced it ("1"), change controller (this document / the EVC
specification), and reference (this document).</t>

</section>
<section anchor="proof-system-classes-closed-enum-no-registry-requested"><name>Proof-System Classes: Closed Enum, No Registry Requested</name>

<t>The "kind" value set ("classical", "zk", "external") of Section 5 is deliberately
NOT proposed as an IANA registry. The set is small and closed, and adding a value is
a wire-facing change already governed by the wire-major rule (<xref target="versioning"/>). A fixed
enum in the specification is preferable to a registry here; the tradeoff is that a
future proof-system class requires a spec revision rather than a registration, which
is acceptable given how rarely the class set is expected to change.</t>

</section>
<section anchor="deferred-registrations"><name>Deferred Registrations</name>

<t><list style="symbols">
  <t>Well-known URI. The Receipt Signer Discovery document
(".well-known/bolyra-signers.json", <xref target="rsd"/>) would need an RFC 8615
<xref target="RFC8615"/> well-known-URI registration, but that belongs to a separate RSD
Internet-Draft, not this one. It is out of scope for this document.</t>
  <t>Media type. A proof-envelope media type exists in the wider ecosystem but is below
the EVC boundary (the bundle is opaque); EVC itself defines no new media type. No
media-type registration is requested.</t>
</list></t>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>
<reference anchor="RFC8259">
  <front>
    <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
    <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
    <date month="December" year="2017"/>
    <abstract>
      <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
      <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="90"/>
  <seriesInfo name="RFC" value="8259"/>
  <seriesInfo name="DOI" value="10.17487/RFC8259"/>
</reference>



    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC6749">
  <front>
    <title>The OAuth 2.0 Authorization Framework</title>
    <author fullname="D. Hardt" initials="D." role="editor" surname="Hardt"/>
    <date month="October" year="2012"/>
    <abstract>
      <t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf. This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6749"/>
  <seriesInfo name="DOI" value="10.17487/RFC6749"/>
</reference>
<reference anchor="RFC7519">
  <front>
    <title>JSON Web Token (JWT)</title>
    <author fullname="M. Jones" initials="M." surname="Jones"/>
    <author fullname="J. Bradley" initials="J." surname="Bradley"/>
    <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
    <date month="May" year="2015"/>
    <abstract>
      <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7519"/>
  <seriesInfo name="DOI" value="10.17487/RFC7519"/>
</reference>
<reference anchor="RFC7662">
  <front>
    <title>OAuth 2.0 Token Introspection</title>
    <author fullname="J. Richer" initials="J." role="editor" surname="Richer"/>
    <date month="October" year="2015"/>
    <abstract>
      <t>This specification defines a method for a protected resource to query an OAuth 2.0 authorization server to determine the active state of an OAuth 2.0 token and to determine meta-information about this token. OAuth 2.0 deployments can use this method to convey information about the authorization context of the token from the authorization server to the protected resource.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7662"/>
  <seriesInfo name="DOI" value="10.17487/RFC7662"/>
</reference>
<reference anchor="RFC7942">
  <front>
    <title>Improving Awareness of Running Code: The Implementation Status Section</title>
    <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
    <author fullname="A. Farrel" initials="A." surname="Farrel"/>
    <date month="July" year="2016"/>
    <abstract>
      <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
      <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="205"/>
  <seriesInfo name="RFC" value="7942"/>
  <seriesInfo name="DOI" value="10.17487/RFC7942"/>
</reference>
<reference anchor="RFC8126">
  <front>
    <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
    <author fullname="M. Cotton" initials="M." surname="Cotton"/>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <author fullname="T. Narten" initials="T." surname="Narten"/>
    <date month="June" year="2017"/>
    <abstract>
      <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
      <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
      <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="26"/>
  <seriesInfo name="RFC" value="8126"/>
  <seriesInfo name="DOI" value="10.17487/RFC8126"/>
</reference>
<reference anchor="RFC8615">
  <front>
    <title>Well-Known Uniform Resource Identifiers (URIs)</title>
    <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
    <date month="May" year="2019"/>
    <abstract>
      <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
      <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8615"/>
  <seriesInfo name="DOI" value="10.17487/RFC8615"/>
</reference>

<reference anchor="I-D.klrc-aiagent-auth" >
  <front>
    <title>AI Agent Authentication and Authorization</title>
    <author initials="P." surname="Kasselman" fullname="P. Kasselman">
      <organization></organization>
    </author>
    <author initials="D." surname="Lombardo" fullname="D. Lombardo">
      <organization></organization>
    </author>
    <author initials="Y." surname="Rosomakho" fullname="Y. Rosomakho">
      <organization></organization>
    </author>
    <author initials="B." surname="Campbell" fullname="B. Campbell">
      <organization></organization>
    </author>
    <author initials="A." surname="Steele" fullname="A. Steele">
      <organization></organization>
    </author>
    <date year="2026" month="July" day="06"/>
  </front>
</reference>
<reference anchor="I-D.pidlisnyi-aps" >
  <front>
    <title>Agent Passport System</title>
    <author initials="" surname="Pidlisnyi" fullname="Pidlisnyi">
      <organization></organization>
    </author>
    <date year="2026" month="July" day="18"/>
  </front>
</reference>


    </references>

</references>


<?line 1125?>

<section anchor="schemas"><name>Request and Verdict JSON Schemas (Normative)</name>

<section anchor="request-schema"><name>Request Schema</name>

<figure><sourcecode type="json"><![CDATA[
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://bolyra.ai/spec/external-verifier-request-v1.json",
  "title": "External Verifier Request v1",
  "type": "object",
  "required": ["version", "bundle", "request", "now_unix"],
  "additionalProperties": true,
  "properties": {
    "version": { "type": "integer", "const": 1 },
    "bundle": { "type": "string", "minLength": 1 },
    "request": {
      "type": "object",
      "required": [
        "agent_name",
        "project_key",
        "program",
        "model",
        "granted_capabilities"
      ],
      "additionalProperties": true,
      "properties": {
        "agent_name": { "type": "string" },
        "project_key": { "type": "string" },
        "program": { "type": "string" },
        "model": { "type": "string" },
        "granted_capabilities": {
          "type": "array",
          "items": { "type": "string" }
        }
      }
    },
    "now_unix": { "type": "integer", "exclusiveMinimum": 0 }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="verdict-schema-closed"><name>Verdict Schema (Closed)</name>

<figure><sourcecode type="json"><![CDATA[
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://bolyra.ai/spec/external-verifier-verdict-v1.json",
  "title": "External Verifier Verdict v1",
  "oneOf": [
    {
      "type": "object",
      "required": ["verdict"],
      "additionalProperties": false,
      "properties": {
        "verdict": { "const": "allow" },
        "kind": { "type": "string", "enum": ["classical", "zk", "external"] },
        "consume_nonces": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "object",
            "required": ["issuer_key", "nonce", "retain_until"],
            "additionalProperties": false,
            "properties": {
              "issuer_key": { "type": "string" },
              "nonce": { "type": "string" },
              "retain_until": { "type": "integer" }
            }
          }
        }
      }
    },
    {
      "type": "object",
      "required": ["verdict", "code", "message"],
      "additionalProperties": false,
      "properties": {
        "verdict": { "const": "deny" },
        "kind": { "type": "string", "enum": ["classical", "zk", "external"] },
        "code": {
          "type": "string",
          "enum": [
            "malformed_input",
            "unsupported_version",
            "invalid_bundle",
            "invalid_proof",
            "untrusted_root",
            "delegation_invalid",
            "invalid_signature",
            "request_mismatch",
            "model_mismatch",
            "unknown_capability",
            "scope_exceeded",
            "expired",
            "nonce_missing",
            "nonce_replayed",
            "internal_error"
          ]
        },
        "message": { "type": "string" },
        "detail": { "type": "object" }
      }
    }
  ]
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="binding"><name>Binding Signature (Informative)</name>

<t>This appendix describes the request-authorizing signature carried inside a bundle by
Bolyra's "zk"- and "classical"-class reference verifiers. It is included to
illustrate one verifier's internal binding. It is explicitly below the
interoperability boundary: the host never sees these bytes, and a conforming verifier
of any class may use any binding it chooses. Nothing in this appendix is a normative
obligation of the EVC wire contract. The lowercase "must"/"must not" phrasing below
states requirements of the reference verifier implementation, not requirements of
this document; they are not BCP 14 keywords.</t>

<t>The bundle carries a request-authorizing signature that binds the request context to
the cryptographic key the proof commits to. The binding is versioned independently of
the wire envelope; this appendix describes binding v2, in which the credential expiry
is signature-bound. In the reference verifier:</t>

<t><list style="symbols">
  <t>Canonical payload (binding v2). Let "binding" be the object with exactly the six
fields "agent_name", "project_key", "program", "model", "capabilities" (a string
array), and "expiry" (a positive integer, Unix seconds). The canonical payload is
the sorted-key, compact (no insignificant whitespace) JSON serialization of
"binding". Object keys must be sorted and array elements (including "capabilities")
must not be reordered. The verifier compares "capabilities" as a set for
authorization, but the signed bytes are order-sensitive. "expiry" became part of the
signed binding in binding v2; the Security Considerations note on expiry binding
(<xref target="security"/>) states why.</t>
  <t>Version discrimination is structural, not a declared version field. The reference
verifier classifies a binding by its exact key set: the six fields above and no
others. A member outside that set is rejected ("deny code=invalid_bundle") before
any version is inferred. A well-formed binding carrying only the earlier five fields
(no "expiry") is an obsolete binding v1 and is rejected
("deny code=unsupported_version"); no compatibility mode accepts it. An "expiry"
that is not a positive integer is rejected ("deny code=invalid_bundle").</t>
  <t>Domain separation. A domain-separation tag prevents a binding signature from being
replayed as any other signature. The tag is versioned; binding v2 uses the ".v2"
tag: DST = utf8("bolyra.external-verifier.binding.v2"), and
dsInput = DST || 0x00 || payload. The single 0x00 byte separates the ASCII domain
tag from the canonical binding bytes.</t>
  <t>Digest to field element. digest = SHA-256(dsInput) (32 bytes);
msgField = BigInt("0x" || hex(digest)) mod BN254_FIELD_ORDER, where
BN254_FIELD_ORDER is
21888242871839275222246405745257275088548364400416034343698204186575808495617.</t>
  <t>Sign / verify. Sign with EdDSA-Poseidon over BabyJubjub; verify by recomputing
msgField from the bundle's own "binding" bytes and checking the signature against
the operator public key the proof commits to. A signing key disjoint from the
credential is rejected ("deny code=invalid_signature"), closing the cross-signer
replay class. After the signature verifies, the reference verifier additionally
requires "binding.expiry" to equal the credential expiry that the scope and expiry
checks consume, rejecting a mismatch ("deny code=invalid_bundle"); this binds the
strict-expiry check to the signed value. A verifier consuming a foreign bundle
recomputes the digest from the bundle's own "binding" bytes and does not trust a
self-asserted digest.</t>
</list></t>

</section>
<section anchor="examples"><name>Worked Examples (Informative)</name>

<t>Each example is a real (stdin request, stdout verdict) pair against the reference
verifier. Requests are abbreviated ("bundle" elided).</t>

<section anchor="allow-local-nonce-mode"><name>Allow (Local Nonce Mode)</name>

<t>Request:</t>

<figure><sourcecode type="json"><![CDATA[
{ "version": 1, "bundle": "...", "request": {
    "agent_name": "research-bot", "project_key": "/work/acme/research",
    "program": "crewai", "model": "opus-4.1",
    "granted_capabilities": ["fetch_inbox", "send_message"] },
  "now_unix": 1751990400 }
]]></sourcecode></figure>

<t>Verdict (exit 0):</t>

<figure><sourcecode type="json"><![CDATA[
{ "verdict": "allow" }
]]></sourcecode></figure>

</section>
<section anchor="allow-with-consumenonces-host-nonce-mode"><name>Allow With consume_nonces (Host Nonce Mode)</name>

<t>Same request, verifier spawned in host nonce mode. This agent-only bundle yields a
single entry; a human-backed bundle would add a second "human:NULLIFIER-HASH"
entry. Verdict (exit 0):</t>

<figure><sourcecode type="json"><![CDATA[
{
  "verdict": "allow",
  "consume_nonces": [
    {
      "issuer_key": "15617329766995256858590222302430068383949745072531974464084158078905448850943:20201653676552407165606319978171745645181779505176156736762229713293662347780",
      "nonce": "12616665119450508255185458876855962314592339945640375882344193391684757282246",
      "retain_until": 4102444800
    }
  ]
}
]]></sourcecode></figure>

<t>The host MUST reserve every entry's "nonce" atomically before acting (Section 7).</t>

</section>
<section anchor="deny-scopeexceeded"><name>Deny -- scope_exceeded</name>

<t>Request whose credential proves only READ_DATA but whose "send_message" capability
requires WRITE_DATA. Verdict (exit 0):</t>

<figure><sourcecode type="json"><![CDATA[
{
  "verdict": "deny",
  "code": "scope_exceeded",
  "message": "required scope exceeds the credential effective scope",
  "detail": { "required_scope": "2", "effective_scope": "1", "excess_bits": "2" }
}
]]></sourcecode></figure>

</section>
<section anchor="deny-modelmismatch"><name>Deny -- model_mismatch</name>

<t>Request whose "model" differs from the model the proof commits to. Verdict (exit 0):</t>

<figure><sourcecode type="json"><![CDATA[
{
  "verdict": "deny",
  "code": "model_mismatch",
  "message": "proven model hash does not match the requested model",
  "detail": { "requestModel": "model-beta" }
}
]]></sourcecode></figure>

</section>
<section anchor="deny-malformedinput"><name>Deny -- malformed_input</name>

<t>Truncated JSON on stdin. Verdict (exit 0):</t>

<figure><sourcecode type="json"><![CDATA[
{ "verdict": "deny", "code": "malformed_input", "message": "request stdin is not valid JSON" }
]]></sourcecode></figure>

</section>
<section anchor="deny-internalerror-fail-closed-non-zero-exit"><name>Deny -- internal_error (Fail-Closed, Non-Zero Exit)</name>

<t>No trusted-root source configured. Verdict on stdout AND a non-zero exit code, so the
host fail-closes on either signal:</t>

<figure><sourcecode type="json"><![CDATA[
{ "verdict": "deny", "code": "internal_error", "message": "no trusted root source configured" }
]]></sourcecode></figure>

</section>
<section anchor="allow-classical-kind-verifier"><name>Allow -- classical-kind Verifier</name>

<t>A "classical"-class verifier -- for example one that checks an ES256K-signed receipt
and a JWT delegation token <xref target="RFC7519"/> rather than a zero-knowledge proof -- returns
the same "allow" envelope, tagged with its "kind". Verdict (exit 0):</t>

<figure><sourcecode type="json"><![CDATA[
{ "verdict": "allow", "kind": "classical" }
]]></sourcecode></figure>

</section>
<section anchor="deny-external-kind-verifier"><name>Deny -- external-kind Verifier</name>

<t>A third-party verifier denies with the shared registry (<xref target="denial-codes"/>) and its own
"kind". Verdict (exit 0):</t>

<figure><sourcecode type="json"><![CDATA[
{ "verdict": "deny", "kind": "external", "code": "expired", "message": "credential expired" }
]]></sourcecode></figure>

<t>An agent-only "zk" verdict carries no "kind"; the host reads its absence as "zk".</t>

</section>
</section>
<section anchor="fixtures"><name>Host-Conformance Fixture List (Informative)</name>

<t>The 28 "host_behavior" vectors and the Host-Under-Test environment variables of
Section 8 are reproduced there as tables. Implementers building or testing a host
should consult Section 8.1 (fixture inventory), Section 8.2 (the HUT convention and
environment variables), and Section 8.3 (failure classes), together with the two
reference hosts at "spec/reference-host.js" and "spec/reference-host-rs/".</t>

</section>
<section anchor="changes"><name>Changes Since draft-kondoju-evc-00</name>

<t>[Note to the RFC Editor: please remove this section before publication.]</t>

<t>This revision changes no wire behavior. Every change tightens prose around
semantics already enforced by the verdict schema (<xref target="schemas"/>) and both
reference hosts, or records implementation experience:</t>

<t><list style="symbols">
  <t>Denial-code registry closure (<xref target="denial-codes"/>): replaced the -00 sentence "hosts
... MUST treat an unrecognized future 'code' as deny" -- which was ambiguous
about mechanism and was readable as relay-tolerance -- with explicit closure
language: within a wire major an
out-of-registry "code" fails the verdict schema and the host fails closed
under its own "schema_invalid" classification, never relaying the code. This
also resolves a latent internal tension with the IANA considerations
(<xref target="iana"/>), which already described the wire denial-code set as a closed
enum.</t>
  <t>Fail-closed classification precedence (<xref target="fail-closed"/>): stated the order in
which a host classifies co-occurring fail-closed conditions (own kills, then
unsolicited signal death, then non-zero exit, then parse/schema checks), and
that "signal_death" and "nonzero_exit" are distinct classes a host MUST NOT
collapse.</t>
  <t>Host conformance (Section 8): added the "unknown-denial-code" fixture and its
vector; the suite is now 27 fixtures driving 28 "host_behavior" vectors
(vector set 0.6.0), published as the "@bolyra/evc-conformance" npm package.</t>
  <t>Implementation status (<xref target="impl-status"/>): added an independent host
implementation built from the contract text by an mcp-use maintainer,
verified against the suite at a pinned public commit; updated version and
vector counts throughout.</t>
  <t>Corrected internal section cross-references that had drifted when sections
were inserted late in the -00 editing cycle (the denial-code registry was
cited as Section 4.2 but renders as 4.3; the fd-isolation rules as 4.3 but
render as 4.4; wire versioning as Section 10 but renders as 9; receipt
signer discovery as 11 but renders as 10; security and IANA considerations
one low likewise). All corrected references now use resolved anchors so
numbering cannot drift again.</t>
</list></t>

<t>Both prose gaps closed in this revision were surfaced by independent
implementation experience against the -00 text -- evidence used to decide
where the specification, not just an implementation, needed repair.</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA8W963bbSLIm+h9PgcM6axW5h6BEWXed6hmVLe9St29jubr2
nu5aGpCEJJRJgAOAktm2++c8wTzhPMlEfBGRmQAp29W9Z52eS8kkmMhLZNzj
iyRJoiZv5tlp3Dsv4osPTVYV6Tz+c1blN3lWxU/LoqnSaRPflFV8fpsVTXy+
au7KKv9b2uRlET/LpnlNf9S9KJ1MquyeRnp8mF40K6dFuqD3zar0pknel8Ws
/G2VZPfTZHccTdMmuy2r9WmcFzdllC+r07ipVnWzt7t7srsXpVWWnsZX2XRV
5c06eiir97dVuVqexpfFLL/PZyt669VqsshrnlT0PlvTM7PTKI6TOOXpy1/h
EvDJvc4U//hbVpXJ+6J8mGez2wwf1dk8mzb5fZbM8no6L+tVlUW1e1GzXtKS
Li/ePY/qJi1m1+m8LOiTdVZHy/w0/ktTTodxXVZNld3U9Nd6wX/8GkUyFZmg
bMyf8/ohLdLZXRq/qdImXcZ/kk2iZ+K4rG7TQmd+Gv9YztdVii+yRZrPT+N7
/vV/meDzUZpHUVFWi5Rnzu94+/zp3nh8on8ej4/27c+9A/o04l1vP354tG+P
Hx24Xx4dHu7Znyf7e268vUP783B8wH9eJs9G7+fVNElzbH/C6z3FhB3dXQaE
Rf/Np0JZtI1tWuvhZ10C6g6e7D6R54iUTuO93b3DZPco2T3Eh363+X+2429G
8Z/Smo54kRadr56N4hflYpJWs7Lzzb+P4rdlXS7S93fdr34cxU/TxXKSzeed
b85H8VWTES3p1izz2Tyvi3WepMu6sy3Ykzc0ryWRTXy1rptssXULWoNsX/74
+EvLt99HUZLQ5ZjUuKtR9O4ur/llqwVPpV7SVac7Usd0TF9iFf2LPz8dnMZp
XC/S+XwYNxndick8G0bLqixvkhpLSdLboqzptONJuSpmabWOJ1nzkGV08vEd
fRP3+T30k9sqXdCsylUTN2XcpO+zOKWh6LrPs9tsFtM7mV5AMnLJv69prLt0
fjMAFdHHmU3XLnrcp/mtJjT8NKvrqLlLm7jKillW1RhmPi8fdmZZseZfzHJa
loxfLtP/scK0ypt4QhOfZ4NR/I5mOtX1R7cl/aSo6QfzNfaKPi7kFHk2Nl5W
3GfzkvnGXfmA57DqO3qm5s3Li9t5Fv/x6vWrqMronTWWn/oV+OnH/Ma4bmZ5
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
q0B3z8e/sHiEe/M1LLtXcLk+9WGGKLoQYpe43KZrtuNl5nspgiq4qt55G1VE
28TBkCpIi0lA9eptDtJUReEiZox0vExd3HTlEODy0T1+JJKwcTutRIZsSueC
0Gw+OizWLvAmSXdkz4ycKSL7aXS3Igs5EQ9ywe5O/wSHJQMBAwMHT0/S6Xv2
72HJ/Il4YEjT7WEmQqa0MjKhOdzRw0Onr35+8eLy+eXF2+Sn86ufeoNtqmn7
CKGttX05rOaBo31Un00PmSqV6Znjg8Px0ZO9k9FodLq3u7c7Pjx4Qn+r5gjl
j2fIT+4djg8PDw/G45P9g92D3WPOnDk+2D84Pj46PD44ODncezLePzjZe/Lk
hJ443N99ckTf7T3Z3x+f0Gfjw+P9o4OjveO9vf1DP36VsVZwzVlNrLvuj3f3
9vf3j0nB5K8/0///q6ma3aUFEkO196ELngwlWJYwYRLp/cJno7RhkajIqV3w
Hsj5cECdr5LSNTPMKtOYc5inIfeVI9urqhgEngfVOLvxjPji/OlP6nlrXYoL
JnZ8LnpzcDyPqDxI+8NTOxD/7H/haYMl11O2/fCMxTwcZQ1B5JjlpCzfv9eM
PN6iM/FieHLU7LH4dl5OkA8kJM/KbRj9SNxvHp+ru8lioTct9VSuvOqfASU8
ZjZA2JkMxKOaptIaFsElHs08a0w2GgVSlviMRMAXLhRcj3qfZqB/7Ox19oF9
lNlMvjNb6VS055wVUTwXy3PqDQkk782NlG3JYzLKjKfKxP/RD3Mt39PAe2yZ
ud/5z8f4/APHXK4nJKjlWboxelsSv55HDscYPxGFrBfHgPVu/oKdkPwQfsmG
M5zQC6JeTuKRpBzokRKOF2erqCxdAyo0Uc7/PfDVqiFiu/rVSTBlcQ7RUBmt
2CSSEZqlteQihPF+tUGYgLh4BG/T3fdWj7EQvMTZVbPYErn4Es3L23pnlk1W
t7cwHVp2qmbSZNM7EVpkCNFTkhrplMmsquAAJiEJrqICblqyg19cOXIUSIvg
lH7dciJ3ZBDd4pM1czXOFMRaxAvptq21kk58rBX47votLaIN+t8S0340on0p
R6ppOZz2JZm0JPOU2qJYPC9CcS5oIRw6nTCDHnZ4hMscakf3a0yH9p6G9DE8
lGxIMpgpf/SUegdoCN0jbxORvZhN0xX9qjTtPq/BQNKZewk0wmdCxU/5zN4a
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
W0JzGkreIBcYFiW4zW0BP1rBYTBu7EZfEleDf6GmHSTx8ze7Pqxq2x6N4tey
O4z9JBi8E3uR3HE01MwMXaLvMffaGzBgp4jeNIHZREInp+i8C4OjmDc75Dr7
h+xb9qTdoEFXq57DXFAuxUL6D/HNwkuSOitkZ0d+vznti3MIfWSfhrXf+/Qu
Tz7iXXyscBGRz9KF9y0HIO5imipTebhbsz/rzxboyPl6oLZNvURELKspEb50
V26QIMrhpyBfQnvSvguvQ9iUMOh947OwJojnCp3j6tOenhq5u1Q1TjTQjAoa
EdmYyE9fZIsJl7i43Ku0MfemS/D4UoKJYtvwAQputaW45YU4QfklYU/035WN
wrtN5G5HLAVWW1NSLPvRJg2n6VeyT9Alb1viieKoI+hTuLfjTmpnUpxf93Z/
86YxoWgyiM9V4o3ansD0jTm36HL3xazbx1Ji/ZWI2wmvvOT09jR+dvUu/iFe
NTfH/W9KpRJWyO1a60tW3unHPMSnT/Huh91d/q+yOg1TSMMLfMc33bmaZSrn
V08vL3VvZEYB4oVjnv4+NBKUfpbfsqhsSu1HoCxtRHcTX/wQX/10nuwdHPZ1
loO4/2RPfj84Y+5W3z7HL38gZfL2smj6vd0PPZ79XfahL6MMBkwz8Y+v9g72
r59fXrx4dv367bOLt0NNTog3vxL2vjc+Pj7e2987PhofPznZOzrYo//tH+7v
HhztH+wdHNEnu8fHB/vHTw7393d398eHu0/26f8cnhzv0b+ODw+ODo53j/dP
Dg7HR7xc1nPjHQVHGsk/PaRe8obUr3zG4oDVux/TyfqPq8lvq8mZwTZNJBzK
YHxCTG75brOFfhVLIZC6wpw5vMT5axY99zSqUDLW7xUwA5yF6EAIH1FXzjEG
j8fPEEv9DVBrNh8arw1o+cXL500xDhTOS9/fEMnkWhlld8hyyM+/mA34iOYY
9tzBiBqS+o9LFIzjdqrgUNcuAT2XNPglJqQKndMtWViiCM0S7aRU0lrkihxF
qLAVCpcJyHtZEjDZySuwckV31PxMuXjfTk8ukUhgwVOeIxdmW3W6jiitgcrq
PcdhBYZjswBK8Tk4vnLBEWfrGufLdfpSZ6Y69tAqttSLMkC3g1ajCi+kHRO0
6IcoK+lkwvHHVGjS4HAzOoZspkHlc6l2f4EaWqlCfknHNeCiY4x0Gnp4w0jG
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

-->

</rfc>

