<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<rfc
  category="info"
  docName="draft-williams-intent-token-00"
  ipr="trust200902"
  obsoletes=""
  updates=""
  submissionType="independent"
  xml:lang="en"
  tocInclude="true"
  tocDepth="3"
  symRefs="true"
  sortRefs="true"
  version="3">

  <front>
    <title abbrev="Intent Token">The Intent Token: A Cryptographic Authorization Primitive for Autonomous Agents</title>
    <seriesInfo name="Internet-Draft" value="draft-williams-intent-token-00"/>
    <author fullname="Jeffrey Williams" initials="J." surname="Williams">
      <organization>Independent</organization>
      <address>
        <postal>
          <city>Chiang Mai</city>
          <country>Thailand</country>
        </postal>
        <email>urls@live.com</email>
      </address>
    </author>
    <date year="2026" month="March" day="19"/>
    <area>Security</area>
    <workgroup>Internet Engineering Task Force</workgroup>
    <keyword>authorization</keyword>
    <keyword>autonomous agents</keyword>
    <keyword>AI governance</keyword>
    <keyword>intent token</keyword>
    <keyword>JWT</keyword>
    <keyword>AI safety</keyword>

    <abstract>
      <t>
        This document specifies the Intent Token, a cryptographic authorization
        primitive for autonomous AI agent systems. An Intent Token binds an
        autonomous agent action to a cryptographically signed, human-declared
        authorization envelope before that action is executed. The Intent Token
        addresses a fundamental gap in existing authorization frameworks: while
        OAuth 2.0, OIDC, and related standards govern identity and access at
        the session level, no standardized primitive exists for governing what
        an autonomous agent is authorized to DO at the moment of action. The
        Intent Token provides this primitive. It is model-agnostic,
        transport-agnostic, and composable with existing authorization
        infrastructure.
      </t>
    </abstract>
  </front>

  <middle>

    <section numbered="true" toc="default">
      <name>Introduction</name>
      <t>
        The deployment of autonomous AI agents in consequential domains --
        financial services, healthcare, critical infrastructure, autonomous
        vehicles, and multi-agent orchestration systems -- creates a class of
        authorization problems that existing standards do not address.
      </t>
      <t>
        OAuth 2.0 <xref target="RFC6749"/> governs whether a principal has
        access to a resource. OpenID Connect <xref target="OIDC"/> governs
        whether a principal is who they claim to be. These standards address
        the WHO question: who is this agent, and what resources may it access?
      </t>
      <t>
        Neither standard addresses the WHAT question: given that an agent has
        access, what specific actions is it authorized to perform at this
        moment, on behalf of this principal, within these declared boundaries?
      </t>
      <t>
        The gap between access and action is the authorization gap. In
        human-operated systems, this gap is bridged by human judgment. In
        autonomous agent systems, this gap is bridged by the agent itself --
        which may interpret its authorization scope in ways the authorizing
        principal did not intend. This is the intent blindness problem.
      </t>
      <t>
        This document specifies the Intent Token, a cryptographic primitive
        that closes the authorization gap. An Intent Token is a signed,
        time-bounded authorization envelope that:
      </t>
      <ul spacing="normal">
        <li>Declares what action a principal authorizes an agent to perform, BEFORE the action is executed;</li>
        <li>Binds that declaration cryptographically to the agent session and the specific action;</li>
        <li>Provides a verifiable, tamper-evident record of the authorization for audit purposes;</li>
        <li>Propagates the declared intent through delegation chains, preventing sub-agents from exceeding the scope the delegating principal was itself authorized to grant.</li>
      </ul>
      <t>
        The Intent Token is the core primitive of the Intent Bound Authorization
        (IBA) framework, patent application GB2603013.0 (pending, UK IPO, filed
        February 5, 2026, PCT rights in 150+ countries until August 2028).
      </t>
      <t>
        Independent convergence on this primitive was identified in Google
        DeepMind's introduction of Delegation Capability Tokens (DCTs)
        <xref target="DEEPMIND-DCT"/>, February 12, 2026, seven days after the
        IBA patent filing. DeepMind's paper identifies the same open problem:
        no standardized ontology for intent and responsibility across autonomous
        agent platforms exists. This document proposes the Intent Token as the
        candidate standard to fill that gap.
      </t>
      <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>
    </section>

    <section numbered="true" toc="default">
      <name>Terminology</name>
      <dl newline="false" spacing="normal">
        <dt>Intent Token:</dt>
        <dd>A cryptographically signed authorization envelope that declares
        what action a principal authorizes an autonomous agent to perform,
        issued before the action is executed, and bound to a specific session
        shard.</dd>
        <dt>Intent Certificate:</dt>
        <dd>A persistent, verifiable credential that records the full
        authorization context for an agent session, including the principal
        identity, declared scope, temporal bounds, and cryptographic proof of
        all enforcement decisions made during the session.</dd>
        <dt>Principal:</dt>
        <dd>The human or organizational entity whose declared intent authorizes
        the agent action. The principal MUST be cryptographically identified in
        every Intent Token.</dd>
        <dt>Authorized Agent:</dt>
        <dd>An autonomous system authorized to act within the scope declared in
        an Intent Token.</dd>
        <dt>Shard:</dt>
        <dd>A time-bounded cryptographic token issued by the IBA Gate that must
        be presented with every agent action. Shards expire after a configurable
        window (default 512 seconds).</dd>
        <dt>IBA Gate:</dt>
        <dd>The enforcement point that validates Intent Tokens before permitting
        agent actions.</dd>
        <dt>SNAP-BACK:</dt>
        <dd>The mandatory cancellation of an agent action when Intent Token
        validation fails. SNAP-BACK MUST occur before the action has market or
        physical effect.</dd>
        <dt>Delegation Chain:</dt>
        <dd>The ordered sequence of principals and agents through which
        authorization has been delegated. Each link is cryptographically signed.
        No link may grant scope exceeding the scope granted to the delegating
        entity.</dd>
        <dt>TBDE:</dt>
        <dd>Temporal Boundary Decision Engine. The runtime component responsible
        for validating every agent action against the declared Intent Token
        within the enforcement latency target.</dd>
        <dt>WitnessBound Audit Chain:</dt>
        <dd>An append-only, cryptographically chained audit record of all
        enforcement decisions providing tamper-evident proof of all
        authorization decisions.</dd>
      </dl>
    </section>

    <section numbered="true" toc="default">
      <name>Problem Statement</name>

      <section numbered="true" toc="default">
        <name>The Authorization Gap Beyond OAuth 2.0</name>
        <t>
          OAuth 2.0 access tokens grant access to resource scopes. A token with
          scope "read:financial_data" grants read access to financial data. It
          does not specify which financial data, under what conditions, at what
          time, or within what value limits.
        </t>
        <t>
          An autonomous agent with an access token has no cryptographic
          constraint on what it does within its granted scope -- including
          actions the authorizing principal never contemplated. Existing
          mitigations -- rate limiting, anomaly detection, audit logging -- are
          post-hoc. The Intent Token is pre-hoc: it declares and enforces
          authorization before action.
        </t>
      </section>

      <section numbered="true" toc="default">
        <name>The Delegation Depth Problem</name>
        <t>
          Modern autonomous agent architectures are hierarchical. An
          orchestrating agent delegates tasks to sub-agents, which may delegate
          further. Existing delegation frameworks, including OAuth 2.0 Token
          Exchange <xref target="RFC8693"/>, do not provide a mechanism for
          propagating declared human intent through the delegation chain.
        </t>
        <t>
          The Intent Token addresses this by requiring that every link in the
          delegation chain present a valid Intent Token that is a subset of the
          authorizing token. A sub-agent cannot act outside the scope its
          delegating principal was itself authorized to grant.
        </t>
      </section>

      <section numbered="true" toc="default">
        <name>The Confused Deputy Problem in Autonomous Systems</name>
        <t>
          The confused deputy problem <xref target="HARDY-1988"/> describes a
          scenario in which a system with legitimate authority is manipulated
          into misusing that authority. In autonomous agent systems, an agent
          may be manipulated via prompt injection, adversarial input, or
          environmental manipulation into taking actions outside its intended
          scope.
        </t>
        <t>
          The Intent Token defends against confused deputy attacks. Because the
          authorized action is declared and signed by the principal BEFORE the
          agent acts, any deviation from the declared intent -- regardless of
          cause -- is detected and blocked at the enforcement layer.
        </t>
      </section>
    </section>

    <section numbered="true" toc="default">
      <name>The Intent Token</name>

      <section numbered="true" toc="default">
        <name>Token Structure</name>
        <t>
          An Intent Token is a JSON Web Token <xref target="RFC7519"/> with the
          following structure. The header MUST include "typ": "intent+jwt".
        </t>
        <artwork name="" type="json" align="left" alt=""><![CDATA[
{
  "header": {
    "alg": "ES256",
    "typ": "intent+jwt"
  },
  "payload": {
    "iss": "https://intentbound.example.com",
    "sub": "agent-id:AG-7729-ALPHA",
    "aud": "iba-gate:production",
    "exp": 1771234567,
    "iat": 1771230967,
    "jti": "a8f3c2d1-4b5e-6f7a-8b9c-0d1e2f3a4b5c",
    "ibt_ver": "1.0",
    "principal": {
      "id": "user:jeffrey.williams@example.com",
      "type": "human",
      "auth_method": "ES256-keypair"
    },
    "declared_intent": {
      "action_class": "financial:order:equity",
      "scope": "EQUITIES_US",
      "bounds": {
        "max_position_usd": 50000000,
        "max_single_order_usd": 5000000,
        "permitted_instruments": ["NYSE:*", "NASDAQ:*"],
        "prohibited_instruments": ["OTC:*"],
        "time_window": "09:30-16:00 EST"
      }
    },
    "shard": {
      "id": "shard:mmc-nbwc-enyn",
      "issued_at": 1771230967,
      "expires_at": 1771231479,
      "window_seconds": 512
    },
    "enforcement": {
      "snap_back": true,
      "latency_target_ms": 5,
      "audit_chain": "witnessbound:production"
    }
  }
}
        ]]></artwork>
      </section>

      <section numbered="true" toc="default">
        <name>Required Claims</name>
        <t>The following claims are REQUIRED in every Intent Token:</t>
        <dl newline="false" spacing="normal">
          <dt>ibt_ver:</dt>
          <dd>The version of the Intent Token specification. This document defines version "1.0".</dd>
          <dt>principal:</dt>
          <dd>An object identifying the authorizing human principal. MUST include "id" (a URI) and "type" ("human" or "organization").</dd>
          <dt>declared_intent:</dt>
          <dd>An object declaring the specific action class the principal authorizes. MUST include "action_class" and "scope".</dd>
          <dt>shard:</dt>
          <dd>An object binding the token to a specific time-bounded session shard. MUST include "id", "issued_at", "expires_at", and "window_seconds".</dd>
          <dt>enforcement:</dt>
          <dd>An object specifying enforcement requirements. MUST include "snap_back" (boolean, MUST be true) and "audit_chain" (URI of the audit chain endpoint).</dd>
        </dl>
        <t>Standard JWT claims iss, sub, aud, exp, iat, and jti are REQUIRED.</t>
      </section>

      <section numbered="true" toc="default">
        <name>Temporal Scope and Shard Binding</name>
        <t>
          Every Intent Token MUST be bound to a time-bounded shard. The shard
          provides temporal scope and session binding. The default shard window
          is 512 seconds. When a shard expires, the agent MUST obtain a new
          Intent Token before continuing to act. The enforcement layer MUST
          reject any action presented with an expired shard.
        </t>
      </section>

      <section numbered="true" toc="default">
        <name>Delegation Chain Encoding</name>
        <t>
          When an authorizing agent delegates to a sub-agent, the delegating
          agent MUST issue a new Intent Token with a declared_intent scope that
          is a subset of its own authorized scope. A delegating agent MUST NOT
          grant scope exceeding its own authorization. The delegation_chain
          array MUST include all prior delegation records plus a new signed
          record for this delegation.
        </t>
      </section>
    </section>

    <section numbered="true" toc="default">
      <name>Intent Certificate</name>
      <t>
        An Intent Certificate is the persistent audit record of an agent
        session. It MUST contain: the principal identity and authentication
        record; the declared scope for the session; the temporal bounds;
        a reference to the WitnessBound audit chain; cryptographic hashes
        of all Intent Tokens issued during the session; and a signed summary
        of all enforcement decisions including SNAP-BACK events.
      </t>
      <t>
        Intent Tokens and Intent Certificates MUST be signed using algorithms
        from NIST SP 800-57 <xref target="NIST-SP-800-57"/>. Implementations
        MUST support ES256 <xref target="RFC7518"/>. Implementations SHOULD
        support ES384 and EdDSA <xref target="RFC8037"/> for higher-security
        deployments.
      </t>
    </section>

    <section numbered="true" toc="default">
      <name>Enforcement Binding</name>

      <section numbered="true" toc="default">
        <name>Pre-Action Validation</name>
        <t>
          The IBA Gate MUST validate the Intent Token BEFORE the agent action
          is permitted to execute. The IBA Gate MUST verify: token signature
          validity; token and shard expiry; action matches declared_intent
          action_class; action parameters are within declared bounds; delegation
          chain validity; and jti uniqueness for replay prevention.
        </t>
        <t>
          Implementations MUST complete all validations within the
          latency_target_ms specified in the enforcement claim. The target is
          5ms.
        </t>
      </section>

      <section numbered="true" toc="default">
        <name>SNAP-BACK on Violation</name>
        <t>
          If any validation check fails, the IBA Gate MUST: reject the agent
          action immediately; record a SNAP-BACK event in the WitnessBound
          audit chain; return a structured error to the agent; and NOT permit
          the action to be retried without a new Intent Token authorized by the
          principal. SNAP-BACK is a hard stop. No partial execution is
          permitted.
        </t>
      </section>

      <section numbered="true" toc="default">
        <name>Audit Chain Requirements</name>
        <t>
          Every enforcement decision MUST be recorded in the WitnessBound audit
          chain. Each record MUST contain: the jti of the Intent Token; the
          validation timestamp (nanosecond precision RECOMMENDED); the
          validation result (PASS or SNAP-BACK); and a cryptographic hash
          chained to the previous record. This audit chain satisfies the audit
          requirements of EU AI Act Article 9, MiFID II, FDA Cybersecurity 2023,
          and HIPAA Security Rule.
        </t>
      </section>
    </section>

    <section numbered="true" toc="default">
      <name>Interoperability</name>

      <section numbered="true" toc="default">
        <name>Relationship to OAuth 2.0</name>
        <t>
          The Intent Token is complementary to OAuth 2.0 <xref target="RFC6749"/>.
          OAuth 2.0 governs access; the Intent Token governs action. In a
          compliant implementation: the agent obtains an OAuth 2.0 access token
          establishing resource access; the principal issues an Intent Token
          declaring the specific authorized action; the IBA Gate validates the
          Intent Token before permitting the action.
        </t>
      </section>

      <section numbered="true" toc="default">
        <name>Relationship to Delegation Capability Tokens</name>
        <t>
          Tomasev et al. <xref target="DEEPMIND-DCT"/> introduced Delegation
          Capability Tokens (DCTs) as a primitive for AI agent authorization.
          DCTs address the same authorization gap as the Intent Token, arriving
          independently seven days after the IBA patent filing. The IETF is
          encouraged to consider harmonization between this specification and
          the DCT work, given the independent convergence on the same primitive.
        </t>
      </section>

      <section numbered="true" toc="default">
        <name>Relationship to W3C Verifiable Credentials</name>
        <t>
          Intent Certificates MAY be implemented as W3C Verifiable Credentials
          <xref target="VC-DATA-MODEL"/>, using the "IntentCertificate"
          credential type with credential subject claims encoding the session
          authorization context specified in Section 5.
        </t>
      </section>
    </section>

    <section numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>
        Replay Attacks: Intent Tokens MUST include a unique jti claim. The IBA
        Gate MUST maintain a record of used jti values for the duration of the
        shard window.
      </t>
      <t>
        Token Forgery: Implementations MUST follow NIST SP 800-57 for key
        management. Hardware security modules (HSMs) are RECOMMENDED for
        principal signing keys in high-security deployments.
      </t>
      <t>
        Scope Escalation: Implementations MUST validate the complete delegation
        chain, not only the most recent delegation record.
      </t>
      <t>
        Prompt Injection: The Intent Token provides defense against prompt
        injection attacks. An agent manipulated into attempting an out-of-scope
        action will be stopped by SNAP-BACK regardless of the cause.
      </t>
      <t>
        Enforcement Latency: The 5ms enforcement latency target is a security
        parameter. In financial systems, actions with market impact occur faster
        than 5ms. Implementations in latency-sensitive domains MUST measure and
        report enforcement latency.
      </t>
      <t>
        Audit Chain Integrity: Implementations MUST store audit chain records
        in append-only storage with access controls preventing modification or
        deletion.
      </t>
    </section>

    <section numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>This document requests the following JWT Claim registrations:</t>
      <ul spacing="normal">
        <li>Claim Name: ibt_ver -- Intent Token specification version</li>
        <li>Claim Name: declared_intent -- Principal-declared authorized action scope</li>
        <li>Claim Name: shard -- Time-bounded session shard binding</li>
        <li>Claim Name: enforcement -- Enforcement requirements for this token</li>
        <li>Claim Name: delegation_chain -- Ordered delegation records</li>
      </ul>
      <t>This document requests registration of the media type application/intent+jwt for Intent Tokens.</t>
    </section>

  </middle>

  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>

        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="Scott Bradner"/>
            <date year="1997" month="March"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
        </reference>
        <reference anchor="RFC6749" target="https://www.rfc-editor.org/info/rfc6749">
          <front>
            <title>The OAuth 2.0 Authorization Framework</title>
            <author initials="D." surname="Hardt" fullname="Dick Hardt" role="editor"/>
            <date year="2012" month="October"/>
          </front>
          <seriesInfo name="RFC" value="6749"/>
        </reference>
        <reference anchor="RFC7518" target="https://www.rfc-editor.org/info/rfc7518">
          <front>
            <title>JSON Web Algorithms (JWA)</title>
            <author initials="M." surname="Jones" fullname="Michael Jones"/>
            <date year="2015" month="May"/>
          </front>
          <seriesInfo name="RFC" value="7518"/>
        </reference>
        <reference anchor="RFC7519" target="https://www.rfc-editor.org/info/rfc7519">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author initials="M." surname="Jones" fullname="Michael Jones"/>
            <author initials="J." surname="Bradley" fullname="John Bradley"/>
            <author initials="N." surname="Sakimura" fullname="Nat Sakimura"/>
            <date year="2015" month="May"/>
          </front>
          <seriesInfo name="RFC" value="7519"/>
        </reference>
        <reference anchor="RFC8037" target="https://www.rfc-editor.org/info/rfc8037">
          <front>
            <title>CFRG Elliptic Curves for JOSE</title>
            <author initials="I." surname="Liusvaara" fullname="Ilari Liusvaara"/>
            <date year="2017" month="January"/>
          </front>
          <seriesInfo name="RFC" value="8037"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="Barry Leiba"/>
            <date year="2017" month="May"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
        </reference>
        <reference anchor="RFC8693" target="https://www.rfc-editor.org/info/rfc8693">
          <front>
            <title>OAuth 2.0 Token Exchange</title>
            <author initials="M." surname="Jones" fullname="Michael Jones"/>
            <author initials="A." surname="Nadalin" fullname="Anthony Nadalin"/>
            <author initials="B." surname="Campbell" fullname="Brian Campbell" role="editor"/>
            <author initials="J." surname="Bradley" fullname="John Bradley"/>
            <author initials="C." surname="Mortimore" fullname="Chuck Mortimore"/>
            <date year="2020" month="January"/>
          </front>
          <seriesInfo name="RFC" value="8693"/>
        </reference>

        <reference anchor="NIST-SP-800-57">
          <front>
            <title>Recommendation for Key Management: Part 1 - General</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2020" month="May"/>
          </front>
          <seriesInfo name="NIST Special Publication" value="800-57 Part 1 Rev 5"/>
        </reference>

      </references>
      <references>
        <name>Informative References</name>

        <reference anchor="OIDC">
          <front>
            <title>OpenID Connect Core 1.0</title>
            <author initials="N." surname="Sakimura"/>
            <author initials="J." surname="Bradley"/>
            <author initials="M." surname="Jones"/>
            <author initials="B." surname="de Medeiros"/>
            <author initials="C." surname="Mortimore"/>
            <date year="2014" month="November"/>
          </front>
        </reference>

        <reference anchor="DEEPMIND-DCT">
          <front>
            <title>Delegation Capability Tokens for AI Agent Authorization</title>
            <author initials="N." surname="Tomasev" fullname="Nenad Tomasev"/>
            <date year="2026" month="February"/>
          </front>
          <seriesInfo name="arXiv" value="2602.11865"/>
        </reference>

        <reference anchor="HARDY-1988">
          <front>
            <title>The Confused Deputy (or why capabilities might have been invented)</title>
            <author initials="N." surname="Hardy" fullname="Norm Hardy"/>
            <date year="1988" month="October"/>
          </front>
          <seriesInfo name="SIGOPS Operating Systems Review" value="Volume 22, Issue 4"/>
        </reference>

        <reference anchor="VC-DATA-MODEL">
          <front>
            <title>Verifiable Credentials Data Model v2.0</title>
            <author initials="M." surname="Sporny"/>
            <date year="2024" month="May"/>
          </front>
        </reference>

      </references>
    </references>
  </back>
</rfc>
