{"slug":"an-ietf-draft-puts-a-proxy-between-every-agent-and-every-tool-call","citations":[{"url":"https://datatracker.ietf.org/doc/html/draft-aip-agent-identity-protocol-00","committed_hash":"sha256:da7b5a4ae36053f8890d2daaa83173a094a379bdf3d3750847f1e7f12d17bf12","committed_hash_short":"sha256:da7b5a4a…2d17bf12","mime_type":"text/html","committed_at":"2026-09-03T03:00:23.990549+00:00","content_snapshot":"\n<!DOCTYPE html>\n\n\n\n\n\n\n\n<html data-bs-theme=\"auto\" lang=\"en\">\n    <head>\n        \n        <meta charset=\"utf-8\">\n        <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n        <title>\n            \n                draft-aip-agent-identity-protocol-00\n            \n        </title>\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <link href=\"https://static.ietf.org/fonts/inter/import.css\" rel=\"stylesheet\">\n        <link href=\"https://static.ietf.org/fonts/noto-sans-mono/import.css\" rel=\"stylesheet\">\n        \n            <link rel=\"stylesheet\" href=\"https://static.ietf.org/dt/12.73.0/ietf/css/document_html_referenced.css\">\n            \n                <link rel=\"stylesheet\" href=\"https://static.ietf.org/dt/12.73.0/ietf/css/document_html_txt.css\">\n            \n            <script type=\"module\" crossorigin=\"\" src=\"https://static.ietf.org/dt/12.73.0/assets/embedded-37cb0fde.js\"></script>\n<link href=\"https://static.ietf.org/dt/12.73.0/assets/create-pinia-singleton-21cde441.js\" type=\"text/javascript\" crossorigin=\"anonymous\" rel=\"modulepreload\" as=\"script\" />\n<link href=\"https://static.ietf.org/dt/12.73.0/assets/Scrollbar-6338efe6.js\" type=\"text/javascript\" crossorigin=\"anonymous\" rel=\"modulepreload\" as=\"script\" />\n            <script src=\"https://static.ietf.org/dt/12.73.0/ietf/js/document_html.js\"></script>\n            <script src=\"https://static.ietf.org/dt/12.73.0/ietf/js/theme.js\"></script>\n        \n        <link rel=\"alternate\" type=\"application/atom+xml\" title=\"Document changes\" href=\"/feed/document-changes/draft-aip-agent-identity-protocol/\">\n        <meta name=\"description\"\n            \n                content=\"Agent Identity Protocol: Agentic Authentication and Authorized Policy Enforcement (Internet-Draft, 2026)\"\n            >\n        \n\n<link rel=\"apple-touch-icon\"\n      sizes=\"180x180\"\n      href=\"https://static.ietf.org/dt/12.73.0/ietf/images/ietf-logo-nor-180.png\">\n<link rel=\"icon\"\n      sizes=\"32x32\"\n      href=\"https://static.ietf.org/dt/12.73.0/ietf/images/ietf-logo-nor-32.png\">\n<link rel=\"icon\"\n      sizes=\"16x16\"\n      href=\"https://static.ietf.org/dt/12.73.0/ietf/images/ietf-logo-nor-16.png\">\n<link rel=\"manifest\" href=\"/site.webmanifest\">\n<link rel=\"mask-icon\"\n      href=\"https://static.ietf.org/dt/12.73.0/ietf/images/ietf-logo-nor-mask.svg\"\n      color=\"#ffffff\">\n<meta name=\"msapplication-TileColor\"\n      content=\"#ffffff\">\n<meta name=\"theme-color\"\n      content=\"#ffffff\">\n        \n\n\n\n\n<meta property=\"og:title\" content=\"Agent Identity Protocol: Agentic Authentication and Authorized Policy Enforcement\">\n<meta property=\"og:url\" content=\"https://datatracker.ietf.org/doc/html/draft-aip-agent-identity-protocol-00\">\n\n\n<link rel=\"canonical\" href=\"https://datatracker.ietf.org/doc/html/draft-aip-agent-identity-protocol-00\">\n\n<meta property=\"og:site_name\" content=\"IETF Datatracker\">\n<meta property=\"og:description\" content=\"This document defines the Agent Identity Protocol (AIP), an open standard for verifiable identity and policy enforcement for artificial intelligence (AI) agents. Agent Identity Protocol (AIP) addresses the problem of AI agents operating with unbounded permissions -- running as users, inheriting full API key access, and executing tool calls with no verifiable identity boundary between human and non-human actors. The protocol is structured as two cooperating layers. Layer 1 (Identity) gives every agent a unique identifier and a key pair registered with an AIP Registry; the agent signs every outbound action with that key. Layer 2 (Enforcement) interposes a proxy between the AI client and every tool server that verifies the signature, evaluates a declarative policy, and produces an allow, deny, or hold decision before any tool is reached.\">\n<meta property=\"og:type\" content=\"article\">\n\n<meta property=\"article:section\" content=\"Individual Internet-Draft\">\n\n<meta property=\"article:author\" content=\"James Cao\">\n<meta property=\"article:author\" content=\"Carlos Eduardo Arango Gutierrez\">\n\n\n\n        \n        <style>\n            \n            .diff-form .select2-selection__rendered {\n                direction: rtl;\n                text-align: left;\n            }\n        </style>\n    </head>\n    <body>\n        \n        <noscript><iframe class=\"status\" title=\"Site status\" src=\"/status/latest\"></iframe></noscript>\n<div class=\"vue-embed\" data-component=\"Status\"></div>\n        <div class=\"btn-toolbar sidebar-toolbar position-fixed top-0 end-0 m-2 m-lg-3 d-print-none\">\n            <div class=\"dropdown\">\n                <button class=\"btn btn-outline-secondary btn-sm me-1 dropdown-toggle d-flex align-items-center\"\n                    id=\"bd-theme\" type=\"button\" aria-expanded=\"false\" data-bs-toggle=\"dropdown\"\n                    aria-label=\"Toggle theme\">\n                        <i class=\"theme-icon-active bi bi-circle-half\"></i>\n                </button>\n\n                <ul class=\"dropdown-menu\" aria-labelledby=\"bd-theme\">\n                    <li>\n                        <button type=\"button\" class=\"dropdown-item d-flex align-items-center\"\n                            data-bs-theme-value=\"light\" aria-pressed=\"false\">\n                            <i class=\"me-2 opacity-50 theme-icon bi bi-sun-fill\"></i>\n                            Light<i class=\"bi bi-check2 ms-auto d-none\"></i>\n                        </button>\n                    </li>\n                    <li>\n                        <button type=\"button\" class=\"dropdown-item d-flex align-items-center\"\n                            data-bs-theme-value=\"dark\" aria-pressed=\"false\">\n                            <i class=\"me-2 opacity-50 theme-icon bi bi-moon-stars-fill\"></i>\n                            Dark<i class=\"bi bi-check2 ms-auto d-none\"></i>\n                        </button>\n                    </li>\n                    <li>\n                        <button type=\"button\" class=\"dropdown-item d-flex align-items-center active\"\n                            data-bs-theme-value=\"auto\" aria-pressed=\"true\">\n                            <i class=\"me-2 opacity-50 theme-icon bi bi-circle-half\"></i>\n                            Auto<i class=\"bi bi-check2 ms-auto d-none\"></i>\n                        </button>\n                    </li>\n                </ul>\n            </div>\n            <button class=\"btn btn-outline-secondary btn-sm sidebar-toggle\"\n                    type=\"button\"\n                    data-bs-toggle=\"collapse\"\n                    data-bs-target=\"#sidebar\"\n                    aria-expanded=\"true\"\n                    aria-controls=\"sidebar\"\n                    aria-label=\"Toggle metadata sidebar\"\n                    title=\"Toggle metadata sidebar\">\n            <i class=\"bi bi-arrow-bar-left sidebar-shown\"></i>\n            <i class=\"bi bi-arrow-bar-right sidebar-collapsed\"></i>\n            </button>\n        </div>\n        <nav class=\"navbar bg-light-subtle px-1 fixed-top d-print-none d-md-none\">\n            <a class=\"nav-link ps-1\"\n               href=\"/doc/draft-aip-agent-identity-protocol/\">\n                 \n                    draft-aip-agent-identity-protocol-00\n                \n                <br class=\"d-sm-none\">\n\n                <span class=\"ms-sm-3 badge rounded-pill badge-draft\">\n                    \n                        None\n                    \n                </span>\n            </a>\n            <button class=\"navbar-toggler p-1\"\n                    type=\"button\"\n                    data-bs-toggle=\"collapse\"\n                    data-bs-target=\"#docinfo-collapse\"\n                    aria-controls=\"docinfo-collapse\"\n                    aria-expanded=\"false\"\n                    aria-label=\"Show document information\">\n                <span class=\"navbar-toggler-icon small\"></span>\n            </button>\n            <div class=\"navbar-nav navbar-nav-scroll overscroll-none collapse pt-1\" id=\"docinfo-collapse\">\n                <div class=\"bg-light-subtle p-0\">\n                    <table class=\"table table-sm table-borderless small\">\n                        <tbody class=\"meta align-top\">\n                            <tr>\n                                <th scope=\"row\"></th>\n                                <th scope=\"row\">Title</th>\n                                <td class=\"edit\"></td>\n                                <td>Agent Identity Protocol: Agentic Authentication and Authorized Policy Enforcement</td>\n                            </tr>\n                        </tbody>\n                        \n\n\n\n\n\n\n\n<tbody class=\"meta align-top \">\n    <tr>\n        <th scope=\"row\">Document</th>\n        <th scope=\"row\">Document type</th>\n        <td class=\"edit\"></td>\n        <td>\n            \n\n\n\n\n\n\n\n    <span class=\"text-success\">Active Internet-Draft</span>\n    (individual)\n    \n\n            \n            \n            \n                \n\n\n\n\n    <div class=\"alert alert-warning small p-2 mt-2\" role=\"alert\">\n        This document is an Internet-Draft (I-D).\n        Anyone may submit an I-D to the IETF.\n        This I-D is <strong>not endorsed by the IETF</strong> and has <strong>no formal standing</strong> in the\n        <a href=\"/doc/rfc2026/\">IETF standards process</a>.\n    </div>\n\n\n            \n        </td>\n    </tr>\n    \n        <tr>\n            <td></td>\n            <th scope=\"row\">Select version</th>\n            <td class=\"edit\"></td>\n            <td>\n                \n\n\n\n    <ul class=\"revision-list pagination pagination-sm text-center flex-wrap my-0\">\n        \n            \n                 \n                    <li class=\"page-item active\">\n                        <a class=\"page-link\"\n                        href=\"/doc/html/draft-aip-agent-identity-protocol-00\"\n                        >\n                            00\n                        </a>\n                    </li>\n                \n            \n            \n        \n    </ul>\n\n            </td>\n        </tr>\n        \n    \n    <tr>\n        <td></td>\n        <th scope=\"row\">Authors</th>\n        <td class=\"edit\">\n            \n        </td>\n        <td>\n            \n            \n                <span ><a \n           title=\"Datatracker profile of James Cao\"\n            href=\"/person/james@montcao.com\" >James Cao</a> <a \n               href=\"mailto:james%40montcao.com\"\n               aria-label=\"Compose email to james@montcao.com\"\n               title=\"Compose email to james@montcao.com\">\n                <i class=\"bi bi-envelope\"></i></a></span>,\n            \n                <span ><a \n           title=\"Datatracker profile of Carlos Eduardo Arango Gutierrez\"\n            href=\"/person/eduardoa@nvidia.com\" >Carlos Eduardo Arango Gutierrez</a> <a \n               href=\"mailto:eduardoa%40nvidia.com\"\n               aria-label=\"Compose email to eduardoa@nvidia.com\"\n               title=\"Compose email to eduardoa@nvidia.com\">\n                <i class=\"bi bi-envelope\"></i></a></span>\n            \n            \n                <br>\n                <a class=\"btn btn-primary btn-sm mt-1\" href=\"mailto:draft-aip-agent-identity-protocol@ietf.org?subject=draft-aip-agent-identity-protocol\" title=\"Send email to the document authors\">Email authors</a>\n            \n        </td>\n    </tr>\n    \n    \n        \n        \n        \n    \n    <tr>\n        <td></td>\n        <th scope=\"row\">\n            RFC stream\n        </th>\n        <td class=\"edit\">\n            \n        </td>\n        <td class=\"text-body-secondary\">\n            \n                (None)\n            \n        </td>\n    </tr>\n    \n        <tr>\n            <td></td>\n            <th scope=\"row\">\n                Intended RFC status\n            </th>\n            <td class=\"edit\">\n                \n            </td>\n            <td>\n                \n                    <span class=\"text-body-secondary\">\n                        (None)\n                    </span>\n                \n            </td>\n        </tr>\n    \n    <tr>\n        <td></td>\n        <th scope=\"row\">\n            Other formats\n        </th>\n        <td class=\"edit\">\n        </td>\n        <td>\n            \n                \n    <div class=\"buttonlist\">\n    \n        \n        <a class=\"btn btn-primary btn-sm\"\n          \n          target=\"_blank\"\n          href=\"https://www.ietf.org/archive/id/draft-aip-agent-identity-protocol-00.txt\">\n            \n                <i class=\"bi bi-file-text\"></i> txt\n            \n        </a>\n        \n    \n        \n        <a class=\"btn btn-primary btn-sm\"\n          \n          target=\"_blank\"\n          href=\"https://www.ietf.org/archive/id/draft-aip-agent-identity-protocol-00.html\">\n            \n                <i class=\"bi bi-file-code\"></i> html\n            \n        </a>\n        \n    \n        \n        <a class=\"btn btn-primary btn-sm\"\n          \n          target=\"_blank\"\n          href=\"https://www.ietf.org/archive/id/draft-aip-agent-identity-protocol-00.xml\">\n            \n                <i class=\"bi bi-file-code\"></i> xml\n            \n        </a>\n        \n    \n        \n    \n        \n        <a class=\"btn btn-primary btn-sm\"\n          \n          target=\"_blank\"\n          href=\"/doc/draft-aip-agent-identity-protocol/00/bibtex/\">\n            \n                <i class=\"bi bi-file-ruled\"></i> bibtex\n            \n        </a>\n        \n    \n        \n        <a class=\"btn btn-primary btn-sm\"\n          \n          target=\"_blank\"\n          href=\"/doc/bibxml3/draft-aip-agent-identity-protocol-00.xml\">\n            \n                <i class=\"bi bi-file-code\"></i> bibxml\n            \n        </a>\n        \n    \n</div>\n\n            \n        </td>\n    </tr>\n    \n    \n        \n    \n</tbody>\n                        <tr>\n                            <th scope=\"row\"></th>\n                            <th scope=\"row\"></th>\n                            <td class=\"edit\"></td>\n                            <td>\n                                <a class=\"btn btn-sm btn-warning mb-3\"\n                                target=\"_blank\"\n                                href=\"https://github.com/ietf-tools/datatracker/issues/new/choose\">\n                                    Report a bug\n                                    <i class=\"bi bi-bug\"></i>\n                                </a>\n                            </td>\n                        </tr>\n                    </table>\n                </div>\n            </div>\n        </nav>\n        <div class=\"row g-0\">\n            <div class=\"col-md-9 d-flex justify-content-center lh-sm\"\n                 data-bs-spy=\"scroll\"\n                 data-bs-target=\"#toc-nav\"\n                 data-bs-smooth-scroll=\"true\"\n                 tabindex=\"0\"\n                 id=\"content\">\n                \n                    <div class=\"rfchtml\">\n                        <br class=\"noprint\">\n                        <div class=\"xml2rfc\">\n<table class=\"ears\">\n<thead><tr>\n<td class=\"left\">Internet-Draft</td>\n<td class=\"center\">Agent Identity Protocol: Agentic Authent</td>\n<td class=\"right\">March 2026</td>\n</tr></thead>\n<tfoot><tr>\n<td class=\"left\">Cao &amp; Arango Gutierrez</td>\n<td class=\"center\">Expires 17 September 2026</td>\n<td class=\"right\">[Page]</td>\n</tr></tfoot>\n</table>\n<div id=\"external-metadata\" class=\"document-information\"></div>\n<div id=\"internal-metadata\" class=\"document-information\">\n<dl id=\"identifiers\">\n<dt class=\"label-workgroup\">Workgroup:</dt>\n<dd class=\"workgroup\">Network Working Group</dd>\n<dt class=\"label-internet-draft\">Internet-Draft:</dt>\n<dd class=\"internet-draft\">draft-aip-agent-identity-protocol-00</dd>\n<dt class=\"label-published\">Published:</dt>\n<dd class=\"published\">\n<time datetime=\"2026-03-16\" class=\"published\">16 March 2026</time>\n    </dd>\n<dt class=\"label-intended-status\">Intended Status:</dt>\n<dd class=\"intended-status\">Standards Track</dd>\n<dt class=\"label-expires\">Expires:</dt>\n<dd class=\"expires\"><time datetime=\"2026-09-17\">17 September 2026</time></dd>\n<dt class=\"label-authors\">Authors:</dt>\n<dd class=\"authors\">\n<div class=\"author\">\n      <div class=\"author-name\">J. Cao</div>\n<div class=\"org\">Montcao</div>\n</div>\n<div class=\"author\">\n      <div class=\"author-name\">C. Arango Gutierrez</div>\n<div class=\"org\">NVIDIA</div>\n</div>\n</dd>\n</dl>\n</div>\n<h1 id=\"title\">Agent Identity Protocol: Agentic Authentication and Authorized Policy Enforcement</h1>\n<section id=\"section-abstract\">\n      <h2 id=\"abstract\"><a href=\"#abstract\" class=\"selfRef\">Abstract</a></h2>\n<p id=\"section-abstract-1\">\n   This document defines the Agent Identity Protocol (AIP), an open\n   standard for verifiable identity and policy enforcement for\n   artificial intelligence (AI) agents.<a href=\"#section-abstract-1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-abstract-2\">\n   Agent Identity Protocol (AIP) addresses the problem of AI agents operating with unbounded\n   permissions -- running as users, inheriting full API key access, and\n   executing tool calls with no verifiable identity boundary between\n   human and non-human actors.<a href=\"#section-abstract-2\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-abstract-3\">\n   The protocol is structured as two cooperating layers.  Layer 1\n   (Identity) gives every agent a unique identifier and a key\n   pair registered with an AIP Registry; the agent signs every outbound\n   action with that key.  Layer 2 (Enforcement) interposes a proxy\n   between the AI client and every tool server that verifies the\n   signature, evaluates a declarative policy, and produces an allow,\n   deny, or hold decision before any tool is reached.<a href=\"#section-abstract-3\" class=\"pilcrow\">¶</a></p>\n</section>\n<div id=\"status-of-memo\">\n<section id=\"section-boilerplate.1\">\n        <h2 id=\"name-status-of-this-memo\">\n<a href=\"#name-status-of-this-memo\" class=\"section-name selfRef\">Status of This Memo</a>\n        </h2>\n<p id=\"section-boilerplate.1-1\">\n        This Internet-Draft is submitted in full conformance with the\n        provisions of BCP 78 and BCP 79.<a href=\"#section-boilerplate.1-1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-boilerplate.1-2\">\n        Internet-Drafts are working documents of the Internet Engineering Task\n        Force (IETF). Note that other groups may also distribute working\n        documents as Internet-Drafts. The list of current Internet-Drafts is\n        at <span><a href=\"https://datatracker.ietf.org/drafts/current/\">https://datatracker.ietf.org/drafts/current/</a></span>.<a href=\"#section-boilerplate.1-2\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-boilerplate.1-3\">\n        Internet-Drafts are draft documents valid for a maximum of six months\n        and may be updated, replaced, or obsoleted by other documents at any\n        time. It is inappropriate to use Internet-Drafts as reference\n        material or to cite them other than as \"work in progress.\"<a href=\"#section-boilerplate.1-3\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-boilerplate.1-4\">\n        This Internet-Draft will expire on 17 September 2026.<a href=\"#section-boilerplate.1-4\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"copyright\">\n<section id=\"section-boilerplate.2\">\n        <h2 id=\"name-copyright-notice\">\n<a href=\"#name-copyright-notice\" class=\"section-name selfRef\">Copyright Notice</a>\n        </h2>\n<p id=\"section-boilerplate.2-1\">\n            Copyright (c) 2026 IETF Trust and the persons identified as the\n            document authors. All rights reserved.<a href=\"#section-boilerplate.2-1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-boilerplate.2-2\">\n            This document is subject to BCP 78 and the IETF Trust's Legal\n            Provisions Relating to IETF Documents\n            (<span><a href=\"https://trustee.ietf.org/license-info\">https://trustee.ietf.org/license-info</a></span>) in effect on the date of\n            publication of this document. Please review these documents\n            carefully, as they describe your rights and restrictions with\n            respect to this document. Code Components extracted from this\n            document must include Revised BSD License text as described in\n            Section 4.e of the Trust Legal Provisions and are provided without\n            warranty as described in the Revised BSD License.<a href=\"#section-boilerplate.2-2\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"toc\">\n<section id=\"section-toc.1\">\n        <a href=\"#\" onclick=\"scroll(0,0)\" class=\"toplink\">▲</a><h2 id=\"name-table-of-contents\">\n<a href=\"#name-table-of-contents\" class=\"section-name selfRef\">Table of Contents</a>\n        </h2>\n<nav class=\"toc\"><ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.1\">\n            <p id=\"section-toc.1-1.1.1\" class=\"keepWithNext\"><a href=\"#section-1\" class=\"auto internal xref\">1</a>.  <a href=\"#name-introduction\" class=\"internal xref\">Introduction</a></p>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.2\">\n            <p id=\"section-toc.1-1.2.1\" class=\"keepWithNext\"><a href=\"#section-2\" class=\"auto internal xref\">2</a>.  <a href=\"#name-terminology-and-conventions\" class=\"internal xref\">Terminology and Conventions</a></p>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.3\">\n            <p id=\"section-toc.1-1.3.1\"><a href=\"#section-3\" class=\"auto internal xref\">3</a>.  <a href=\"#name-problem-statement\" class=\"internal xref\">Problem Statement</a></p>\n<ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.3.2.1\">\n                <p id=\"section-toc.1-1.3.2.1.1\" class=\"keepWithNext\"><a href=\"#section-3.1\" class=\"auto internal xref\">3.1</a>.  <a href=\"#name-the-identity-gap\" class=\"internal xref\">The Identity Gap</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.3.2.2\">\n                <p id=\"section-toc.1-1.3.2.2.1\"><a href=\"#section-3.2\" class=\"auto internal xref\">3.2</a>.  <a href=\"#name-the-enforcement-gap\" class=\"internal xref\">The Enforcement Gap</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.3.2.3\">\n                <p id=\"section-toc.1-1.3.2.3.1\"><a href=\"#section-3.3\" class=\"auto internal xref\">3.3</a>.  <a href=\"#name-scope-of-this-specification\" class=\"internal xref\">Scope of This Specification</a></p>\n</li>\n            </ul>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.4\">\n            <p id=\"section-toc.1-1.4.1\"><a href=\"#section-4\" class=\"auto internal xref\">4</a>.  <a href=\"#name-protocol-overview\" class=\"internal xref\">Protocol Overview</a></p>\n<ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.4.2.1\">\n                <p id=\"section-toc.1-1.4.2.1.1\"><a href=\"#section-4.1\" class=\"auto internal xref\">4.1</a>.  <a href=\"#name-architecture\" class=\"internal xref\">Architecture</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.4.2.2\">\n                <p id=\"section-toc.1-1.4.2.2.1\"><a href=\"#section-4.2\" class=\"auto internal xref\">4.2</a>.  <a href=\"#name-call-lifecycle\" class=\"internal xref\">Call Lifecycle</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.4.2.3\">\n                <p id=\"section-toc.1-1.4.2.3.1\"><a href=\"#section-4.3\" class=\"auto internal xref\">4.3</a>.  <a href=\"#name-relationship-to-existing-st\" class=\"internal xref\">Relationship to Existing Standards</a></p>\n</li>\n            </ul>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.5\">\n            <p id=\"section-toc.1-1.5.1\"><a href=\"#section-5\" class=\"auto internal xref\">5</a>.  <a href=\"#name-layer-1-agent-identity\" class=\"internal xref\">Layer 1: Agent Identity</a></p>\n<ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.5.2.1\">\n                <p id=\"section-toc.1-1.5.2.1.1\"><a href=\"#section-5.1\" class=\"auto internal xref\">5.1</a>.  <a href=\"#name-agent-registration\" class=\"internal xref\">Agent Registration</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.5.2.2\">\n                <p id=\"section-toc.1-1.5.2.2.1\"><a href=\"#section-5.2\" class=\"auto internal xref\">5.2</a>.  <a href=\"#name-agent-record\" class=\"internal xref\">Agent Record</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.5.2.3\">\n                <p id=\"section-toc.1-1.5.2.3.1\"><a href=\"#section-5.3\" class=\"auto internal xref\">5.3</a>.  <a href=\"#name-aip-registry-api\" class=\"internal xref\">AIP Registry API</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.5.2.4\">\n                <p id=\"section-toc.1-1.5.2.4.1\"><a href=\"#section-5.4\" class=\"auto internal xref\">5.4</a>.  <a href=\"#name-key-rotation\" class=\"internal xref\">Key Rotation</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.5.2.5\">\n                <p id=\"section-toc.1-1.5.2.5.1\"><a href=\"#section-5.5\" class=\"auto internal xref\">5.5</a>.  <a href=\"#name-agent-revocation\" class=\"internal xref\">Agent Revocation</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.5.2.6\">\n                <p id=\"section-toc.1-1.5.2.6.1\"><a href=\"#section-5.6\" class=\"auto internal xref\">5.6</a>.  <a href=\"#name-the-aip-token-agent-attesta\" class=\"internal xref\">The AIP Token (Agent Attestation Token)</a></p>\n<ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.5.2.6.2.1\">\n                    <p id=\"section-toc.1-1.5.2.6.2.1.1\"><a href=\"#section-5.6.1\" class=\"auto internal xref\">5.6.1</a>.  <a href=\"#name-token-fields\" class=\"internal xref\">Token Fields</a></p>\n</li>\n                  <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.5.2.6.2.2\">\n                    <p id=\"section-toc.1-1.5.2.6.2.2.1\"><a href=\"#section-5.6.2\" class=\"auto internal xref\">5.6.2</a>.  <a href=\"#name-canonical-serialization\" class=\"internal xref\">Canonical Serialization</a></p>\n</li>\n                  <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.5.2.6.2.3\">\n                    <p id=\"section-toc.1-1.5.2.6.2.3.1\"><a href=\"#section-5.6.3\" class=\"auto internal xref\">5.6.3</a>.  <a href=\"#name-example-token-before-base64\" class=\"internal xref\">Example Token (before base64url encoding for transport)</a></p>\n</li>\n                </ul>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.5.2.7\">\n                <p id=\"section-toc.1-1.5.2.7.1\"><a href=\"#section-5.7\" class=\"auto internal xref\">5.7</a>.  <a href=\"#name-token-verification\" class=\"internal xref\">Token Verification</a></p>\n</li>\n            </ul>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.6\">\n            <p id=\"section-toc.1-1.6.1\"><a href=\"#section-6\" class=\"auto internal xref\">6</a>.  <a href=\"#name-layer-2-enforcement-proxy\" class=\"internal xref\">Layer 2: Enforcement Proxy</a></p>\n<ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.6.2.1\">\n                <p id=\"section-toc.1-1.6.2.1.1\"><a href=\"#section-6.1\" class=\"auto internal xref\">6.1</a>.  <a href=\"#name-proxy-architecture\" class=\"internal xref\">Proxy Architecture</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.6.2.2\">\n                <p id=\"section-toc.1-1.6.2.2.1\"><a href=\"#section-6.2\" class=\"auto internal xref\">6.2</a>.  <a href=\"#name-agentpolicy\" class=\"internal xref\">AgentPolicy</a></p>\n<ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.6.2.2.2.1\">\n                    <p id=\"section-toc.1-1.6.2.2.2.1.1\"><a href=\"#section-6.2.1\" class=\"auto internal xref\">6.2.1</a>.  <a href=\"#name-schema\" class=\"internal xref\">Schema</a></p>\n</li>\n                  <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.6.2.2.2.2\">\n                    <p id=\"section-toc.1-1.6.2.2.2.2.1\"><a href=\"#section-6.2.2\" class=\"auto internal xref\">6.2.2</a>.  <a href=\"#name-tool-allowlist\" class=\"internal xref\">Tool Allowlist</a></p>\n</li>\n                  <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.6.2.2.2.3\">\n                    <p id=\"section-toc.1-1.6.2.2.2.3.1\"><a href=\"#section-6.2.3\" class=\"auto internal xref\">6.2.3</a>.  <a href=\"#name-tool-rules\" class=\"internal xref\">Tool Rules</a></p>\n</li>\n                  <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.6.2.2.2.4\">\n                    <p id=\"section-toc.1-1.6.2.2.2.4.1\"><a href=\"#section-6.2.4\" class=\"auto internal xref\">6.2.4</a>.  <a href=\"#name-dlp-rules\" class=\"internal xref\">DLP Rules</a></p>\n</li>\n                  <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.6.2.2.2.5\">\n                    <p id=\"section-toc.1-1.6.2.2.2.5.1\"><a href=\"#section-6.2.5\" class=\"auto internal xref\">6.2.5</a>.  <a href=\"#name-hitl-configuration\" class=\"internal xref\">HITL Configuration</a></p>\n</li>\n                </ul>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.6.2.3\">\n                <p id=\"section-toc.1-1.6.2.3.1\"><a href=\"#section-6.3\" class=\"auto internal xref\">6.3</a>.  <a href=\"#name-intercept-flow\" class=\"internal xref\">Intercept Flow</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.6.2.4\">\n                <p id=\"section-toc.1-1.6.2.4.1\"><a href=\"#section-6.4\" class=\"auto internal xref\">6.4</a>.  <a href=\"#name-decision-outcomes\" class=\"internal xref\">Decision Outcomes</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.6.2.5\">\n                <p id=\"section-toc.1-1.6.2.5.1\"><a href=\"#section-6.5\" class=\"auto internal xref\">6.5</a>.  <a href=\"#name-human-in-the-loop-hitl\" class=\"internal xref\">Human-in-the-Loop (HITL)</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.6.2.6\">\n                <p id=\"section-toc.1-1.6.2.6.1\"><a href=\"#section-6.6\" class=\"auto internal xref\">6.6</a>.  <a href=\"#name-data-loss-prevention-dlp\" class=\"internal xref\">Data Loss Prevention (DLP)</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.6.2.7\">\n                <p id=\"section-toc.1-1.6.2.7.1\"><a href=\"#section-6.7\" class=\"auto internal xref\">6.7</a>.  <a href=\"#name-audit-logging\" class=\"internal xref\">Audit Logging</a></p>\n</li>\n            </ul>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.7\">\n            <p id=\"section-toc.1-1.7.1\"><a href=\"#section-7\" class=\"auto internal xref\">7</a>.  <a href=\"#name-wire-formats\" class=\"internal xref\">Wire Formats</a></p>\n<ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.7.2.1\">\n                <p id=\"section-toc.1-1.7.2.1.1\"><a href=\"#section-7.1\" class=\"auto internal xref\">7.1</a>.  <a href=\"#name-aip-token-header\" class=\"internal xref\">AIP-Token Header</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.7.2.2\">\n                <p id=\"section-toc.1-1.7.2.2.1\"><a href=\"#section-7.2\" class=\"auto internal xref\">7.2</a>.  <a href=\"#name-error-response-format\" class=\"internal xref\">Error Response Format</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.7.2.3\">\n                <p id=\"section-toc.1-1.7.2.3.1\"><a href=\"#section-7.3\" class=\"auto internal xref\">7.3</a>.  <a href=\"#name-audit-log-record\" class=\"internal xref\">Audit Log Record</a></p>\n</li>\n            </ul>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.8\">\n            <p id=\"section-toc.1-1.8.1\"><a href=\"#section-8\" class=\"auto internal xref\">8</a>.  <a href=\"#name-deployment-topologies\" class=\"internal xref\">Deployment Topologies</a></p>\n<ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.8.2.1\">\n                <p id=\"section-toc.1-1.8.2.1.1\"><a href=\"#section-8.1\" class=\"auto internal xref\">8.1</a>.  <a href=\"#name-localhost-proxy\" class=\"internal xref\">Localhost Proxy</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.8.2.2\">\n                <p id=\"section-toc.1-1.8.2.2.1\"><a href=\"#section-8.2\" class=\"auto internal xref\">8.2</a>.  <a href=\"#name-kubernetes-sidecar\" class=\"internal xref\">Kubernetes Sidecar</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.8.2.3\">\n                <p id=\"section-toc.1-1.8.2.3.1\"><a href=\"#section-8.3\" class=\"auto internal xref\">8.3</a>.  <a href=\"#name-enterprise-federation\" class=\"internal xref\">Enterprise Federation</a></p>\n</li>\n            </ul>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.9\">\n            <p id=\"section-toc.1-1.9.1\"><a href=\"#section-9\" class=\"auto internal xref\">9</a>.  <a href=\"#name-security-considerations\" class=\"internal xref\">Security Considerations</a></p>\n<ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.9.2.1\">\n                <p id=\"section-toc.1-1.9.2.1.1\"><a href=\"#section-9.1\" class=\"auto internal xref\">9.1</a>.  <a href=\"#name-cryptographic-algorithm\" class=\"internal xref\">Cryptographic Algorithm</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.9.2.2\">\n                <p id=\"section-toc.1-1.9.2.2.1\"><a href=\"#section-9.2\" class=\"auto internal xref\">9.2</a>.  <a href=\"#name-prompt-injection-resistance\" class=\"internal xref\">Prompt Injection Resistance</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.9.2.3\">\n                <p id=\"section-toc.1-1.9.2.3.1\"><a href=\"#section-9.3\" class=\"auto internal xref\">9.3</a>.  <a href=\"#name-transport-security\" class=\"internal xref\">Transport Security</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.9.2.4\">\n                <p id=\"section-toc.1-1.9.2.4.1\"><a href=\"#section-9.4\" class=\"auto internal xref\">9.4</a>.  <a href=\"#name-private-key-storage\" class=\"internal xref\">Private Key Storage</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.9.2.5\">\n                <p id=\"section-toc.1-1.9.2.5.1\"><a href=\"#section-9.5\" class=\"auto internal xref\">9.5</a>.  <a href=\"#name-registry-trust\" class=\"internal xref\">Registry Trust</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.9.2.6\">\n                <p id=\"section-toc.1-1.9.2.6.1\"><a href=\"#section-9.6\" class=\"auto internal xref\">9.6</a>.  <a href=\"#name-nonce-cache-sizing\" class=\"internal xref\">Nonce Cache Sizing</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.9.2.7\">\n                <p id=\"section-toc.1-1.9.2.7.1\"><a href=\"#section-9.7\" class=\"auto internal xref\">9.7</a>.  <a href=\"#name-revocation-latency\" class=\"internal xref\">Revocation Latency</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.9.2.8\">\n                <p id=\"section-toc.1-1.9.2.8.1\"><a href=\"#section-9.8\" class=\"auto internal xref\">9.8</a>.  <a href=\"#name-denial-of-service\" class=\"internal xref\">Denial-of-Service</a></p>\n</li>\n            </ul>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.10\">\n            <p id=\"section-toc.1-1.10.1\"><a href=\"#section-10\" class=\"auto internal xref\">10</a>. <a href=\"#name-privacy-considerations\" class=\"internal xref\">Privacy Considerations</a></p>\n<ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.10.2.1\">\n                <p id=\"section-toc.1-1.10.2.1.1\"><a href=\"#section-10.1\" class=\"auto internal xref\">10.1</a>.  <a href=\"#name-agent-record-visibility\" class=\"internal xref\">Agent Record Visibility</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.10.2.2\">\n                <p id=\"section-toc.1-1.10.2.2.1\"><a href=\"#section-10.2\" class=\"auto internal xref\">10.2</a>.  <a href=\"#name-audit-log-sensitivity\" class=\"internal xref\">Audit Log Sensitivity</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.10.2.3\">\n                <p id=\"section-toc.1-1.10.2.3.1\"><a href=\"#section-10.3\" class=\"auto internal xref\">10.3</a>.  <a href=\"#name-dlp-redaction\" class=\"internal xref\">DLP Redaction</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.10.2.4\">\n                <p id=\"section-toc.1-1.10.2.4.1\"><a href=\"#section-10.4\" class=\"auto internal xref\">10.4</a>.  <a href=\"#name-registry-data-retention\" class=\"internal xref\">Registry Data Retention</a></p>\n</li>\n            </ul>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.11\">\n            <p id=\"section-toc.1-1.11.1\"><a href=\"#section-11\" class=\"auto internal xref\">11</a>. <a href=\"#name-iana-considerations\" class=\"internal xref\">IANA Considerations</a></p>\n<ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.11.2.1\">\n                <p id=\"section-toc.1-1.11.2.1.1\"><a href=\"#section-11.1\" class=\"auto internal xref\">11.1</a>.  <a href=\"#name-http-header-field\" class=\"internal xref\">HTTP Header Field</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.11.2.2\">\n                <p id=\"section-toc.1-1.11.2.2.1\"><a href=\"#section-11.2\" class=\"auto internal xref\">11.2</a>.  <a href=\"#name-media-type\" class=\"internal xref\">Media Type</a></p>\n</li>\n            </ul>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.12\">\n            <p id=\"section-toc.1-1.12.1\"><a href=\"#section-12\" class=\"auto internal xref\">12</a>. <a href=\"#name-references\" class=\"internal xref\">References</a></p>\n<ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.12.2.1\">\n                <p id=\"section-toc.1-1.12.2.1.1\"><a href=\"#section-12.1\" class=\"auto internal xref\">12.1</a>.  <a href=\"#name-normative-references\" class=\"internal xref\">Normative References</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.12.2.2\">\n                <p id=\"section-toc.1-1.12.2.2.1\"><a href=\"#section-12.2\" class=\"auto internal xref\">12.2</a>.  <a href=\"#name-informative-references\" class=\"internal xref\">Informative References</a></p>\n</li>\n            </ul>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.13\">\n            <p id=\"section-toc.1-1.13.1\"><a href=\"#appendix-A\" class=\"auto internal xref\">Appendix A</a>.  <a href=\"#name-example-agentpolicy\" class=\"internal xref\">Example AgentPolicy</a></p>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.14\">\n            <p id=\"section-toc.1-1.14.1\"><a href=\"#appendix-B\" class=\"auto internal xref\">Appendix B</a>.  <a href=\"#name-example-aip-token\" class=\"internal xref\">Example AIP Token</a></p>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.15\">\n            <p id=\"section-toc.1-1.15.1\"><a href=\"#appendix-C\" class=\"auto internal xref\">Appendix C</a>.  <a href=\"#name-error-code-reference\" class=\"internal xref\">Error Code Reference</a></p>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.16\">\n            <p id=\"section-toc.1-1.16.1\"><a href=\"#appendix-D\" class=\"auto internal xref\"></a><a href=\"#name-authors-addresses\" class=\"internal xref\">Authors' Addresses</a></p>\n</li>\n        </ul>\n</nav>\n</section>\n</div>\n<div id=\"sect-1\">\n<section id=\"section-1\">\n      <h2 id=\"name-introduction\">\n<a href=\"#section-1\" class=\"section-number selfRef\">1. </a><a href=\"#name-introduction\" class=\"section-name selfRef\">Introduction</a>\n      </h2>\n<p id=\"section-1-1\">\n   AI agents are being deployed at scale with the same credentials as\n   the humans who operate them.  When an agent calls a tool -- writing\n   a file, querying a database, sending a request to an external API --\n   there is nothing in the request that distinguishes it from a direct\n   human action.  The downstream service has no way to know it is\n   talking to an agent, which agent, who authorized it, or what it is\n   permitted to do.<a href=\"#section-1-1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-1-2\">\n   This creates compounding problems as agents become more capable and\n   more numerous.  An agent that is compromised, misbehaves, or is\n   manipulated into acting outside its intended scope has no technical\n   boundary stopping it from using every credential it has been given.\n   Audit logs attribute actions to human accounts rather than to agents,\n   making incident investigation difficult.  Multi-agent systems can\n   accumulate permissions across delegation steps without any explicit\n   record of what was authorized.<a href=\"#section-1-2\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-1-3\">\n   AIP closes this gap with two layers:<a href=\"#section-1-3\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-1-4\">\n   Layer 1 -- Agent Identity.  At provisioning time, the agent is\n   registered with an AIP Registry.  The registry assigns the agent a\n   unique identifier (the Agent ID) and records the agent's\n   public key alongside the identity of the accountable principal.\n   From that point forward, the agent signs every outbound tool call\n   with its private key.  Any party that can reach the registry can\n   verify who the agent is.<a href=\"#section-1-4\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-1-5\">\n   Layer 2 -- Enforcement Proxy.  An AIP Proxy sits between the AI\n   client and every tool server.  It intercepts every tool call,\n   verifies the agent's signature against the registry, evaluates the\n   call against a simple declarative policy (the AgentPolicy), and\n   either forwards the call, blocks it, or holds it for human approval.\n   The tool server is never reached until all checks pass.  Every\n   decision is written to an append-only audit log.<a href=\"#section-1-5\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-1-6\">\n   The two layers are independent.  Layer 1 can be used without Layer 2\n   to provide signed, attributable agent actions in existing systems.\n   Layer 2 requires Layer 1 for identity verification but adds no new\n   requirements on tool servers.<a href=\"#section-1-6\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-1-7\">\n   AIP targets the Model Context Protocol (MCP) <span>[<a href=\"#MCP\" class=\"cite xref\">MCP</a>]</span> as its primary\n   tool-call interface but is designed to be applicable to any\n   structured tool invocation mechanism.<a href=\"#section-1-7\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-1-8\">\n   AIP does NOT:<a href=\"#section-1-8\" class=\"pilcrow\">¶</a></p>\n<ul class=\"normal\">\n<li class=\"normal\" id=\"section-1-9.1\">\n          <p id=\"section-1-9.1.1\">Define a new transport protocol.<a href=\"#section-1-9.1.1\" class=\"pilcrow\">¶</a></p>\n</li>\n        <li class=\"normal\" id=\"section-1-9.2\">\n          <p id=\"section-1-9.2.1\">Replace existing service-level authentication (OAuth 2.0, mTLS).\n      It adds an agent-identity layer on top of existing mechanisms.<a href=\"#section-1-9.2.1\" class=\"pilcrow\">¶</a></p>\n</li>\n        <li class=\"normal\" id=\"section-1-9.3\">\n          <p id=\"section-1-9.3.1\">Provide content moderation or model output filtering.<a href=\"#section-1-9.3.1\" class=\"pilcrow\">¶</a></p>\n</li>\n      </ul>\n</section>\n</div>\n<div id=\"sect-2\">\n<section id=\"section-2\">\n      <h2 id=\"name-terminology-and-conventions\">\n<a href=\"#section-2\" class=\"section-number selfRef\">2. </a><a href=\"#name-terminology-and-conventions\" class=\"section-name selfRef\">Terminology and Conventions</a>\n      </h2>\n<p id=\"section-2-1\">\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"NOT RECOMMENDED\", \"MAY\",\n   and \"OPTIONAL\" in this document are to be interpreted as described in\n   BCP 14 <span>[<a href=\"#RFC2119\" class=\"cite xref\">RFC2119</a>]</span> <span>[<a href=\"#RFC8174\" class=\"cite xref\">RFC8174</a>]</span> when, and only when, they appear in all\n   capitals, as shown here.<a href=\"#section-2-1\" class=\"pilcrow\">¶</a></p>\n<span class=\"break\"></span><dl class=\"dlNewline\" id=\"section-2-2\">\n        <dt id=\"section-2-2.1\">Agent:</dt>\n        <dd style=\"margin-left: 1.5em\" id=\"section-2-2.2\">\n An autonomous software process that uses a large language model\n      or other AI system to reason over tasks and invoke external tools\n      on behalf of a principal.<a href=\"#section-2-2.2\" class=\"pilcrow\">¶</a>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"section-2-2.3\">Agent ID:</dt>\n        <dd style=\"margin-left: 1.5em\" id=\"section-2-2.4\">\n A unique, stable identifier assigned to an agent by an AIP\n      Registry at registration time.  The Agent ID is a UUID v4\n      <span>[<a href=\"#RFC4122\" class=\"cite xref\">RFC4122</a>]</span> prefixed with the registry hostname, e.g.,\n      \"reg.example.com/01933f4a-9b2c-7d8e-af01-3b5c6d7e8f9a\".<a href=\"#section-2-2.4\" class=\"pilcrow\">¶</a>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"section-2-2.5\">Agent Record:</dt>\n        <dd style=\"margin-left: 1.5em\" id=\"section-2-2.6\">\n The data structure stored in the AIP Registry that holds an\n      agent's Agent ID, public key, principal identifier, and metadata.\n      Defined in <a href=\"#sect-5.2\" class=\"auto internal xref\">Section 5.2</a>.<a href=\"#section-2-2.6\" class=\"pilcrow\">¶</a>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"section-2-2.7\">AIP Proxy (or \"Enforcement Proxy\"):</dt>\n        <dd style=\"margin-left: 1.5em\" id=\"section-2-2.8\">\n A transparent forward proxy that intercepts tool calls between\n      an AI client and tool servers.  It verifies the AIP Token and\n      evaluates the AgentPolicy before forwarding or blocking the call.<a href=\"#section-2-2.8\" class=\"pilcrow\">¶</a>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"section-2-2.9\">AIP Registry:</dt>\n        <dd style=\"margin-left: 1.5em\" id=\"section-2-2.10\">\n A server that stores Agent Records and exposes an HTTP API for\n      registration, key lookup, and revocation.<a href=\"#section-2-2.10\" class=\"pilcrow\">¶</a>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"section-2-2.11\">AIP Token:</dt>\n        <dd style=\"margin-left: 1.5em\" id=\"section-2-2.12\">\n A signed JSON object attached to every tool call by the agent.\n      It carries the agent's Agent ID, the tool being called, a nonce,\n      a timestamp, and an key signature.  Defined in <a href=\"#sect-5.6\" class=\"auto internal xref\">Section 5.6</a>.<a href=\"#section-2-2.12\" class=\"pilcrow\">¶</a>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"section-2-2.13\">AgentPolicy:</dt>\n        <dd style=\"margin-left: 1.5em\" id=\"section-2-2.14\">\n A YAML configuration file that declares which tools an agent is\n      permitted to call, argument constraints, DLP rules, and HITL\n      requirements.  Defined in <a href=\"#sect-6.2\" class=\"auto internal xref\">Section 6.2</a>.<a href=\"#section-2-2.14\" class=\"pilcrow\">¶</a>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"section-2-2.15\">DLP:</dt>\n        <dd style=\"margin-left: 1.5em\" id=\"section-2-2.16\">\n Data Loss Prevention; scanning of tool call arguments and\n      responses for sensitive data patterns.<a href=\"#section-2-2.16\" class=\"pilcrow\">¶</a>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"section-2-2.17\">HITL:</dt>\n        <dd style=\"margin-left: 1.5em\" id=\"section-2-2.18\">\n Human-in-the-Loop; a control mode in which the proxy holds a\n      tool call and waits for explicit approval from an operator before\n      forwarding it.<a href=\"#section-2-2.18\" class=\"pilcrow\">¶</a>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"section-2-2.19\">IoA:</dt>\n        <dd style=\"margin-left: 1.5em\" id=\"section-2-2.20\">\n Internet of Agents; the network of autonomous AI agents that\n      act across organizational and infrastructure boundaries.<a href=\"#section-2-2.20\" class=\"pilcrow\">¶</a>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"section-2-2.21\">MCP:</dt>\n        <dd style=\"margin-left: 1.5em\" id=\"section-2-2.22\">\n Model Context Protocol <span>[<a href=\"#MCP\" class=\"cite xref\">MCP</a>]</span>; a structured protocol for tool-call\n      communication between AI clients and tool servers.<a href=\"#section-2-2.22\" class=\"pilcrow\">¶</a>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"section-2-2.23\">Principal:</dt>\n        <dd style=\"margin-left: 1.5em\" id=\"section-2-2.24\">\n The human operator or organization accountable for an agent.<a href=\"#section-2-2.24\" class=\"pilcrow\">¶</a>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"section-2-2.25\">Tool Call:</dt>\n        <dd style=\"margin-left: 1.5em\" id=\"section-2-2.26\">\n A structured invocation of an external capability initiated by\n      an agent, typically carrying a tool name and arguments.<a href=\"#section-2-2.26\" class=\"pilcrow\">¶</a>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"section-2-2.27\">Tool Server:</dt>\n        <dd style=\"margin-left: 1.5em\" id=\"section-2-2.28\">\n A service that exposes tools callable by agents.<a href=\"#section-2-2.28\" class=\"pilcrow\">¶</a>\n</dd>\n      <dd class=\"break\"></dd>\n</dl>\n</section>\n</div>\n<div id=\"sect-3\">\n<section id=\"section-3\">\n      <h2 id=\"name-problem-statement\">\n<a href=\"#section-3\" class=\"section-number selfRef\">3. </a><a href=\"#name-problem-statement\" class=\"section-name selfRef\">Problem Statement</a>\n      </h2>\n<div id=\"sect-3.1\">\n<section id=\"section-3.1\">\n        <h3 id=\"name-the-identity-gap\">\n<a href=\"#section-3.1\" class=\"section-number selfRef\">3.1. </a><a href=\"#name-the-identity-gap\" class=\"section-name selfRef\">The Identity Gap</a>\n        </h3>\n<p id=\"section-3.1-1\">\n   When an AI agent calls a tool, it presents credentials that belong\n   to a human account.  The tool server cannot tell whether the actor\n   is a human or an agent, which agent it is, or what limits apply to\n   it.  This creates four concrete problems:<a href=\"#section-3.1-1\" class=\"pilcrow\">¶</a></p>\n<span class=\"break\"></span><dl class=\"dlParallel\" id=\"section-3.1-2\">\n          <dt id=\"section-3.1-2.1\">(a)</dt>\n          <dd style=\"margin-left: 2.5em\" id=\"section-3.1-2.2\">\n            <p id=\"section-3.1-2.2.1\">\n Security -- A compromised or manipulated agent can invoke any<a href=\"#section-3.1-2.2.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-3.1-2.2.2\">\n tool the human account can reach.  There is no agent-specific\n        authorization boundary.<a href=\"#section-3.1-2.2.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n          <dd class=\"break\"></dd>\n<dt id=\"section-3.1-2.3\">(b)</dt>\n          <dd style=\"margin-left: 2.5em\" id=\"section-3.1-2.4\">\n            <p id=\"section-3.1-2.4.1\">\n Auditability -- Logs record actions against a human account.<a href=\"#section-3.1-2.4.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-3.1-2.4.2\">\n After an incident, investigators cannot determine which actions\n        were taken by a human versus an agent.<a href=\"#section-3.1-2.4.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n          <dd class=\"break\"></dd>\n<dt id=\"section-3.1-2.5\">(c)</dt>\n          <dd style=\"margin-left: 2.5em\" id=\"section-3.1-2.6\">\n            <p id=\"section-3.1-2.6.1\">\n Compliance -- Regulations increasingly require traceability of<a href=\"#section-3.1-2.6.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-3.1-2.6.2\">\n automated decision-making.  Without agent-level identity,\n        organizations cannot satisfy these requirements.<a href=\"#section-3.1-2.6.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n          <dd class=\"break\"></dd>\n<dt id=\"section-3.1-2.7\">(d)</dt>\n          <dd style=\"margin-left: 2.5em\" id=\"section-3.1-2.8\">\n            <p id=\"section-3.1-2.8.1\">\n Accountability -- Billing, rate limits, and quotas are scoped<a href=\"#section-3.1-2.8.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-3.1-2.8.2\">\n to human accounts.  Agent usage cannot be isolated or\n        attributed.<a href=\"#section-3.1-2.8.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n        <dd class=\"break\"></dd>\n</dl>\n</section>\n</div>\n<div id=\"sect-3.2\">\n<section id=\"section-3.2\">\n        <h3 id=\"name-the-enforcement-gap\">\n<a href=\"#section-3.2\" class=\"section-number selfRef\">3.2. </a><a href=\"#name-the-enforcement-gap\" class=\"section-name selfRef\">The Enforcement Gap</a>\n        </h3>\n<p id=\"section-3.2-1\">\n   Even where agent behavior policies exist, they are expressed as\n   text in model system prompts.  System prompts are not tamper-evident\n   and can be bypassed by adversarial inputs to the model.  There is no\n   infrastructure-layer enforcement point that acts independently of\n   the model.<a href=\"#section-3.2-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"sect-3.3\">\n<section id=\"section-3.3\">\n        <h3 id=\"name-scope-of-this-specification\">\n<a href=\"#section-3.3\" class=\"section-number selfRef\">3.3. </a><a href=\"#name-scope-of-this-specification\" class=\"section-name selfRef\">Scope of This Specification</a>\n        </h3>\n<p id=\"section-3.3-1\">\n   AIP closes both gaps.  Layer 1 gives every agent a distinct,\n   verifiable identity independent of the human principal's credentials.\n   Layer 2 enforces agent-specific policy at the tool-call boundary,\n   outside the model's trust domain, in a way that cannot be overridden\n   by model outputs.<a href=\"#section-3.3-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n</section>\n</div>\n<div id=\"sect-4\">\n<section id=\"section-4\">\n      <h2 id=\"name-protocol-overview\">\n<a href=\"#section-4\" class=\"section-number selfRef\">4. </a><a href=\"#name-protocol-overview\" class=\"section-name selfRef\">Protocol Overview</a>\n      </h2>\n<div id=\"sect-4.1\">\n<section id=\"section-4.1\">\n        <h3 id=\"name-architecture\">\n<a href=\"#section-4.1\" class=\"section-number selfRef\">4.1. </a><a href=\"#name-architecture\" class=\"section-name selfRef\">Architecture</a>\n        </h3>\n<p id=\"section-4.1-1\">\n   AIP introduces two components into the agent-to-tool-server path:\n   an AIP Registry (Layer 1) and an AIP Proxy (Layer 2).<a href=\"#section-4.1-1\" class=\"pilcrow\">¶</a></p>\n<span id=\"name-aip-architecture\"></span><div id=\"ure-aip-architecture\">\n<figure id=\"figure-1\">\n          <div class=\"alignLeft art-text artwork\" id=\"section-4.1-2.1\">\n<pre>\n                 +-----------------------------------------+\n                 |           AI Client (Agent)             |\n                 +-----------------+-----------------------+\n                                   | tools/call + AIP Token\n                                   v\n                 +-----------------------------------------+\n                 |            AIP Proxy (Layer 2)          |\n                 |  +-----------+  +--------------------+  |\n                 |  |  Verify   |  |   Policy Engine    |  |\n                 |  |  Token    |  |   (AgentPolicy)    |  |\n                 |  +-----+-----+  +---------+----------+  |\n                 |        |                  |              |\n                 |  +-----v------------------v----------+  |\n                 |  |         Audit Logger              |  |\n                 |  +-----------------------------------+  |\n                 +-----+-------------------+---------------+\n                       |                   |\n                ALLOW  |             DENY  |  HOLD\n                       v                   v\n                 +-----------+    +------------------+\n                 | Tool      |    | Error / HITL     |\n                 | Server    |    | Queue            |\n                 +-----------+    +------------------+\n\n                 ^\n                 | key lookup\n                 |\n            +---------+\n            |   AIP   |\n            | Registry|\n            | (Lay. 1)|\n            +---------+\n</pre>\n</div>\n<figcaption><a href=\"#figure-1\" class=\"selfRef\">Figure 1</a>:\n<a href=\"#name-aip-architecture\" class=\"selfRef\">AIP Architecture</a>\n          </figcaption></figure>\n</div>\n</section>\n</div>\n<div id=\"sect-4.2\">\n<section id=\"section-4.2\">\n        <h3 id=\"name-call-lifecycle\">\n<a href=\"#section-4.2\" class=\"section-number selfRef\">4.2. </a><a href=\"#name-call-lifecycle\" class=\"section-name selfRef\">Call Lifecycle</a>\n        </h3>\n<p id=\"section-4.2-1\">\n   The lifecycle of a single tool call under AIP is as follows:<a href=\"#section-4.2-1\" class=\"pilcrow\">¶</a></p>\n<ol start=\"1\" type=\"1\" class=\"normal type-1\" id=\"section-4.2-2\">\n<li id=\"section-4.2-2.1\">\n            <p id=\"section-4.2-2.1.1\">Registration (once, at deploy time).  The principal registers\n       the agent with an AIP Registry.  The registry assigns an Agent\n       ID and stores the agent's public key.  The agent stores\n       its private key securely.<a href=\"#section-4.2-2.1.1\" class=\"pilcrow\">¶</a></p>\n</li>\n          <li id=\"section-4.2-2.2\">\n            <p id=\"section-4.2-2.2.1\">Token construction (per call).  Before each tool call the agent\n       constructs an AIP Token (<a href=\"#sect-5.6\" class=\"auto internal xref\">Section 5.6</a>): a small JSON object\n       containing the Agent ID, tool name, argument hash, nonce,\n       timestamp, and a key signature over the token.<a href=\"#section-4.2-2.2.1\" class=\"pilcrow\">¶</a></p>\n</li>\n          <li id=\"section-4.2-2.3\">\n            <p id=\"section-4.2-2.3.1\">Proxy intercept.  The AIP Proxy receives the tool call request\n       before it reaches the tool server.<a href=\"#section-4.2-2.3.1\" class=\"pilcrow\">¶</a></p>\n</li>\n          <li id=\"section-4.2-2.4\">\n            <p id=\"section-4.2-2.4.1\">Token verification (Layer 1).  The proxy retrieves the agent's\n       public key from the registry (or local cache) and verifies the\n       signature.  It also checks the nonce for replay and the timestamp\n       for freshness.<a href=\"#section-4.2-2.4.1\" class=\"pilcrow\">¶</a></p>\n</li>\n          <li id=\"section-4.2-2.5\">\n            <p id=\"section-4.2-2.5.1\">Policy evaluation (Layer 2).  The proxy checks the call against\n       the AgentPolicy: is the tool on the allowlist?  Do the arguments\n       pass validation?  Does the call trigger a HITL hold?  Does the\n       response contain sensitive data that must be redacted?<a href=\"#section-4.2-2.5.1\" class=\"pilcrow\">¶</a></p>\n</li>\n          <li id=\"section-4.2-2.6\">\n            <p id=\"section-4.2-2.6.1\">Decision.  The proxy produces one of three outcomes:\n       ALLOW -- forward the call to the tool server;\n       DENY  -- return an error to the agent, tool server not reached;\n       HOLD  -- queue the call for human approval.<a href=\"#section-4.2-2.6.1\" class=\"pilcrow\">¶</a></p>\n</li>\n          <li id=\"section-4.2-2.7\">\n            <p id=\"section-4.2-2.7.1\">Audit.  Every decision is written to the audit log regardless\n       of outcome.<a href=\"#section-4.2-2.7.1\" class=\"pilcrow\">¶</a></p>\n</li>\n        </ol>\n</section>\n</div>\n<div id=\"sect-4.3\">\n<section id=\"section-4.3\">\n        <h3 id=\"name-relationship-to-existing-st\">\n<a href=\"#section-4.3\" class=\"section-number selfRef\">4.3. </a><a href=\"#name-relationship-to-existing-st\" class=\"section-name selfRef\">Relationship to Existing Standards</a>\n        </h3>\n<ul class=\"normal\">\n<li class=\"normal\" id=\"section-4.3-1.1\">\n            <p id=\"section-4.3-1.1.1\">OAuth 2.0 <span>[<a href=\"#RFC6749\" class=\"cite xref\">RFC6749</a>]</span> / OIDC <span>[<a href=\"#OIDC\" class=\"cite xref\">OIDC</a>]</span>:  AIP does not replace service-\n      level authentication.  The agent still presents its OAuth token or\n      API key to the tool server.  AIP provides a separate agent\n      identity layer that the proxy can verify independently.<a href=\"#section-4.3-1.1.1\" class=\"pilcrow\">¶</a></p>\n</li>\n          <li class=\"normal\" id=\"section-4.3-1.2\">\n            <p id=\"section-4.3-1.2.1\">SPIFFE/SVID <span>[<a href=\"#SPIFFE\" class=\"cite xref\">SPIFFE</a>]</span>:  In Kubernetes deployments, the AIP Proxy\n      MAY use a SPIFFE SVID to authenticate to tool servers over mTLS,\n      layering workload identity on top of AIP agent identity.<a href=\"#section-4.3-1.2.1\" class=\"pilcrow\">¶</a></p>\n</li>\n          <li class=\"normal\" id=\"section-4.3-1.3\">\n            <p id=\"section-4.3-1.3.1\">JSON-RPC 2.0 <span>[<a href=\"#JSON-RPC\" class=\"cite xref\">JSON-RPC</a>]</span>:  Tool call and error messages use the\n      JSON-RPC 2.0 wire format, compatible with MCP and similar\n      protocols.<a href=\"#section-4.3-1.3.1\" class=\"pilcrow\">¶</a></p>\n</li>\n        </ul>\n</section>\n</div>\n</section>\n</div>\n<div id=\"sect-5\">\n<section id=\"section-5\">\n      <h2 id=\"name-layer-1-agent-identity\">\n<a href=\"#section-5\" class=\"section-number selfRef\">5. </a><a href=\"#name-layer-1-agent-identity\" class=\"section-name selfRef\">Layer 1: Agent Identity</a>\n      </h2>\n<div id=\"sect-5.1\">\n<section id=\"section-5.1\">\n        <h3 id=\"name-agent-registration\">\n<a href=\"#section-5.1\" class=\"section-number selfRef\">5.1. </a><a href=\"#name-agent-registration\" class=\"section-name selfRef\">Agent Registration</a>\n        </h3>\n<p id=\"section-5.1-1\">\n   An agent is provisioned by its principal submitting a registration\n   request to an AIP Registry.  The request MUST include:<a href=\"#section-5.1-1\" class=\"pilcrow\">¶</a></p>\n<span class=\"break\"></span><dl class=\"dlParallel\" id=\"section-5.1-2\">\n          <dt id=\"section-5.1-2.1\">(a)</dt>\n          <dd style=\"margin-left: 2.5em\" id=\"section-5.1-2.2\">\n            <p id=\"section-5.1-2.2.1\">\n The agent's public key, base64url-encoded <span>[<a href=\"#RFC4648\" class=\"cite xref\">RFC4648</a>]</span>;<a href=\"#section-5.1-2.2.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-5.1-2.2.2\">\n (b)  The principal identifier -- a string that uniquely identifies\n        the accountable human or organization (e.g., an email address,\n        an organization slug, or an OAuth subject claim); (TO BE WORKED ON FURTHER)<a href=\"#section-5.1-2.2.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n          <dd class=\"break\"></dd>\n<dt id=\"section-5.1-2.3\">(c)</dt>\n          <dd style=\"margin-left: 2.5em\" id=\"section-5.1-2.4\">\n            <p id=\"section-5.1-2.4.1\">\n A human-readable agent name (RECOMMENDED);<a href=\"#section-5.1-2.4.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-5.1-2.4.2\">\n (d)  An optional free-text description.<a href=\"#section-5.1-2.4.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n        <dd class=\"break\"></dd>\n</dl>\n<p id=\"section-5.1-3\">\n   The registration request MUST be authenticated.  Authentication MAY\n   be via OAuth 2.0 bearer token, mTLS client certificate, or a pre-\n   shared registration secret, at the registry operator's discretion.<a href=\"#section-5.1-3\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-5.1-4\">\n   On successful registration, the registry:<a href=\"#section-5.1-4\" class=\"pilcrow\">¶</a></p>\n<span class=\"break\"></span><dl class=\"dlParallel\" id=\"section-5.1-5\">\n          <dt id=\"section-5.1-5.1\">(a)</dt>\n          <dd style=\"margin-left: 2.5em\" id=\"section-5.1-5.2\">\n            <p id=\"section-5.1-5.2.1\">\n Assigns a UUID v4 <span>[<a href=\"#RFC4122\" class=\"cite xref\">RFC4122</a>]</span> as the agent's local identifier;<a href=\"#section-5.1-5.2.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-5.1-5.2.2\">\n (b)  Constructs the Agent ID as \"&lt;registry-host&gt;/&lt;uuid&gt;\";\n   (c)  Stores the Agent Record (<a href=\"#sect-5.2\" class=\"auto internal xref\">Section 5.2</a>);\n   (d)  Returns the Agent ID to the principal.<a href=\"#section-5.1-5.2.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n        <dd class=\"break\"></dd>\n</dl>\n<p id=\"section-5.1-6\">\n   The principal MUST store the Agent ID and configure the agent with\n   both the Agent ID and its private key before deployment.<a href=\"#section-5.1-6\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"sect-5.2\">\n<section id=\"section-5.2\">\n        <h3 id=\"name-agent-record\">\n<a href=\"#section-5.2\" class=\"section-number selfRef\">5.2. </a><a href=\"#name-agent-record\" class=\"section-name selfRef\">Agent Record</a>\n        </h3>\n<p id=\"section-5.2-1\">\n   The Agent Record is the data structure the AIP Registry stores for\n   each registered agent.  It MUST contain:<a href=\"#section-5.2-1\" class=\"pilcrow\">¶</a></p>\n<span class=\"break\"></span><dl class=\"dlNewline\" id=\"section-5.2-2\">\n          <dt id=\"section-5.2-2.1\">agentId (string):</dt>\n          <dd style=\"margin-left: 1.5em\" id=\"section-5.2-2.2\">\n The Agent ID assigned at registration, in the form\n      \"&lt;registry-host&gt;/&lt;uuid-v4&gt;\".\n      Example: \"reg.agentidentityprotocol.io/01933f4a-9b2c-7d8e-af01\"<a href=\"#section-5.2-2.2\" class=\"pilcrow\">¶</a>\n</dd>\n          <dd class=\"break\"></dd>\n<dt id=\"section-5.2-2.3\">publicKey (string):</dt>\n          <dd style=\"margin-left: 1.5em\" id=\"section-5.2-2.4\">\n The agent's current public key, base64url-encoded.<a href=\"#section-5.2-2.4\" class=\"pilcrow\">¶</a>\n</dd>\n          <dd class=\"break\"></dd>\n<dt id=\"section-5.2-2.5\">principalId (string):</dt>\n          <dd style=\"margin-left: 1.5em\" id=\"section-5.2-2.6\">\n Identifier of the accountable principal.<a href=\"#section-5.2-2.6\" class=\"pilcrow\">¶</a>\n</dd>\n          <dd class=\"break\"></dd>\n<dt id=\"section-5.2-2.7\">name (string):</dt>\n          <dd style=\"margin-left: 1.5em\" id=\"section-5.2-2.8\">\n Human-readable agent name.  Informational only; not authenticated.<a href=\"#section-5.2-2.8\" class=\"pilcrow\">¶</a>\n</dd>\n          <dd class=\"break\"></dd>\n<dt id=\"section-5.2-2.9\">description (string, optional):</dt>\n          <dd style=\"margin-left: 1.5em\" id=\"section-5.2-2.10\">\n Free-text description of the agent's purpose.<a href=\"#section-5.2-2.10\" class=\"pilcrow\">¶</a>\n</dd>\n          <dd class=\"break\"></dd>\n<dt id=\"section-5.2-2.11\">createdAt (string):</dt>\n          <dd style=\"margin-left: 1.5em\" id=\"section-5.2-2.12\">\n ISO 8601 UTC timestamp of registration.<a href=\"#section-5.2-2.12\" class=\"pilcrow\">¶</a>\n</dd>\n          <dd class=\"break\"></dd>\n<dt id=\"section-5.2-2.13\">keyHistory (array):</dt>\n          <dd style=\"margin-left: 1.5em\" id=\"section-5.2-2.14\">\n Append-only list of all public keys ever bound to this Agent ID.\n      Each entry contains \"publicKey\", \"activeFrom\", and \"revokedAt\"\n      (null if still active).<a href=\"#section-5.2-2.14\" class=\"pilcrow\">¶</a>\n</dd>\n          <dd class=\"break\"></dd>\n<dt id=\"section-5.2-2.15\">status (string):</dt>\n          <dd style=\"margin-left: 1.5em\" id=\"section-5.2-2.16\">\n One of \"active\" or \"revoked\".<a href=\"#section-5.2-2.16\" class=\"pilcrow\">¶</a>\n</dd>\n        <dd class=\"break\"></dd>\n</dl>\n<p id=\"section-5.2-3\">\n   Example Agent Record (JSON):<a href=\"#section-5.2-3\" class=\"pilcrow\">¶</a></p>\n<div class=\"alignLeft art-text artwork\" id=\"section-5.2-4\">\n<pre>\n{\n  \"agentId\": \"reg.agentidentityprotocol.io/01933f4a-9b2c-7d8e-af01\",\n  \"publicKey\": \"MCowBQYDK2VwAyEAz8vG...\",\n  \"principalId\": \"acme-corp\",\n  \"name\": \"ResearchAssistant-v1\",\n  \"description\": \"Internal document retrieval agent\",\n  \"createdAt\": \"2026-01-15T09:00:00Z\",\n  \"keyHistory\": [\n    {\n      \"publicKey\": \"MCowBQYDK2VwAyEAz8vG...\",\n      \"activeFrom\": \"2026-01-15T09:00:00Z\",\n      \"revokedAt\": null\n    }\n  ],\n  \"status\": \"active\"\n}\n</pre><a href=\"#section-5.2-4\" class=\"pilcrow\">¶</a>\n</div>\n</section>\n</div>\n<div id=\"sect-5.3\">\n<section id=\"section-5.3\">\n        <h3 id=\"name-aip-registry-api\">\n<a href=\"#section-5.3\" class=\"section-number selfRef\">5.3. </a><a href=\"#name-aip-registry-api\" class=\"section-name selfRef\">AIP Registry API</a>\n        </h3>\n<p id=\"section-5.3-1\">\n   The AIP Registry MUST expose the following HTTP endpoints over\n   TLS 1.3 (<a href=\"#sect-9.4\" class=\"auto internal xref\">Section 9.4</a>):<a href=\"#section-5.3-1\" class=\"pilcrow\">¶</a></p>\n<div class=\"alignLeft art-text artwork\" id=\"section-5.3-2\">\n<pre>\nPOST   /v1/agents              Register a new agent\nGET    /v1/agents/{agentId}    Retrieve an Agent Record\nPUT    /v1/agents/{agentId}/key  Rotate the agent's public key\nDELETE /v1/agents/{agentId}    Revoke an agent\nGET    /v1/revocations/stream  SSE stream for revocation events\n</pre><a href=\"#section-5.3-2\" class=\"pilcrow\">¶</a>\n</div>\n<p id=\"section-5.3-3\">\n   The GET /v1/agents/{agentId} endpoint is the only endpoint that\n   MUST be reachable by AIP Proxies at call-verification time.  All\n   other endpoints are used during provisioning and key management.<a href=\"#section-5.3-3\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-5.3-4\">\n   Responses from GET /v1/agents/{agentId} MUST include the full\n   Agent Record.  Proxies SHOULD cache this response for at least\n   30 seconds.  The cache MUST be invalidated on receipt of a\n   revocation event from the SSE stream.<a href=\"#section-5.3-4\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"sect-5.4\">\n<section id=\"section-5.4\">\n        <h3 id=\"name-key-rotation\">\n<a href=\"#section-5.4\" class=\"section-number selfRef\">5.4. </a><a href=\"#name-key-rotation\" class=\"section-name selfRef\">Key Rotation</a>\n        </h3>\n<p id=\"section-5.4-1\">\n   A principal rotates an agent's key by submitting a PUT request to\n   /v1/agents/{agentId}/key, authenticated with the current private\n   key.  The request body MUST contain the new public key.<a href=\"#section-5.4-1\" class=\"pilcrow\">¶</a></p>\n<span class=\"break\"></span><dl class=\"dlNewline\" id=\"section-5.4-2\">\n          <dt id=\"section-5.4-2.1\">The registry MUST:</dt>\n          <dd style=\"margin-left: 2.5em\" id=\"section-5.4-2.2\">\n (a)  Set \"revokedAt\" on the current keyHistory entry to the current\n        timestamp;<a href=\"#section-5.4-2.2\" class=\"pilcrow\">¶</a>\n</dd>\n          <dd class=\"break\"></dd>\n<dt id=\"section-5.4-2.3\">(b)</dt>\n          <dd style=\"margin-left: 2.5em\" id=\"section-5.4-2.4\">\n            <p id=\"section-5.4-2.4.1\">\n Append a new keyHistory entry with the new public key;<a href=\"#section-5.4-2.4.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-5.4-2.4.2\">\n (c)  Update the \"publicKey\" field on the Agent Record;\n   (d)  Emit a rotation event on the revocations SSE stream so that\n        proxies can invalidate their cached Agent Records immediately.<a href=\"#section-5.4-2.4.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n        <dd class=\"break\"></dd>\n</dl>\n<p id=\"section-5.4-3\">\n   The Agent ID does NOT change on key rotation.<a href=\"#section-5.4-3\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"sect-5.5\">\n<section id=\"section-5.5\">\n        <h3 id=\"name-agent-revocation\">\n<a href=\"#section-5.5\" class=\"section-number selfRef\">5.5. </a><a href=\"#name-agent-revocation\" class=\"section-name selfRef\">Agent Revocation</a>\n        </h3>\n<p id=\"section-5.5-1\">\n   A principal revokes an agent by sending a DELETE request to\n   /v1/agents/{agentId}.  The registry MUST set the agent's status\n   to \"revoked\" and emit a revocation event on the SSE stream.<a href=\"#section-5.5-1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-5.5-2\">\n   Proxies MUST reject AIP Tokens from revoked agents with error\n   AIP-E012.  Revoked Agent Records MUST be retained in the registry\n   for audit log verification but MUST NOT be returned as \"active\".<a href=\"#section-5.5-2\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"sect-5.6\">\n<section id=\"section-5.6\">\n        <h3 id=\"name-the-aip-token-agent-attesta\">\n<a href=\"#section-5.6\" class=\"section-number selfRef\">5.6. </a><a href=\"#name-the-aip-token-agent-attesta\" class=\"section-name selfRef\">The AIP Token (Agent Attestation Token)</a>\n        </h3>\n<p id=\"section-5.6-1\">\n   The AIP Token is a compact signed JSON object that the agent\n   constructs and attaches to every outbound tool call.  It is the\n   mechanism by which the agent asserts its identity to the proxy.<a href=\"#section-5.6-1\" class=\"pilcrow\">¶</a></p>\n<div id=\"sect-5.6.1\">\n<section id=\"section-5.6.1\">\n          <h4 id=\"name-token-fields\">\n<a href=\"#section-5.6.1\" class=\"section-number selfRef\">5.6.1. </a><a href=\"#name-token-fields\" class=\"section-name selfRef\">Token Fields</a>\n          </h4>\n<span class=\"break\"></span><dl class=\"dlNewline\" id=\"section-5.6.1-1\">\n            <dt id=\"section-5.6.1-1.1\">aipVersion (string, REQUIRED):</dt>\n            <dd style=\"margin-left: 1.5em\" id=\"section-5.6.1-1.2\">\n Protocol version.  MUST be \"1\" for this specification.<a href=\"#section-5.6.1-1.2\" class=\"pilcrow\">¶</a>\n</dd>\n            <dd class=\"break\"></dd>\n<dt id=\"section-5.6.1-1.3\">agentId (string, REQUIRED):</dt>\n            <dd style=\"margin-left: 1.5em\" id=\"section-5.6.1-1.4\">\n The agent's Agent ID as registered with the AIP Registry.<a href=\"#section-5.6.1-1.4\" class=\"pilcrow\">¶</a>\n</dd>\n            <dd class=\"break\"></dd>\n<dt id=\"section-5.6.1-1.5\">tool (string, REQUIRED):</dt>\n            <dd style=\"margin-left: 1.5em\" id=\"section-5.6.1-1.6\">\n The name of the tool being called, exactly as declared in the\n      tool server's manifest.<a href=\"#section-5.6.1-1.6\" class=\"pilcrow\">¶</a>\n</dd>\n            <dd class=\"break\"></dd>\n<dt id=\"section-5.6.1-1.7\">argumentsHash (string, REQUIRED):</dt>\n            <dd style=\"margin-left: 1.5em\" id=\"section-5.6.1-1.8\">\n Lowercase hex-encoded SHA-256 hash of the canonical JSON\n      serialization of the tool call arguments.  This binds the\n      token to the specific arguments being passed.<a href=\"#section-5.6.1-1.8\" class=\"pilcrow\">¶</a>\n</dd>\n            <dd class=\"break\"></dd>\n<dt id=\"section-5.6.1-1.9\">nonce (string, REQUIRED):</dt>\n            <dd style=\"margin-left: 1.5em\" id=\"section-5.6.1-1.10\">\n A 128-bit cryptographically random value, hex-encoded.  MUST\n      be unique per token.  MUST be generated by a CSPRNG.<a href=\"#section-5.6.1-1.10\" class=\"pilcrow\">¶</a>\n</dd>\n            <dd class=\"break\"></dd>\n<dt id=\"section-5.6.1-1.11\">timestamp (string, REQUIRED):</dt>\n            <dd style=\"margin-left: 1.5em\" id=\"section-5.6.1-1.12\">\n ISO 8601 UTC timestamp of token construction.<a href=\"#section-5.6.1-1.12\" class=\"pilcrow\">¶</a>\n</dd>\n            <dd class=\"break\"></dd>\n<dt id=\"section-5.6.1-1.13\">signature (string, REQUIRED):</dt>\n            <dd style=\"margin-left: 1.5em\" id=\"section-5.6.1-1.14\">\n Base64url-encoded signature over the canonical\n      serialization of the token (<a href=\"#sect-5.6.2\" class=\"auto internal xref\">Section 5.6.2</a>).<a href=\"#section-5.6.1-1.14\" class=\"pilcrow\">¶</a>\n</dd>\n          <dd class=\"break\"></dd>\n</dl>\n</section>\n</div>\n<div id=\"sect-5.6.2\">\n<section id=\"section-5.6.2\">\n          <h4 id=\"name-canonical-serialization\">\n<a href=\"#section-5.6.2\" class=\"section-number selfRef\">5.6.2. </a><a href=\"#name-canonical-serialization\" class=\"section-name selfRef\">Canonical Serialization</a>\n          </h4>\n<p id=\"section-5.6.2-1\">\n   To produce the bytes that are signed:<a href=\"#section-5.6.2-1\" class=\"pilcrow\">¶</a></p>\n<span class=\"break\"></span><dl class=\"dlParallel\" id=\"section-5.6.2-2\">\n            <dt id=\"section-5.6.2-2.1\">(a)</dt>\n            <dd style=\"margin-left: 2.5em\" id=\"section-5.6.2-2.2\">\n              <p id=\"section-5.6.2-2.2.1\">\n Construct a JSON object containing all token fields except<a href=\"#section-5.6.2-2.2.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-5.6.2-2.2.2\">\n \"signature\";<a href=\"#section-5.6.2-2.2.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n            <dd class=\"break\"></dd>\n<dt id=\"section-5.6.2-2.3\">(b)</dt>\n            <dd style=\"margin-left: 2.5em\" id=\"section-5.6.2-2.4\">\n              <p id=\"section-5.6.2-2.4.1\">\n Serialize with no insignificant whitespace;<a href=\"#section-5.6.2-2.4.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-5.6.2-2.4.2\">\n (c)  Sort object keys lexicographically;\n   (d)  Encode as UTF-8.<a href=\"#section-5.6.2-2.4.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n          <dd class=\"break\"></dd>\n</dl>\n<p id=\"section-5.6.2-3\">\n   The signature field is then set to the base64url encoding of the signature over these bytes.<a href=\"#section-5.6.2-3\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"sect-5.6.3\">\n<section id=\"section-5.6.3\">\n          <h4 id=\"name-example-token-before-base64\">\n<a href=\"#section-5.6.3\" class=\"section-number selfRef\">5.6.3. </a><a href=\"#name-example-token-before-base64\" class=\"section-name selfRef\">Example Token (before base64url encoding for transport)</a>\n          </h4>\n<div class=\"alignLeft art-text artwork\" id=\"section-5.6.3-1\">\n<pre>\n{\n  \"aipVersion\": \"1\",\n  \"agentId\": \"reg.agentidentityprotocol.io/01933f4a-9b2c-7d8e-af01\",\n  \"tool\": \"read_file\",\n  \"argumentsHash\": \"e3b0c44298fc1c149afb4c8996fb924...\",\n  \"nonce\": \"a3f8b2c1d4e5f607a8b9c0d1e2f3a4b5\",\n  \"timestamp\": \"2026-02-24T14:30:00Z\",\n  \"signature\": \"TUlJQ0lqQU5CZ2txaGtpRzl3MEJB...\"\n}\n</pre><a href=\"#section-5.6.3-1\" class=\"pilcrow\">¶</a>\n</div>\n</section>\n</div>\n</section>\n</div>\n<div id=\"sect-5.7\">\n<section id=\"section-5.7\">\n        <h3 id=\"name-token-verification\">\n<a href=\"#section-5.7\" class=\"section-number selfRef\">5.7. </a><a href=\"#name-token-verification\" class=\"section-name selfRef\">Token Verification</a>\n        </h3>\n<p id=\"section-5.7-1\">\n   The AIP Proxy MUST perform the following checks in order.  A\n   failure at any step MUST produce a DENY decision with the\n   corresponding error code (<a href=\"#sect-7.2\" class=\"auto internal xref\">Section 7.2</a>) and an audit log entry.<a href=\"#section-5.7-1\" class=\"pilcrow\">¶</a></p>\n<span class=\"break\"></span><dl class=\"dlNewline\" id=\"section-5.7-2\">\n          <dt id=\"section-5.7-2.1\">Step 1 -- Presence check.</dt>\n          <dd style=\"margin-left: 1.5em\" id=\"section-5.7-2.2\">\n Confirm the AIP Token is present in the request.\n      On failure: AIP-E010.<a href=\"#section-5.7-2.2\" class=\"pilcrow\">¶</a>\n</dd>\n          <dd class=\"break\"></dd>\n<dt id=\"section-5.7-2.3\">Step 2 -- Agent Record lookup.</dt>\n          <dd style=\"margin-left: 1.5em\" id=\"section-5.7-2.4\">\n Resolve the Agent ID from the token against the AIP Registry\n      (or local cache).  Confirm the Agent Record status is \"active\".\n      On failure: AIP-E011 (unresolvable) or AIP-E012 (revoked).<a href=\"#section-5.7-2.4\" class=\"pilcrow\">¶</a>\n</dd>\n          <dd class=\"break\"></dd>\n<dt id=\"section-5.7-2.5\">Step 3 -- Signature verification.</dt>\n          <dd style=\"margin-left: 1.5em\" id=\"section-5.7-2.6\">\n Compute the canonical serialization (<a href=\"#sect-5.6.2\" class=\"auto internal xref\">Section 5.6.2</a>) and verify\n      the key signature against the public key in the Agent Record.\n      This operation MUST be performed in constant time.\n      On failure: AIP-E013.<a href=\"#section-5.7-2.6\" class=\"pilcrow\">¶</a>\n</dd>\n          <dd class=\"break\"></dd>\n<dt id=\"section-5.7-2.7\">Step 4 -- Nonce replay check.</dt>\n          <dd style=\"margin-left: 1.5em\" id=\"section-5.7-2.8\">\n Check the nonce against the proxy's local nonce cache (minimum\n      TTL: 600 seconds).  If the nonce has been seen before, reject.\n      On failure: AIP-E004.<a href=\"#section-5.7-2.8\" class=\"pilcrow\">¶</a>\n</dd>\n          <dd class=\"break\"></dd>\n<dt id=\"section-5.7-2.9\">Step 5 -- Timestamp freshness.</dt>\n          <dd style=\"margin-left: 1.5em\" id=\"section-5.7-2.10\">\n Reject the token if its timestamp is more than 300 seconds in\n      the past or 30 seconds in the future relative to the proxy clock.\n      On failure: AIP-E005.<a href=\"#section-5.7-2.10\" class=\"pilcrow\">¶</a>\n</dd>\n        <dd class=\"break\"></dd>\n</dl>\n<p id=\"section-5.7-3\">\n   If all five steps pass, the token is verified and the call proceeds\n   to policy evaluation (<a href=\"#sect-6.3\" class=\"auto internal xref\">Section 6.3</a>).<a href=\"#section-5.7-3\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n</section>\n</div>\n<div id=\"sect-6\">\n<section id=\"section-6\">\n      <h2 id=\"name-layer-2-enforcement-proxy\">\n<a href=\"#section-6\" class=\"section-number selfRef\">6. </a><a href=\"#name-layer-2-enforcement-proxy\" class=\"section-name selfRef\">Layer 2: Enforcement Proxy</a>\n      </h2>\n<div id=\"sect-6.1\">\n<section id=\"section-6.1\">\n        <h3 id=\"name-proxy-architecture\">\n<a href=\"#section-6.1\" class=\"section-number selfRef\">6.1. </a><a href=\"#name-proxy-architecture\" class=\"section-name selfRef\">Proxy Architecture</a>\n        </h3>\n<p id=\"section-6.1-1\">\n   The AIP Proxy is a forward proxy interposed between the AI client\n   and one or more tool servers.  It is transparent: it presents itself\n   to the AI client as the tool server endpoint, and to the tool server\n   as an authorized caller.<a href=\"#section-6.1-1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-6.1-2\">\n   The proxy operates in one of two modes, set per agent in the\n   AgentPolicy:<a href=\"#section-6.1-2\" class=\"pilcrow\">¶</a></p>\n<span class=\"break\"></span><dl class=\"dlParallel\" id=\"section-6.1-3\">\n          <dt id=\"section-6.1-3.1\">enforce:</dt>\n          <dd style=\"margin-left: 5.0em\" id=\"section-6.1-3.2\">\n            <p id=\"section-6.1-3.2.1\">\n Policy violations result in DENY responses.  The tool<a href=\"#section-6.1-3.2.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-6.1-3.2.2\">\n server is never reached for blocked calls.  This is the\n             default and RECOMMENDED mode.<a href=\"#section-6.1-3.2.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n          <dd class=\"break\"></dd>\n<dt id=\"section-6.1-3.3\">monitor:</dt>\n          <dd style=\"margin-left: 5.0em\" id=\"section-6.1-3.4\">\n            <p id=\"section-6.1-3.4.1\">\n Policy violations are logged but calls are forwarded<a href=\"#section-6.1-3.4.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-6.1-3.4.2\">\n regardless.  Used for baselining and policy development\n             before switching to enforce mode.<a href=\"#section-6.1-3.4.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n        <dd class=\"break\"></dd>\n</dl>\n<p id=\"section-6.1-4\">\n   The proxy MUST maintain locally:<a href=\"#section-6.1-4\" class=\"pilcrow\">¶</a></p>\n<div class=\"alignLeft art-text artwork\" id=\"section-6.1-5\">\n<pre>\no  The AgentPolicy for each agent it serves;\no  A bounded nonce cache (TTL &gt;= 600 seconds, LRU eviction);\no  A revocation cache (refresh interval &lt;= 60 seconds);\no  An append-only audit log.\n</pre><a href=\"#section-6.1-5\" class=\"pilcrow\">¶</a>\n</div>\n</section>\n</div>\n<div id=\"sect-6.2\">\n<section id=\"section-6.2\">\n        <h3 id=\"name-agentpolicy\">\n<a href=\"#section-6.2\" class=\"section-number selfRef\">6.2. </a><a href=\"#name-agentpolicy\" class=\"section-name selfRef\">AgentPolicy</a>\n        </h3>\n<p id=\"section-6.2-1\">\n   The AgentPolicy is a YAML file that declares the enforcement rules\n   for a specific agent.  One AgentPolicy file corresponds to one\n   Agent ID. A AgentPolicy file can apply to multiple Agent IDs.<a href=\"#section-6.2-1\" class=\"pilcrow\">¶</a></p>\n<div id=\"sect-6.2.1\">\n<section id=\"section-6.2.1\">\n          <h4 id=\"name-schema\">\n<a href=\"#section-6.2.1\" class=\"section-number selfRef\">6.2.1. </a><a href=\"#name-schema\" class=\"section-name selfRef\">Schema</a>\n          </h4>\n<div class=\"sourcecode\" id=\"section-6.2.1-1\">\n<pre>&lt;CODE BEGINS&gt;\n   agentId: &lt;Agent ID&gt;\n   mode: &lt;enforce | monitor&gt;\n\n   tools:\n     allowed:\n       - &lt;tool-name&gt;\n     rules:\n       - tool: &lt;tool-name&gt;\n         action: &lt;allow | ask | block&gt;\n         args:\n           &lt;arg-name&gt;:\n             pattern: &lt;PCRE regex&gt;\n             maxLength: &lt;integer&gt;\n\n   dlp:\n     - name: &lt;pattern name&gt;\n       regex: &lt;PCRE regex&gt;\n       action: &lt;redact | block&gt;\n       scope: &lt;request | response | both&gt;\n\n   hitl:\n     approvers:\n       - &lt;email or identifier of approver&gt;\n     timeout_seconds: &lt;integer, default 300&gt;  # seconds to wait for approval\n     on_timeout: &lt;deny | allow&gt;               # action if no response received\n\n&lt;CODE ENDS&gt;</pre><a href=\"#section-6.2.1-1\" class=\"pilcrow\">¶</a>\n</div>\n</section>\n</div>\n<div id=\"sect-6.2.2\">\n<section id=\"section-6.2.2\">\n          <h4 id=\"name-tool-allowlist\">\n<a href=\"#section-6.2.2\" class=\"section-number selfRef\">6.2.2. </a><a href=\"#name-tool-allowlist\" class=\"section-name selfRef\">Tool Allowlist</a>\n          </h4>\n<p id=\"section-6.2.2-1\">\n   The tools.allowed list defines every tool the agent is permitted\n   to call.  Any call to a tool not on this list MUST be denied with\n   AIP-E001 when the proxy is in enforce mode.<a href=\"#section-6.2.2-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"sect-6.2.3\">\n<section id=\"section-6.2.3\">\n          <h4 id=\"name-tool-rules\">\n<a href=\"#section-6.2.3\" class=\"section-number selfRef\">6.2.3. </a><a href=\"#name-tool-rules\" class=\"section-name selfRef\">Tool Rules</a>\n          </h4>\n<p id=\"section-6.2.3-1\">\n   Each entry in tools.rules applies additional handling to a named\n   tool:<a href=\"#section-6.2.3-1\" class=\"pilcrow\">¶</a></p>\n<span class=\"break\"></span><dl class=\"dlParallel\" id=\"section-6.2.3-2\">\n            <dt id=\"section-6.2.3-2.1\">allow:</dt>\n            <dd style=\"margin-left: 4.0em\" id=\"section-6.2.3-2.2\">\n              <p id=\"section-6.2.3-2.2.1\">\n The tool is on the allowlist and is forwarded after<a href=\"#section-6.2.3-2.2.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-6.2.3-2.2.2\">\n argument validation.  This is the default when no rule\n           is specified.<a href=\"#section-6.2.3-2.2.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n            <dd class=\"break\"></dd>\n<dt id=\"section-6.2.3-2.3\">ask:</dt>\n            <dd style=\"margin-left: 4.0em\" id=\"section-6.2.3-2.4\">\n              <p id=\"section-6.2.3-2.4.1\">\n The call is held for HITL approval before forwarding,<a href=\"#section-6.2.3-2.4.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-6.2.3-2.4.2\">\n regardless of any other policy check.<a href=\"#section-6.2.3-2.4.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n            <dd class=\"break\"></dd>\n<dt id=\"section-6.2.3-2.5\">block:</dt>\n            <dd style=\"margin-left: 4.0em\" id=\"section-6.2.3-2.6\">\n              <p id=\"section-6.2.3-2.6.1\">\n The call is unconditionally denied.  This overrides the<a href=\"#section-6.2.3-2.6.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-6.2.3-2.6.2\">\n allowlist and cannot be circumvented.  Use this for tools\n           that must never be reachable by the agent under any\n           circumstances.<a href=\"#section-6.2.3-2.6.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n          <dd class=\"break\"></dd>\n</dl>\n<p id=\"section-6.2.3-3\">\n   Argument rules (args) apply PCRE regex pattern matching and a\n   maximum length check to named arguments before the call is\n   forwarded.  A violation produces AIP-E002.<a href=\"#section-6.2.3-3\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"sect-6.2.4\">\n<section id=\"section-6.2.4\">\n          <h4 id=\"name-dlp-rules\">\n<a href=\"#section-6.2.4\" class=\"section-number selfRef\">6.2.4. </a><a href=\"#name-dlp-rules\" class=\"section-name selfRef\">DLP Rules</a>\n          </h4>\n<p id=\"section-6.2.4-1\">\n   Each DLP rule specifies a regex pattern, an action, and a scope:<a href=\"#section-6.2.4-1\" class=\"pilcrow\">¶</a></p>\n<span class=\"break\"></span><dl class=\"dlParallel\" id=\"section-6.2.4-2\">\n            <dt id=\"section-6.2.4-2.1\">redact / request:</dt>\n            <dd style=\"margin-left: 10.0em\" id=\"section-6.2.4-2.2\">\n              <p id=\"section-6.2.4-2.2.1\">\n Matching content in arguments is replaced with<a href=\"#section-6.2.4-2.2.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-6.2.4-2.2.2\">\n \"[REDACTED:&lt;name&gt;]\" and the call proceeds.<a href=\"#section-6.2.4-2.2.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n            <dd class=\"break\"></dd>\n<dt id=\"section-6.2.4-2.3\">redact / response:</dt>\n            <dd style=\"margin-left: 10.0em\" id=\"section-6.2.4-2.4\">\n              <p id=\"section-6.2.4-2.4.1\">\n Matching content in the tool response is<a href=\"#section-6.2.4-2.4.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-6.2.4-2.4.2\">\n replaced with \"[REDACTED:&lt;name&gt;]\" before the\n                       response is returned to the agent.<a href=\"#section-6.2.4-2.4.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n            <dd class=\"break\"></dd>\n<dt id=\"section-6.2.4-2.5\">block / both:</dt>\n            <dd style=\"margin-left: 10.0em\" id=\"section-6.2.4-2.6\">\n              <p id=\"section-6.2.4-2.6.1\">\n If a match is found anywhere in the request<a href=\"#section-6.2.4-2.6.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-6.2.4-2.6.2\">\n or response, the call or response is rejected\n                       with AIP-E008.<a href=\"#section-6.2.4-2.6.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n          <dd class=\"break\"></dd>\n</dl>\n</section>\n</div>\n<div id=\"sect-6.2.5\">\n<section id=\"section-6.2.5\">\n          <h4 id=\"name-hitl-configuration\">\n<a href=\"#section-6.2.5\" class=\"section-number selfRef\">6.2.5. </a><a href=\"#name-hitl-configuration\" class=\"section-name selfRef\">HITL Configuration</a>\n          </h4>\n<p id=\"section-6.2.5-1\">\n   The hitl block identifies who may approve held calls, how long the\n   proxy waits, and what to do on timeout.  The default on_timeout is\n   \"deny\".  Setting on_timeout to \"allow\" SHOULD only be used for\n   non-sensitive, low-impact tools.<a href=\"#section-6.2.5-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n</section>\n</div>\n<div id=\"sect-6.3\">\n<section id=\"section-6.3\">\n        <h3 id=\"name-intercept-flow\">\n<a href=\"#section-6.3\" class=\"section-number selfRef\">6.3. </a><a href=\"#name-intercept-flow\" class=\"section-name selfRef\">Intercept Flow</a>\n        </h3>\n<p id=\"section-6.3-1\">\n   The following is the normative sequence for every tool call received\n   by the proxy.<a href=\"#section-6.3-1\" class=\"pilcrow\">¶</a></p>\n<div class=\"alignLeft art-text artwork\" id=\"section-6.3-2\">\n<pre>\n1.  Receive the tool call from the AI client.\n\n2.  Run token verification (Section 5.7).\n    Any failure -&gt; DENY with the corresponding AIP-Exxx code.\n\n3.  Check tools.allowed.\n    Tool not present and mode == enforce -&gt; DENY AIP-E001.\n\n4.  Check tools.rules for this tool.\n    action == block -&gt; DENY AIP-E003.\n    action == ask   -&gt; go to step 7 (HITL).\n\n5.  Validate arguments against any matching tools.rules.args.\n    Violation -&gt; DENY AIP-E002.\n\n6.  Run DLP scan on request arguments.\n    block match -&gt; DENY AIP-E008.\n    redact match -&gt; replace content, continue.\n\n7.  If action == ask: submit to HITL queue (Section 6.5).\n    Approved -&gt; continue to step 8.\n    Denied   -&gt; DENY AIP-E015.\n    Timed out -&gt; resolve per on_timeout.\n\n8.  ALLOW: forward the call to the tool server.\n\n9.  Receive the tool server response.\n\n10. Run DLP scan on the response.\n    block match -&gt; return AIP-E008 to agent, suppress response.\n    redact match -&gt; replace content, continue.\n</pre><a href=\"#section-6.3-2\" class=\"pilcrow\">¶</a>\n</div>\n<p id=\"section-6.3-3\">\n   11. Return the (possibly redacted) response to the agent.<a href=\"#section-6.3-3\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-6.3-4\">\n   12. Write audit log record (<a href=\"#sect-6.7\" class=\"auto internal xref\">Section 6.7</a>).<a href=\"#section-6.3-4\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"sect-6.4\">\n<section id=\"section-6.4\">\n        <h3 id=\"name-decision-outcomes\">\n<a href=\"#section-6.4\" class=\"section-number selfRef\">6.4. </a><a href=\"#name-decision-outcomes\" class=\"section-name selfRef\">Decision Outcomes</a>\n        </h3>\n<span class=\"break\"></span><dl class=\"dlParallel\" id=\"section-6.4-1\">\n          <dt id=\"section-6.4-1.1\">ALLOW:</dt>\n          <dd style=\"margin-left: 4.0em\" id=\"section-6.4-1.2\">\n            <p id=\"section-6.4-1.2.1\">\n The call passed all checks and was forwarded.  The tool<a href=\"#section-6.4-1.2.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-6.4-1.2.2\">\n server response was returned to the agent.<a href=\"#section-6.4-1.2.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n          <dd class=\"break\"></dd>\n<dt id=\"section-6.4-1.3\">DENY:</dt>\n          <dd style=\"margin-left: 4.0em\" id=\"section-6.4-1.4\">\n            <p id=\"section-6.4-1.4.1\">\n The call was rejected before reaching the tool server.<a href=\"#section-6.4-1.4.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-6.4-1.4.2\">\n The proxy returns a JSON-RPC 2.0 error (<a href=\"#sect-7.2\" class=\"auto internal xref\">Section 7.2</a>).\n           The tool server receives nothing.<a href=\"#section-6.4-1.4.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n          <dd class=\"break\"></dd>\n<dt id=\"section-6.4-1.5\">HOLD:</dt>\n          <dd style=\"margin-left: 4.0em\" id=\"section-6.4-1.6\">\n            <p id=\"section-6.4-1.6.1\">\n The call is queued.  The proxy returns a pending response<a href=\"#section-6.4-1.6.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-6.4-1.6.2\">\n to the agent.  The call is resolved when a human approver\n           responds or the HITL timeout is reached.<a href=\"#section-6.4-1.6.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n        <dd class=\"break\"></dd>\n</dl>\n</section>\n</div>\n<div id=\"sect-6.5\">\n<section id=\"section-6.5\">\n        <h3 id=\"name-human-in-the-loop-hitl\">\n<a href=\"#section-6.5\" class=\"section-number selfRef\">6.5. </a><a href=\"#name-human-in-the-loop-hitl\" class=\"section-name selfRef\">Human-in-the-Loop (HITL)</a>\n        </h3>\n<p id=\"section-6.5-1\">\n   When a call is held, the proxy MUST notify all addresses listed in\n   hitl.approvers.  The notification MUST include:<a href=\"#section-6.5-1\" class=\"pilcrow\">¶</a></p>\n<ul class=\"normal\">\n<li class=\"normal\" id=\"section-6.5-2.1\">\n            <p id=\"section-6.5-2.1.1\">The Agent ID and agent name;<a href=\"#section-6.5-2.1.1\" class=\"pilcrow\">¶</a></p>\n</li>\n          <li class=\"normal\" id=\"section-6.5-2.2\">\n            <p id=\"section-6.5-2.2.1\">The tool name and (post-redaction) arguments;<a href=\"#section-6.5-2.2.1\" class=\"pilcrow\">¶</a></p>\n</li>\n          <li class=\"normal\" id=\"section-6.5-2.3\">\n            <p id=\"section-6.5-2.3.1\">The policy rule that triggered the hold;<a href=\"#section-6.5-2.3.1\" class=\"pilcrow\">¶</a></p>\n</li>\n          <li class=\"normal\" id=\"section-6.5-2.4\">\n            <p id=\"section-6.5-2.4.1\">A unique hold_id.<a href=\"#section-6.5-2.4.1\" class=\"pilcrow\">¶</a></p>\n</li>\n        </ul>\n<p id=\"section-6.5-3\">\n   Notification delivery (email, webhook, Slack, web UI) is out of\n   scope for this specification.<a href=\"#section-6.5-3\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-6.5-4\">\n   Approvers submit a decision to the proxy using the HITL API.\n   Approval and denial endpoints are:<a href=\"#section-6.5-4\" class=\"pilcrow\">¶</a></p>\n<div class=\"alignLeft art-text artwork\" id=\"section-6.5-5\">\n<pre>\n   POST /v1/hitl/{hold_id}/approve\n   POST /v1/hitl/{hold_id}/deny\n</pre><a href=\"#section-6.5-5\" class=\"pilcrow\">¶</a>\n</div>\n<p id=\"section-6.5-6\">\n   These endpoints MUST be authenticated.  If no response is received\n   within hitl.timeout_seconds, the proxy resolves the hold according\n   to hitl.on_timeout and writes the outcome to the audit log.<a href=\"#section-6.5-6\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"sect-6.6\">\n<section id=\"section-6.6\">\n        <h3 id=\"name-data-loss-prevention-dlp\">\n<a href=\"#section-6.6\" class=\"section-number selfRef\">6.6. </a><a href=\"#name-data-loss-prevention-dlp\" class=\"section-name selfRef\">Data Loss Prevention (DLP)</a>\n        </h3>\n<p id=\"section-6.6-1\">\n   The DLP scanner applies the dlp rules from the AgentPolicy to both\n   the inbound tool call arguments and the outbound tool server\n   response.  Rules are evaluated in the order they are listed.  The\n   first matching rule wins.<a href=\"#section-6.6-1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-6.6-2\">\n   Implementations SHOULD provide a standard rule library covering\n   common sensitive data types:<a href=\"#section-6.6-2\" class=\"pilcrow\">¶</a></p>\n<ul class=\"normal\">\n<li class=\"normal\" id=\"section-6.6-3.1\">\n            <p id=\"section-6.6-3.1.1\">Cloud provider credentials (AWS, GCP, Azure key patterns);<a href=\"#section-6.6-3.1.1\" class=\"pilcrow\">¶</a></p>\n</li>\n          <li class=\"normal\" id=\"section-6.6-3.2\">\n            <p id=\"section-6.6-3.2.1\">Private key material (PEM headers);<a href=\"#section-6.6-3.2.1\" class=\"pilcrow\">¶</a></p>\n</li>\n          <li class=\"normal\" id=\"section-6.6-3.3\">\n            <p id=\"section-6.6-3.3.1\">Common PII patterns (email, phone, SSN formats);<a href=\"#section-6.6-3.3.1\" class=\"pilcrow\">¶</a></p>\n</li>\n          <li class=\"normal\" id=\"section-6.6-3.4\">\n            <p id=\"section-6.6-3.4.1\">Generic high-entropy secrets (long alphanumeric tokens).<a href=\"#section-6.6-3.4.1\" class=\"pilcrow\">¶</a></p>\n</li>\n        </ul>\n</section>\n</div>\n<div id=\"sect-6.7\">\n<section id=\"section-6.7\">\n        <h3 id=\"name-audit-logging\">\n<a href=\"#section-6.7\" class=\"section-number selfRef\">6.7. </a><a href=\"#name-audit-logging\" class=\"section-name selfRef\">Audit Logging</a>\n        </h3>\n<p id=\"section-6.7-1\">\n   The proxy MUST write one log record per tool call outcome.  Records\n   MUST be appended to an append-only log and MUST NOT be modified after\n   writing.<a href=\"#section-6.7-1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-6.7-2\">\n   Log records SHOULD be hash-chained: each record includes the SHA-256\n   hash of the previous record, enabling tamper detection.<a href=\"#section-6.7-2\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-6.7-3\">\n   See <a href=\"#sect-7.3\" class=\"auto internal xref\">Section 7.3</a> for the normative record format.<a href=\"#section-6.7-3\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-6.7-4\">\n   Log records MUST be retained for a minimum of 90 days.<a href=\"#section-6.7-4\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n</section>\n</div>\n<div id=\"sect-7\">\n<section id=\"section-7\">\n      <h2 id=\"name-wire-formats\">\n<a href=\"#section-7\" class=\"section-number selfRef\">7. </a><a href=\"#name-wire-formats\" class=\"section-name selfRef\">Wire Formats</a>\n      </h2>\n<div id=\"sect-7.1\">\n<section id=\"section-7.1\">\n        <h3 id=\"name-aip-token-header\">\n<a href=\"#section-7.1\" class=\"section-number selfRef\">7.1. </a><a href=\"#name-aip-token-header\" class=\"section-name selfRef\">AIP-Token Header</a>\n        </h3>\n<p id=\"section-7.1-1\">\n   For HTTP-based tool transports, the AIP Token is conveyed in the\n   request header:<a href=\"#section-7.1-1\" class=\"pilcrow\">¶</a></p>\n<span class=\"break\"></span><dl class=\"dlParallel\" id=\"section-7.1-2\">\n          <dt id=\"section-7.1-2.1\"></dt>\n          <dd style=\"margin-left: 1.5em\" id=\"section-7.1-2.2\">\n      AIP-Token: &lt;base64url-encoded UTF-8 JSON token&gt;<a href=\"#section-7.1-2.2\" class=\"pilcrow\">¶</a>\n</dd>\n        <dd class=\"break\"></dd>\n</dl>\n<p id=\"section-7.1-3\">\n   base64url encoding is defined in <span>[<a href=\"#RFC4648\" class=\"cite xref\">RFC4648</a>]</span> <a href=\"#sect-5\" class=\"auto internal xref\">Section 5</a> (no padding).<a href=\"#section-7.1-3\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-7.1-4\">\n   For MCP stdio transports, the AIP Token is conveyed as a \"_aip\"\n   field at the top level of the JSON-RPC request object:<a href=\"#section-7.1-4\" class=\"pilcrow\">¶</a></p>\n<div class=\"alignLeft art-text artwork\" id=\"section-7.1-5\">\n<pre>\n{\n  \"jsonrpc\": \"2.0\",\n  \"method\": \"tools/call\",\n  \"id\": 1,\n  \"params\": {\n    \"name\": \"read_file\",\n    \"arguments\": { \"path\": \"/data/report.txt\" }\n  },\n  \"_aip\": {\n    \"aipVersion\": \"1\",\n    \"agentId\": \"reg.agentidentityprotocol.io/01933f4a...\",\n    \"tool\": \"read_file\",\n    \"argumentsHash\": \"e3b0c44298...\",\n    \"nonce\": \"a3f8b2c1d4e5f607...\",\n    \"timestamp\": \"2026-02-24T14:30:00Z\",\n    \"signature\": \"TUlJQ0lq...\"\n  }\n}\n</pre><a href=\"#section-7.1-5\" class=\"pilcrow\">¶</a>\n</div>\n</section>\n</div>\n<div id=\"sect-7.2\">\n<section id=\"section-7.2\">\n        <h3 id=\"name-error-response-format\">\n<a href=\"#section-7.2\" class=\"section-number selfRef\">7.2. </a><a href=\"#name-error-response-format\" class=\"section-name selfRef\">Error Response Format</a>\n        </h3>\n<p id=\"section-7.2-1\">\n   Error responses MUST conform to JSON-RPC 2.0 <span>[<a href=\"#JSON-RPC\" class=\"cite xref\">JSON-RPC</a>]</span>.\n   AIP error codes are in the range -32001 to -32099:<a href=\"#section-7.2-1\" class=\"pilcrow\">¶</a></p>\n<div class=\"alignLeft art-text artwork\" id=\"section-7.2-2\">\n<pre>\nCode     ID        Meaning\n------   --------  -----------------------------------------------\n-32001   AIP-E001  Tool not in allowlist\n-32002   AIP-E002  Argument validation failed\n-32003   AIP-E003  Tool unconditionally blocked\n-32004   AIP-E004  Nonce replay detected\n-32005   AIP-E005  Timestamp out of range\n-32008   AIP-E008  DLP violation\n-32010   AIP-E010  AIP Token missing\n-32011   AIP-E011  Agent ID not found in registry\n-32012   AIP-E012  Agent revoked\n-32013   AIP-E013  Signature verification failed\n-32015   AIP-E015  HITL approval denied\n-32016   AIP-E016  HITL timed out\n-32099   AIP-E099  Internal proxy error\n\nExample error response:\n\n{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"error\": {\n    \"code\": -32001,\n    \"message\": \"AIP-E001: tool not in allowlist\",\n    \"data\": {\n      \"aipCode\": \"AIP-E001\",\n      \"agentId\": \"reg.agentidentityprotocol.io/01933f4a...\",\n      \"tool\": \"exec_command\"\n    }\n  }\n}\n</pre><a href=\"#section-7.2-2\" class=\"pilcrow\">¶</a>\n</div>\n</section>\n</div>\n<div id=\"sect-7.3\">\n<section id=\"section-7.3\">\n        <h3 id=\"name-audit-log-record\">\n<a href=\"#section-7.3\" class=\"section-number selfRef\">7.3. </a><a href=\"#name-audit-log-record\" class=\"section-name selfRef\">Audit Log Record</a>\n        </h3>\n<p id=\"section-7.3-1\">\n   Each record is a single JSON object on one line (JSONL <span>[<a href=\"#JSONL\" class=\"cite xref\">JSONL</a>]</span>):<a href=\"#section-7.3-1\" class=\"pilcrow\">¶</a></p>\n<div class=\"alignLeft art-text artwork\" id=\"section-7.3-2\">\n<pre>\n{\n  \"v\": 1,\n  \"ts\": \"&lt;ISO 8601 UTC&gt;\",\n  \"eventId\": \"&lt;UUID v4&gt;\",\n  \"prevHash\": \"&lt;SHA-256 hex of previous record, or null&gt;\",\n  \"decision\": \"&lt;ALLOW | DENY | HOLD&gt;\",\n  \"errorCode\": \"&lt;AIP-Exxx or null&gt;\",\n  \"agentId\": \"&lt;Agent ID&gt;\",\n  \"principalId\": \"&lt;principal identifier&gt;\",\n  \"tool\": \"&lt;tool name&gt;\",\n  \"argumentsHash\": \"&lt;SHA-256 hex&gt;\",\n  \"policyName\": \"&lt;AgentPolicy agentId value&gt;\",\n  \"verificationStep\": \"&lt;1-5 or null if passed&gt;\",\n  \"dlp\": [\n    { \"rule\": \"&lt;rule name&gt;\", \"scope\": \"&lt;request|response&gt;\",\n      \"action\": \"&lt;redacted|blocked&gt;\" }\n  ],\n  \"holdId\": \"&lt;UUID or null&gt;\",\n  \"proxyVersion\": \"&lt;semver&gt;\"\n}\n</pre><a href=\"#section-7.3-2\" class=\"pilcrow\">¶</a>\n</div>\n</section>\n</div>\n</section>\n</div>\n<div id=\"sect-8\">\n<section id=\"section-8\">\n      <h2 id=\"name-deployment-topologies\">\n<a href=\"#section-8\" class=\"section-number selfRef\">8. </a><a href=\"#name-deployment-topologies\" class=\"section-name selfRef\">Deployment Topologies</a>\n      </h2>\n<div id=\"sect-8.1\">\n<section id=\"section-8.1\">\n        <h3 id=\"name-localhost-proxy\">\n<a href=\"#section-8.1\" class=\"section-number selfRef\">8.1. </a><a href=\"#name-localhost-proxy\" class=\"section-name selfRef\">Localhost Proxy</a>\n        </h3>\n<p id=\"section-8.1-1\">\n   The localhost proxy is the simplest deployment: a single binary\n   running on the developer's machine alongside the AI client.  It\n   binds to 127.0.0.1:8787 (configurable), supports HTTP and MCP\n   stdio interception, and uses a local SQLite database for the nonce\n   cache, revocation cache, and audit log.  Policy is loaded from a\n   YAML file at ~/.aip/policy.yaml.<a href=\"#section-8.1-1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-8.1-2\">\n   This mode is suitable for individual developers and is the\n   recommended starting point for adopting AIP.  A Go proxy\n   implementation is available at the working group's GitHub\n   repository.<a href=\"#section-8.1-2\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"sect-8.2\">\n<section id=\"section-8.2\">\n        <h3 id=\"name-kubernetes-sidecar\">\n<a href=\"#section-8.2\" class=\"section-number selfRef\">8.2. </a><a href=\"#name-kubernetes-sidecar\" class=\"section-name selfRef\">Kubernetes Sidecar</a>\n        </h3>\n<p id=\"section-8.2-1\">\n   For production deployments, the AIP Proxy runs as a sidecar\n   container in the same pod as the agent container.  Outbound\n   tool-server traffic is redirected through the proxy on port 15001\n   via iptables REDIRECT rules.  Policy is loaded from a Kubernetes\n   ConfigMap or Secret.  Storage uses Redis for the distributed nonce\n   cache and a PersistentVolumeClaim for the audit log.  A Prometheus\n   metrics endpoint is exposed at /metrics.<a href=\"#section-8.2-1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-8.2-2\">\n   Exported metrics include: aip_calls_total, aip_denials_total,\n   aip_holds_total, and aip_verification_latency_seconds.<a href=\"#section-8.2-2\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"sect-8.3\">\n<section id=\"section-8.3\">\n        <h3 id=\"name-enterprise-federation\">\n<a href=\"#section-8.3\" class=\"section-number selfRef\">8.3. </a><a href=\"#name-enterprise-federation\" class=\"section-name selfRef\">Enterprise Federation</a>\n        </h3>\n<p id=\"section-8.3-1\">\n   In enterprise environments the AIP Proxy integrates with existing\n   identity infrastructure:<a href=\"#section-8.3-1\" class=\"pilcrow\">¶</a></p>\n<ul class=\"normal\">\n<li class=\"normal\" id=\"section-8.3-2.1\">\n            <p id=\"section-8.3-2.1.1\">OIDC mapping:  The registry maintains a table mapping Agent IDs\n      to OIDC subject claims.  When a tool server requires an OIDC\n      token, the proxy can present one on the agent's behalf after AIP\n      verification passes, without the agent holding OIDC credentials\n      directly.<a href=\"#section-8.3-2.1.1\" class=\"pilcrow\">¶</a></p>\n</li>\n          <li class=\"normal\" id=\"section-8.3-2.2\">\n            <p id=\"section-8.3-2.2.1\">SPIFFE/mTLS:  The proxy is issued a SPIFFE SVID and uses it to\n      establish mTLS connections to tool servers, providing transport-\n      layer mutual authentication in addition to AIP application-layer\n      identity.<a href=\"#section-8.3-2.2.1\" class=\"pilcrow\">¶</a></p>\n</li>\n          <li class=\"normal\" id=\"section-8.3-2.3\">\n            <p id=\"section-8.3-2.3.1\">Central policy management:  AgentPolicy files are managed via\n      a policy API with versioning, rollback, and change auditing,\n      rather than local YAML files.<a href=\"#section-8.3-2.3.1\" class=\"pilcrow\">¶</a></p>\n</li>\n        </ul>\n</section>\n</div>\n</section>\n</div>\n<div id=\"sect-9\">\n<section id=\"section-9\">\n      <h2 id=\"name-security-considerations\">\n<a href=\"#section-9\" class=\"section-number selfRef\">9. </a><a href=\"#name-security-considerations\" class=\"section-name selfRef\">Security Considerations</a>\n      </h2>\n<div id=\"sect-9.1\">\n<section id=\"section-9.1\">\n        <h3 id=\"name-cryptographic-algorithm\">\n<a href=\"#section-9.1\" class=\"section-number selfRef\">9.1. </a><a href=\"#name-cryptographic-algorithm\" class=\"section-name selfRef\">Cryptographic Algorithm</a>\n        </h3>\n<p id=\"section-9.1-1\">\n   AIP is built with the idea of using Ed25519 <span>[<a href=\"#RFC8032\" class=\"cite xref\">RFC8032</a>]</span> for all signatures.  Ed25519 was chosen\n   because it is fast (sign and verify in under 1ms), produces short\n   keys and signatures (32 and 64 bytes respectively), is deterministic\n   (no per-signature randomness required), and has broad library support\n   across all major languages and platforms. However other cryptographic algorithms should be supported.<a href=\"#section-9.1-1\" class=\"pilcrow\">¶</a></p>\n<div class=\"alignLeft art-text artwork\" id=\"section-9.1-2\">\n<pre>\nAll Ed25519 operations MUST use a constant-time\nimplementation to prevent timing side-channels (Section 9.3).\n</pre><a href=\"#section-9.1-2\" class=\"pilcrow\">¶</a>\n</div>\n</section>\n</div>\n<div id=\"sect-9.2\">\n<section id=\"section-9.2\">\n        <h3 id=\"name-prompt-injection-resistance\">\n<a href=\"#section-9.2\" class=\"section-number selfRef\">9.2. </a><a href=\"#name-prompt-injection-resistance\" class=\"section-name selfRef\">Prompt Injection Resistance</a>\n        </h3>\n<p id=\"section-9.2-1\">\n   The principal threat model for AIP at Layer 2 is the prompt\n   injection attack: malicious content in the agent's context causes\n   it to attempt tool calls outside its intended scope.<a href=\"#section-9.2-1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-9.2-2\">\n   The allowlist in the AgentPolicy prevents the agent from reaching\n   tools it was not provisioned for, regardless of what the model\n   produces.  The \"block\" action provides an unconditional deny for\n   specified tools that cannot be overridden by any model output,\n   injected prompt, or delegation claim.  The proxy operates entirely\n   outside the model's trust boundary; the model cannot influence the\n   proxy's decisions.<a href=\"#section-9.2-2\" class=\"pilcrow\">¶</a></p>\n<div class=\"alignLeft art-text artwork\" id=\"section-9.2-3\">\n<pre>\nAIP does not protect against:\no  A compromised agent runtime that routes calls around the proxy;\no  Tool servers that accept calls from sources other than the proxy.\n</pre><a href=\"#section-9.2-3\" class=\"pilcrow\">¶</a>\n</div>\n</section>\n</div>\n<div id=\"sect-9.3\">\n<section id=\"section-9.3\">\n        <h3 id=\"name-transport-security\">\n<a href=\"#section-9.3\" class=\"section-number selfRef\">9.3. </a><a href=\"#name-transport-security\" class=\"section-name selfRef\">Transport Security</a>\n        </h3>\n<p id=\"section-9.3-1\">\n   All communication between AIP Proxies and the AIP Registry MUST use\n   TLS 1.3 <span>[<a href=\"#RFC8446\" class=\"cite xref\">RFC8446</a>]</span>.  Server certificates MUST be validated against\n   the system trust store.  Certificate pinning is RECOMMENDED for\n   registry connections in production deployments.<a href=\"#section-9.3-1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-9.3-2\">\n   Proxy-to-tool-server connections MUST use TLS 1.2 <span>[<a href=\"#RFC5246\" class=\"cite xref\">RFC5246</a>]</span> or\n   later.  TLS 1.3 is RECOMMENDED.<a href=\"#section-9.3-2\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"sect-9.4\">\n<section id=\"section-9.4\">\n        <h3 id=\"name-private-key-storage\">\n<a href=\"#section-9.4\" class=\"section-number selfRef\">9.4. </a><a href=\"#name-private-key-storage\" class=\"section-name selfRef\">Private Key Storage</a>\n        </h3>\n<p id=\"section-9.4-1\">\n   Agent private keys MUST be stored in a secure key store.  In order\n   of preference:<a href=\"#section-9.4-1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-9.4-2\">\n   1.  Hardware Security Module (HSM) or Trusted Platform Module (TPM);\n   2.  OS keychain (macOS Keychain, Windows DPAPI, Linux Secret Service);\n   3.  Encrypted file with passphrase derived using Argon2id <span>[<a href=\"#RFC9106\" class=\"cite xref\">RFC9106</a>]</span>.<a href=\"#section-9.4-2\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-9.4-3\">\n   Private keys MUST NOT be stored in environment variables, plaintext\n   configuration files, or source code repositories.<a href=\"#section-9.4-3\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"sect-9.5\">\n<section id=\"section-9.5\">\n        <h3 id=\"name-registry-trust\">\n<a href=\"#section-9.5\" class=\"section-number selfRef\">9.5. </a><a href=\"#name-registry-trust\" class=\"section-name selfRef\">Registry Trust</a>\n        </h3>\n<p id=\"section-9.5-1\">\n   A proxy MUST be configured with an explicit list of trusted registry\n   hostnames and the TLS certificate fingerprint (or CA) for each.\n   Agent Records from registries not on this list MUST be rejected.<a href=\"#section-9.5-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"sect-9.6\">\n<section id=\"section-9.6\">\n        <h3 id=\"name-nonce-cache-sizing\">\n<a href=\"#section-9.6\" class=\"section-number selfRef\">9.6. </a><a href=\"#name-nonce-cache-sizing\" class=\"section-name selfRef\">Nonce Cache Sizing</a>\n        </h3>\n<p id=\"section-9.6-1\">\n   The nonce cache must be large enough to hold all unique nonces\n   generated within the TTL window (600 seconds).  Implementations\n   MUST use a bounded cache with LRU eviction and MUST NOT silently\n   drop old nonces without ensuring they are outside the TTL window.<a href=\"#section-9.6-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"sect-9.7\">\n<section id=\"section-9.7\">\n        <h3 id=\"name-revocation-latency\">\n<a href=\"#section-9.7\" class=\"section-number selfRef\">9.7. </a><a href=\"#name-revocation-latency\" class=\"section-name selfRef\">Revocation Latency</a>\n        </h3>\n<p id=\"section-9.7-1\">\n   The proxy's revocation cache has a maximum refresh interval of\n   60 seconds (<a href=\"#sect-6.1\" class=\"auto internal xref\">Section 6.1</a>).  In the worst case, a revoked agent can\n   continue making calls for up to 60 seconds after revocation.\n   Deployments with stricter requirements SHOULD subscribe to the\n   registry's SSE revocation stream (<a href=\"#sect-5.3\" class=\"auto internal xref\">Section 5.3</a>) and invalidate the\n   cache on receipt of a revocation event.<a href=\"#section-9.7-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"sect-9.8\">\n<section id=\"section-9.8\">\n        <h3 id=\"name-denial-of-service\">\n<a href=\"#section-9.8\" class=\"section-number selfRef\">9.8. </a><a href=\"#name-denial-of-service\" class=\"section-name selfRef\">Denial-of-Service</a>\n        </h3>\n<p id=\"section-9.8-1\">\n   The proxy adds a small amount of latency to every tool call (one\n   cache lookup and one key verification).  To prevent the proxy\n   from becoming an availability bottleneck:<a href=\"#section-9.8-1\" class=\"pilcrow\">¶</a></p>\n<ul class=\"normal\">\n<li class=\"normal\" id=\"section-9.8-2.1\">\n            <p id=\"section-9.8-2.1.1\">Agent Record lookups MUST be served from the local cache except\n      on cache miss or invalidation;<a href=\"#section-9.8-2.1.1\" class=\"pilcrow\">¶</a></p>\n</li>\n          <li class=\"normal\" id=\"section-9.8-2.2\">\n            <p id=\"section-9.8-2.2.1\">The proxy SHOULD enforce a per-agent call rate limit to prevent\n      a runaway agent from flooding the registry with cache-miss\n      lookups.<a href=\"#section-9.8-2.2.1\" class=\"pilcrow\">¶</a></p>\n</li>\n        </ul>\n</section>\n</div>\n</section>\n</div>\n<div id=\"sect-10\">\n<section id=\"section-10\">\n      <h2 id=\"name-privacy-considerations\">\n<a href=\"#section-10\" class=\"section-number selfRef\">10. </a><a href=\"#name-privacy-considerations\" class=\"section-name selfRef\">Privacy Considerations</a>\n      </h2>\n<div id=\"sect-10.1\">\n<section id=\"section-10.1\">\n        <h3 id=\"name-agent-record-visibility\">\n<a href=\"#section-10.1\" class=\"section-number selfRef\">10.1. </a><a href=\"#name-agent-record-visibility\" class=\"section-name selfRef\">Agent Record Visibility</a>\n        </h3>\n<p id=\"section-10.1-1\">\n   Agent Records are visible to any party that can query the registry.\n   Principals SHOULD use non-identifying agent names for agents that\n   handle sensitive workloads.<a href=\"#section-10.1-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"sect-10.2\">\n<section id=\"section-10.2\">\n        <h3 id=\"name-audit-log-sensitivity\">\n<a href=\"#section-10.2\" class=\"section-number selfRef\">10.2. </a><a href=\"#name-audit-log-sensitivity\" class=\"section-name selfRef\">Audit Log Sensitivity</a>\n        </h3>\n<p id=\"section-10.2-1\">\n   Audit logs contain Agent IDs, tool names, and argument hashes.\n   While argument values are not logged in plaintext, the combination\n   of Agent ID and tool name may itself be sensitive in some contexts.\n   Audit logs MUST be access-controlled appropriately.<a href=\"#section-10.2-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"sect-10.3\">\n<section id=\"section-10.3\">\n        <h3 id=\"name-dlp-redaction\">\n<a href=\"#section-10.3\" class=\"section-number selfRef\">10.3. </a><a href=\"#name-dlp-redaction\" class=\"section-name selfRef\">DLP Redaction</a>\n        </h3>\n<p id=\"section-10.3-1\">\n   When DLP redaction is applied to a response, the proxy modifies the\n   data the agent receives.  Operators MUST ensure that redaction does\n   not cause the agent to produce incorrect or harmful downstream\n   actions due to missing context.<a href=\"#section-10.3-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"sect-10.4\">\n<section id=\"section-10.4\">\n        <h3 id=\"name-registry-data-retention\">\n<a href=\"#section-10.4\" class=\"section-number selfRef\">10.4. </a><a href=\"#name-registry-data-retention\" class=\"section-name selfRef\">Registry Data Retention</a>\n        </h3>\n<p id=\"section-10.4-1\">\n   Registry operators MUST publish a data retention policy.  Agent\n   Records for revoked agents SHOULD be pseudonymized after the\n   minimum retention period required for audit log verification.<a href=\"#section-10.4-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n</section>\n</div>\n<div id=\"sect-11\">\n<section id=\"section-11\">\n      <h2 id=\"name-iana-considerations\">\n<a href=\"#section-11\" class=\"section-number selfRef\">11. </a><a href=\"#name-iana-considerations\" class=\"section-name selfRef\">IANA Considerations</a>\n      </h2>\n<div id=\"sect-11.1\">\n<section id=\"section-11.1\">\n        <h3 id=\"name-http-header-field\">\n<a href=\"#section-11.1\" class=\"section-number selfRef\">11.1. </a><a href=\"#name-http-header-field\" class=\"section-name selfRef\">HTTP Header Field</a>\n        </h3>\n<p id=\"section-11.1-1\">\n   This document defines the \"AIP-Token\" HTTP header field.  Registration\n   is requested in the \"Permanent Message Header Field Names\" registry\n   per <span>[<a href=\"#RFC3864\" class=\"cite xref\">RFC3864</a>]</span>.  The header field name is \"AIP-Token\", applicable\n   protocol is \"http\", status is \"standard\", the author/change\n   controller is the IETF, and the specification document is this\n   document (<a href=\"#sect-7.1\" class=\"auto internal xref\">Section 7.1</a>).<a href=\"#section-11.1-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"sect-11.2\">\n<section id=\"section-11.2\">\n        <h3 id=\"name-media-type\">\n<a href=\"#section-11.2\" class=\"section-number selfRef\">11.2. </a><a href=\"#name-media-type\" class=\"section-name selfRef\">Media Type</a>\n        </h3>\n<p id=\"section-11.2-1\">\n   The media type \"application/aip+json\" is requested for AIP Tokens\n   serialized as standalone JSON documents.  The type name is\n   \"application\", the subtype name is \"aip+json\", the required\n   parameter is \"version\" (value \"1\"), encoding considerations are\n   UTF-8, and security considerations are described in <a href=\"#sect-9\" class=\"auto internal xref\">Section 9</a>.<a href=\"#section-11.2-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n</section>\n</div>\n<section id=\"section-12\">\n      <h2 id=\"name-references\">\n<a href=\"#section-12\" class=\"section-number selfRef\">12. </a><a href=\"#name-references\" class=\"section-name selfRef\">References</a>\n      </h2>\n<section id=\"section-12.1\">\n        <h3 id=\"name-normative-references\">\n<a href=\"#section-12.1\" class=\"section-number selfRef\">12.1. </a><a href=\"#name-normative-references\" class=\"section-name selfRef\">Normative References</a>\n        </h3>\n<dl class=\"references\">\n<dt id=\"RFC2119\">[RFC2119]</dt>\n        <dd>\n<span class=\"refAuthor\">Bradner, S.</span>, <span class=\"refTitle\">\"Key words for use in RFCs to Indicate Requirement Levels\"</span>, <span class=\"seriesInfo\">BCP 14</span>, <span class=\"seriesInfo\">RFC 2119</span>, <span class=\"seriesInfo\">DOI 10.17487/RFC2119</span>, <time datetime=\"1997-03\" class=\"refDate\">March 1997</time>, <span>&lt;<a href=\"https://www.rfc-editor.org/info/rfc2119\">https://www.rfc-editor.org/info/rfc2119</a>&gt;</span>. </dd>\n<dd class=\"break\"></dd>\n<dt id=\"RFC8174\">[RFC8174]</dt>\n        <dd>\n<span class=\"refAuthor\">Leiba, B.</span>, <span class=\"refTitle\">\"Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words\"</span>, <span class=\"seriesInfo\">BCP 14</span>, <span class=\"seriesInfo\">RFC 8174</span>, <span class=\"seriesInfo\">DOI 10.17487/RFC8174</span>, <time datetime=\"2017-05\" class=\"refDate\">May 2017</time>, <span>&lt;<a href=\"https://www.rfc-editor.org/info/rfc8174\">https://www.rfc-editor.org/info/rfc8174</a>&gt;</span>. </dd>\n<dd class=\"break\"></dd>\n<dt id=\"RFC8032\">[RFC8032]</dt>\n        <dd>\n<span class=\"refAuthor\">Josefsson, S.</span> and <span class=\"refAuthor\">I. Liusvaara</span>, <span class=\"refTitle\">\"Edwards-Curve Digital Signature Algorithm (EdDSA)\"</span>, <span class=\"seriesInfo\">RFC 8032</span>, <span class=\"seriesInfo\">DOI 10.17487/RFC8032</span>, <time datetime=\"2017-01\" class=\"refDate\">January 2017</time>, <span>&lt;<a href=\"https://www.rfc-editor.org/info/rfc8032\">https://www.rfc-editor.org/info/rfc8032</a>&gt;</span>. </dd>\n<dd class=\"break\"></dd>\n<dt id=\"RFC8446\">[RFC8446]</dt>\n        <dd>\n<span class=\"refAuthor\">Rescorla, E.</span>, <span class=\"refTitle\">\"The Transport Layer Security (TLS) Protocol Version 1.3\"</span>, <span class=\"seriesInfo\">RFC 8446</span>, <span class=\"seriesInfo\">DOI 10.17487/RFC8446</span>, <time datetime=\"2018-08\" class=\"refDate\">August 2018</time>, <span>&lt;<a href=\"https://www.rfc-editor.org/info/rfc8446\">https://www.rfc-editor.org/info/rfc8446</a>&gt;</span>. </dd>\n<dd class=\"break\"></dd>\n<dt id=\"RFC5246\">[RFC5246]</dt>\n        <dd>\n<span class=\"refAuthor\">Dierks, T.</span> and <span class=\"refAuthor\">E. Rescorla</span>, <span class=\"refTitle\">\"The Transport Layer Security (TLS) Protocol Version 1.2\"</span>, <span class=\"seriesInfo\">RFC 5246</span>, <span class=\"seriesInfo\">DOI 10.17487/RFC5246</span>, <time datetime=\"2008-08\" class=\"refDate\">August 2008</time>, <span>&lt;<a href=\"https://www.rfc-editor.org/info/rfc5246\">https://www.rfc-editor.org/info/rfc5246</a>&gt;</span>. </dd>\n<dd class=\"break\"></dd>\n<dt id=\"RFC4648\">[RFC4648]</dt>\n        <dd>\n<span class=\"refAuthor\">Josefsson, S.</span>, <span class=\"refTitle\">\"The Base16, Base32, and Base64 Data Encodings\"</span>, <span class=\"seriesInfo\">RFC 4648</span>, <span class=\"seriesInfo\">DOI 10.17487/RFC4648</span>, <time datetime=\"2006-10\" class=\"refDate\">October 2006</time>, <span>&lt;<a href=\"https://www.rfc-editor.org/info/rfc4648\">https://www.rfc-editor.org/info/rfc4648</a>&gt;</span>. </dd>\n<dd class=\"break\"></dd>\n<dt id=\"RFC4122\">[RFC4122]</dt>\n        <dd>\n<span class=\"refAuthor\">Leach, P.</span>, <span class=\"refAuthor\">Mealling, M.</span>, and <span class=\"refAuthor\">R. Salz</span>, <span class=\"refTitle\">\"A Universally Unique IDentifier (UUID) URN Namespace\"</span>, <span class=\"seriesInfo\">RFC 4122</span>, <span class=\"seriesInfo\">DOI 10.17487/RFC4122</span>, <time datetime=\"2005-07\" class=\"refDate\">July 2005</time>, <span>&lt;<a href=\"https://www.rfc-editor.org/info/rfc4122\">https://www.rfc-editor.org/info/rfc4122</a>&gt;</span>. </dd>\n<dd class=\"break\"></dd>\n<dt id=\"RFC6749\">[RFC6749]</dt>\n        <dd>\n<span class=\"refAuthor\">Hardt, D., Ed.</span>, <span class=\"refTitle\">\"The OAuth 2.0 Authorization Framework\"</span>, <span class=\"seriesInfo\">RFC 6749</span>, <span class=\"seriesInfo\">DOI 10.17487/RFC6749</span>, <time datetime=\"2012-10\" class=\"refDate\">October 2012</time>, <span>&lt;<a href=\"https://www.rfc-editor.org/info/rfc6749\">https://www.rfc-editor.org/info/rfc6749</a>&gt;</span>. </dd>\n<dd class=\"break\"></dd>\n<dt id=\"RFC9106\">[RFC9106]</dt>\n        <dd>\n<span class=\"refAuthor\">Biryukov, A.</span>, <span class=\"refAuthor\">Dinu, D.</span>, <span class=\"refAuthor\">Khovratovich, D.</span>, and <span class=\"refAuthor\">S. Josefsson</span>, <span class=\"refTitle\">\"Argon2 Memory-Hard Function for Password Hashing and Proof-of-Work Applications\"</span>, <span class=\"seriesInfo\">RFC 9106</span>, <span class=\"seriesInfo\">DOI 10.17487/RFC9106</span>, <time datetime=\"2021-09\" class=\"refDate\">September 2021</time>, <span>&lt;<a href=\"https://www.rfc-editor.org/info/rfc9106\">https://www.rfc-editor.org/info/rfc9106</a>&gt;</span>. </dd>\n<dd class=\"break\"></dd>\n<dt id=\"JSON-RPC\">[JSON-RPC]</dt>\n        <dd>\n<span class=\"refAuthor\">JSON-RPC Working Group</span>, <span class=\"refTitle\">\"JSON-RPC 2.0 Specification\"</span>, <time datetime=\"2013-01\" class=\"refDate\">January 2013</time>. </dd>\n<dd class=\"break\"></dd>\n<dt id=\"RFC3864\">[RFC3864]</dt>\n      <dd>\n<span class=\"refAuthor\">Klyne, G.</span>, <span class=\"refAuthor\">Nottingham, M.</span>, and <span class=\"refAuthor\">J. Mogul</span>, <span class=\"refTitle\">\"Registration Procedures for Message Header Fields\"</span>, <span class=\"seriesInfo\">BCP 90</span>, <span class=\"seriesInfo\">RFC 3864</span>, <span class=\"seriesInfo\">DOI 10.17487/RFC3864</span>, <time datetime=\"2004-09\" class=\"refDate\">September 2004</time>, <span>&lt;<a href=\"https://www.rfc-editor.org/info/rfc3864\">https://www.rfc-editor.org/info/rfc3864</a>&gt;</span>. </dd>\n<dd class=\"break\"></dd>\n</dl>\n</section>\n<section id=\"section-12.2\">\n        <h3 id=\"name-informative-references\">\n<a href=\"#section-12.2\" class=\"section-number selfRef\">12.2. </a><a href=\"#name-informative-references\" class=\"section-name selfRef\">Informative References</a>\n        </h3>\n<dl class=\"references\">\n<dt id=\"MCP\">[MCP]</dt>\n        <dd>\n<span class=\"refAuthor\">Anthropic</span>, <span class=\"refTitle\">\"Model Context Protocol\"</span>, <time datetime=\"2024-11\" class=\"refDate\">November 2024</time>. </dd>\n<dd class=\"break\"></dd>\n<dt id=\"OIDC\">[OIDC]</dt>\n        <dd>\n<span class=\"refAuthor\">Sakimura, N. et al.</span>, <span class=\"refTitle\">\"OpenID Connect Core 1.0\"</span>, <time datetime=\"2014-11\" class=\"refDate\">November 2014</time>. </dd>\n<dd class=\"break\"></dd>\n<dt id=\"SPIFFE\">[SPIFFE]</dt>\n        <dd>\n<span class=\"refAuthor\">CNCF SPIFFE Project</span>, <span class=\"refTitle\">\"SPIFFE: Secure Production Identity Framework for Everyone\"</span>, <time datetime=\"2024\" class=\"refDate\">2024</time>. </dd>\n<dd class=\"break\"></dd>\n<dt id=\"JSONL\">[JSONL]</dt>\n      <dd>\n<span class=\"refAuthor\">Granger, N.</span>, <span class=\"refTitle\">\"JSON Lines\"</span>, <time datetime=\"2014\" class=\"refDate\">2014</time>. </dd>\n<dd class=\"break\"></dd>\n</dl>\n</section>\n</section>\n<div id=\"sect-a\">\n<section id=\"appendix-A\">\n      <h2 id=\"name-example-agentpolicy\">\n<a href=\"#appendix-A\" class=\"section-number selfRef\">Appendix A. </a><a href=\"#name-example-agentpolicy\" class=\"section-name selfRef\">Example AgentPolicy</a>\n      </h2>\n<p id=\"appendix-A-1\">\n   A complete AgentPolicy for a research assistant agent.<a href=\"#appendix-A-1\" class=\"pilcrow\">¶</a></p>\n<div class=\"sourcecode\" id=\"appendix-A-2\">\n<pre>&lt;CODE BEGINS&gt;\n\n   agentId: reg.agentidentityprotocol.io/01933f4a-9b2c-7d8e-af01\n   mode: enforce\n\n   tools:\n     - allowed:\n       - read_file\n       - list_directory\n       - web_search\n       - git_status\n       - write_file\n       - create_issue\n     - rules:\n       - tool: write_file\n         action: ask\n       - tool: exec_command\n         action: block\n       - tool: delete_file\n         action: block\n       - tool: create_issue\n         action: ask\n\n   dlp:\n     - name: aws-access-key\n       regex: \"AKIA[A-Z0-9]{16}\"\n       action: block\n       scope: both\n     - name: private-key-pem\n       regex: \"-----BEGIN [A-Z ]* PRIVATE KEY-----\"\n       action: block\n       scope: both\n     - name: generic-token\n       regex: \"[a-zA-Z0-9_\\\\-]{40,}\"\n       action: redact\n       scope: response\n\n   hitl:\n     - approvers:\n       - ops@acme.example\n     - timeout_seconds: 300  # wait 5 minutes\n     - on_timeout: deny\n\n\n&lt;CODE ENDS&gt;</pre><a href=\"#appendix-A-2\" class=\"pilcrow\">¶</a>\n</div>\n</section>\n</div>\n<div id=\"sect-b\">\n<section id=\"appendix-B\">\n      <h2 id=\"name-example-aip-token\">\n<a href=\"#appendix-B\" class=\"section-number selfRef\">Appendix B. </a><a href=\"#name-example-aip-token\" class=\"section-name selfRef\">Example AIP Token</a>\n      </h2>\n<p id=\"appendix-B-1\">\n   An AIP Token for a read_file call, shown before base64url encoding\n   for transport in the AIP-Token header.<a href=\"#appendix-B-1\" class=\"pilcrow\">¶</a></p>\n<div class=\"alignLeft art-text artwork\" id=\"appendix-B-2\">\n<pre>\n{\n  \"aipVersion\": \"1\",\n  \"agentId\": \"reg.agentidentityprotocol.io/01933f4a-9b2c-7d8e-af01\",\n  \"tool\": \"read_file\",\n  \"argumentsHash\": \"e3b0c44298fc1c149afb4c8996fb92427ae41e4649b934ca495991b7852b855\",\n  \"nonce\": \"a3f8b2c1d4e5f607a8b9c0d1e2f3a4b5\",\n  \"timestamp\": \"2026-02-24T14:30:00Z\",\n  \"signature\": \"TUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFOQ0E...\"\n}\n</pre><a href=\"#appendix-B-2\" class=\"pilcrow\">¶</a>\n</div>\n</section>\n</div>\n<div id=\"sect-c\">\n<section id=\"appendix-C\">\n      <h2 id=\"name-error-code-reference\">\n<a href=\"#appendix-C\" class=\"section-number selfRef\">Appendix C. </a><a href=\"#name-error-code-reference\" class=\"section-name selfRef\">Error Code Reference</a>\n      </h2>\n<span class=\"break\"></span><dl class=\"dlParallel\" id=\"appendix-C-1\">\n        <dt id=\"appendix-C-1.1\">AIP-E001</dt>\n        <dd style=\"margin-left: 5.0em\" id=\"appendix-C-1.2\">\n          <p id=\"appendix-C-1.2.1\">\n Tool not in allowlist<a href=\"#appendix-C-1.2.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"appendix-C-1.2.2\">\n The requested tool is not listed in tools.allowed and\n             the proxy is in enforce mode.<a href=\"#appendix-C-1.2.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"appendix-C-1.3\">AIP-E002</dt>\n        <dd style=\"margin-left: 5.0em\" id=\"appendix-C-1.4\">\n          <p id=\"appendix-C-1.4.1\">\n Argument validation failed<a href=\"#appendix-C-1.4.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"appendix-C-1.4.2\">\n A tool argument failed a pattern or maxLength check\n             defined in tools.rules.args.<a href=\"#appendix-C-1.4.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"appendix-C-1.5\">AIP-E003</dt>\n        <dd style=\"margin-left: 5.0em\" id=\"appendix-C-1.6\">\n          <p id=\"appendix-C-1.6.1\">\n Tool unconditionally blocked<a href=\"#appendix-C-1.6.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"appendix-C-1.6.2\">\n The tool has action: block in tools.rules.<a href=\"#appendix-C-1.6.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"appendix-C-1.7\">AIP-E004</dt>\n        <dd style=\"margin-left: 5.0em\" id=\"appendix-C-1.8\">\n          <p id=\"appendix-C-1.8.1\">\n Nonce replay<a href=\"#appendix-C-1.8.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"appendix-C-1.8.2\">\n The nonce in the AIP Token was already seen within the\n             600-second cache window.<a href=\"#appendix-C-1.8.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"appendix-C-1.9\">AIP-E005</dt>\n        <dd style=\"margin-left: 5.0em\" id=\"appendix-C-1.10\">\n          <p id=\"appendix-C-1.10.1\">\n Timestamp out of range<a href=\"#appendix-C-1.10.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"appendix-C-1.10.2\">\n The token timestamp is more than 300 seconds old or more\n             than 30 seconds in the future.<a href=\"#appendix-C-1.10.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"appendix-C-1.11\">AIP-E008</dt>\n        <dd style=\"margin-left: 5.0em\" id=\"appendix-C-1.12\">\n          <p id=\"appendix-C-1.12.1\">\n DLP violation<a href=\"#appendix-C-1.12.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"appendix-C-1.12.2\">\n A DLP rule with action: block matched content in the\n             request or response.<a href=\"#appendix-C-1.12.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"appendix-C-1.13\">AIP-E010</dt>\n        <dd style=\"margin-left: 5.0em\" id=\"appendix-C-1.14\">\n          <p id=\"appendix-C-1.14.1\">\n AIP Token missing<a href=\"#appendix-C-1.14.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"appendix-C-1.14.2\">\n The tool call arrived with no AIP-Token header or _aip\n             field.<a href=\"#appendix-C-1.14.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"appendix-C-1.15\">AIP-E011</dt>\n        <dd style=\"margin-left: 5.0em\" id=\"appendix-C-1.16\">\n          <p id=\"appendix-C-1.16.1\">\n Agent ID not found<a href=\"#appendix-C-1.16.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"appendix-C-1.16.2\">\n The agentId in the token could not be resolved at the\n             registry.<a href=\"#appendix-C-1.16.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"appendix-C-1.17\">AIP-E012</dt>\n        <dd style=\"margin-left: 5.0em\" id=\"appendix-C-1.18\">\n          <p id=\"appendix-C-1.18.1\">\n Agent revoked<a href=\"#appendix-C-1.18.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"appendix-C-1.18.2\">\n The Agent Record for this agentId has status: revoked.<a href=\"#appendix-C-1.18.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"appendix-C-1.19\">AIP-E013</dt>\n        <dd style=\"margin-left: 5.0em\" id=\"appendix-C-1.20\">\n          <p id=\"appendix-C-1.20.1\">\n Signature verification failed<a href=\"#appendix-C-1.20.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"appendix-C-1.20.2\">\n The key signature did not verify against the public\n             key in the Agent Record.<a href=\"#appendix-C-1.20.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"appendix-C-1.21\">AIP-E015</dt>\n        <dd style=\"margin-left: 5.0em\" id=\"appendix-C-1.22\">\n          <p id=\"appendix-C-1.22.1\">\n HITL approval denied<a href=\"#appendix-C-1.22.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"appendix-C-1.22.2\">\n A human approver explicitly denied the held call.<a href=\"#appendix-C-1.22.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"appendix-C-1.23\">AIP-E016</dt>\n        <dd style=\"margin-left: 5.0em\" id=\"appendix-C-1.24\">\n          <p id=\"appendix-C-1.24.1\">\n HITL timed out<a href=\"#appendix-C-1.24.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"appendix-C-1.24.2\">\n The HITL hold expired and on_timeout is set to deny.<a href=\"#appendix-C-1.24.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n        <dd class=\"break\"></dd>\n<dt id=\"appendix-C-1.25\">AIP-E099</dt>\n        <dd style=\"margin-left: 5.0em\" id=\"appendix-C-1.26\">\n          <p id=\"appendix-C-1.26.1\">\n Internal proxy error<a href=\"#appendix-C-1.26.1\" class=\"pilcrow\">¶</a></p>\n<p id=\"appendix-C-1.26.2\">\n An unexpected error occurred in the proxy.  See proxy\n             logs for details.<a href=\"#appendix-C-1.26.2\" class=\"pilcrow\">¶</a></p>\n</dd>\n      <dd class=\"break\"></dd>\n</dl>\n</section>\n</div>\n<div id=\"authors-addresses\">\n<section id=\"appendix-D\">\n      <h2 id=\"name-authors-addresses\">\n<a href=\"#name-authors-addresses\" class=\"section-name selfRef\">Authors' Addresses</a>\n      </h2>\n<address class=\"vcard\">\n        <div dir=\"auto\" class=\"left\"><span class=\"fn nameRole\">James Cao</span></div>\n<div dir=\"auto\" class=\"left\"><span class=\"org\">Montcao</span></div>\n<div class=\"email\">\n<span>Email:</span>\n<a href=\"mailto:james@montcao.com\" class=\"email\">james@montcao.com</a>\n</div>\n<div class=\"url\">\n<span>URI:</span>\n<a href=\"https://agentidentityprotocol.io\" class=\"url\">https://agentidentityprotocol.io</a>\n</div>\n</address>\n<address class=\"vcard\">\n        <div dir=\"auto\" class=\"left\"><span class=\"fn nameRole\">Carlos Eduardo Arango Gutierrez</span></div>\n<div dir=\"auto\" class=\"left\"><span class=\"org\">NVIDIA</span></div>\n<div class=\"email\">\n<span>Email:</span>\n<a href=\"mailto:eduardoa@nvidia.com\" class=\"email\">eduardoa@nvidia.com</a>\n</div>\n<div class=\"url\">\n<span>URI:</span>\n<a href=\"https://agentidentityprotocol.io\" class=\"url\">https://agentidentityprotocol.io</a>\n</div>\n</address>\n</section>\n</div>\n</div>\n\n                    </div>\n                \n            </div>\n            <div class=\"d-print-none col-md-3 bg-light-subtle collapse show\" id=\"sidebar\">\n                <div class=\"position-fixed border-start sidebar overflow-scroll overscroll-none no-scrollbar\">\n                    <div class=\"d-flex flex-column vh-100 pt-2 pt-lg-3 ps-3 pl-md-2 pl-lg-3\">\n                        <div>\n                            <a class=\"btn btn-primary btn-sm\" href=\"/doc/draft-aip-agent-identity-protocol/\">Datatracker</a>\n                            <p class=\"fw-bold pt-2\">\n                                \n                                    draft-aip-agent-identity-protocol-00\n                                \n                                <br>\n                                \n\n\n\n\n\n\n\n    <span class=\"text-success\">Active Internet-Draft</span>\n    (individual)\n    \n\n                            </p>\n                        </div>\n                        \n                        <ul class=\"nav nav-tabs nav-fill small me-2\" role=\"tablist\">\n                            <li class=\"nav-item\" role=\"presentation\" title=\"Document information\">\n                                <button class=\"nav-link px-2\"\n                                        id=\"docinfo-tab\"\n                                        data-bs-toggle=\"tab\"\n                                        data-bs-target=\"#docinfo-tab-pane\"\n                                        type=\"button\"\n                                        role=\"tab\"\n                                        aria-controls=\"docinfo-tab-pane\"\n                                        aria-selected=\"true\">\n                                    <i class=\"bi bi-info-circle\"></i><span class=\"d-none d-md-block d-xl-inline ms-xl-1\">Info</span>\n                                </button>\n                            </li>\n                            <li class=\"nav-item\" role=\"presentation\" title=\"Table of contents\">\n                                <button class=\"nav-link px-2\"\n                                        id=\"toc-tab\"\n                                        data-bs-toggle=\"tab\"\n                                        data-bs-target=\"#toc-tab-pane\"\n                                        type=\"button\"\n                                        role=\"tab\"\n                                        aria-controls=\"toc-tab-pane\"\n                                        aria-selected=\"false\">\n                                    <i class=\"bi bi-list-ol\"></i><span class=\"d-none d-md-block d-xl-inline ms-xl-1\">Contents</span>\n                                </button>\n                            </li>\n                            <li class=\"nav-item\" role=\"presentation\" title=\"Preferences\">\n                                <button class=\"nav-link px-2\"\n                                        id=\"pref-tab\"\n                                        data-bs-toggle=\"tab\"\n                                        data-bs-target=\"#pref-tab-pane\"\n                                        type=\"button\"\n                                        role=\"tab\"\n                                        aria-controls=\"pref-tab-pane\"\n                                        aria-selected=\"false\">\n                                    <i class=\"bi bi-gear\"></i><span class=\"d-none d-md-block d-xl-inline ms-xl-1\">Prefs</span>\n                                </button>\n                            </li>\n                        </ul>\n                        <div class=\"overflow-auto tab-content pt-2 me-2\">\n                            <div class=\"tab-pane\"\n                                 id=\"docinfo-tab-pane\"\n                                 role=\"tabpanel\"\n                                 aria-labelledby=\"docinfo-tab\"\n                                 tabindex=\"0\">\n                                <table class=\"table table-sm table-borderless\">\n                                    \n\n\n\n\n\n\n\n<tbody class=\"meta align-top \">\n    <tr>\n        <th scope=\"row\">Document</th>\n        <th scope=\"row\">Document type</th>\n        <td class=\"edit\"></td>\n        <td>\n            \n\n\n\n\n\n\n\n    <span class=\"text-success\">Active Internet-Draft</span>\n    (individual)\n    \n\n            \n            \n            \n                \n\n\n\n\n    <div class=\"alert alert-warning small p-2 mt-2\" role=\"alert\">\n        This document is an Internet-Draft (I-D).\n        Anyone may submit an I-D to the IETF.\n        This I-D is <strong>not endorsed by the IETF</strong> and has <strong>no formal standing</strong> in the\n        <a href=\"/doc/rfc2026/\">IETF standards process</a>.\n    </div>\n\n\n            \n        </td>\n    </tr>\n    \n        <tr>\n            <td></td>\n            <th scope=\"row\">Select version</th>\n            <td class=\"edit\"></td>\n            <td>\n                \n\n\n\n    <ul class=\"revision-list pagination pagination-sm text-center flex-wrap my-0\">\n        \n            \n                 \n                    <li class=\"page-item active\">\n                        <a class=\"page-link\"\n                        href=\"/doc/html/draft-aip-agent-identity-protocol-00\"\n                        >\n                            00\n                        </a>\n                    </li>\n                \n            \n            \n        \n    </ul>\n\n            </td>\n        </tr>\n        \n    \n    <tr>\n        <td></td>\n        <th scope=\"row\">Authors</th>\n        <td class=\"edit\">\n            \n        </td>\n        <td>\n            \n            \n                <span ><a \n           title=\"Datatracker profile of James Cao\"\n            href=\"/person/james@montcao.com\" >James Cao</a> <a \n               href=\"mailto:james%40montcao.com\"\n               aria-label=\"Compose email to james@montcao.com\"\n               title=\"Compose email to james@montcao.com\">\n                <i class=\"bi bi-envelope\"></i></a></span>,\n            \n                <span ><a \n           title=\"Datatracker profile of Carlos Eduardo Arango Gutierrez\"\n            href=\"/person/eduardoa@nvidia.com\" >Carlos Eduardo Arango Gutierrez</a> <a \n               href=\"mailto:eduardoa%40nvidia.com\"\n               aria-label=\"Compose email to eduardoa@nvidia.com\"\n               title=\"Compose email to eduardoa@nvidia.com\">\n                <i class=\"bi bi-envelope\"></i></a></span>\n            \n            \n                <br>\n                <a class=\"btn btn-primary btn-sm mt-1\" href=\"mailto:draft-aip-agent-identity-protocol@ietf.org?subject=draft-aip-agent-identity-protocol\" title=\"Send email to the document authors\">Email authors</a>\n            \n        </td>\n    </tr>\n    \n    \n        \n        \n        \n    \n    <tr>\n        <td></td>\n        <th scope=\"row\">\n            RFC stream\n        </th>\n        <td class=\"edit\">\n            \n        </td>\n        <td class=\"text-body-secondary\">\n            \n                (None)\n            \n        </td>\n    </tr>\n    \n        <tr>\n            <td></td>\n            <th scope=\"row\">\n                Intended RFC status\n            </th>\n            <td class=\"edit\">\n                \n            </td>\n            <td>\n                \n                    <span class=\"text-body-secondary\">\n                        (None)\n                    </span>\n                \n            </td>\n        </tr>\n    \n    <tr>\n        <td></td>\n        <th scope=\"row\">\n            Other formats\n        </th>\n        <td class=\"edit\">\n        </td>\n        <td>\n            \n                \n    <div class=\"buttonlist\">\n    \n        \n        <a class=\"btn btn-primary btn-sm\"\n          \n          target=\"_blank\"\n          href=\"https://www.ietf.org/archive/id/draft-aip-agent-identity-protocol-00.txt\">\n            \n                <i class=\"bi bi-file-text\"></i> txt\n            \n        </a>\n        \n    \n        \n        <a class=\"btn btn-primary btn-sm\"\n          \n          target=\"_blank\"\n          href=\"https://www.ietf.org/archive/id/draft-aip-agent-identity-protocol-00.html\">\n            \n                <i class=\"bi bi-file-code\"></i> html\n            \n        </a>\n        \n    \n        \n        <a class=\"btn btn-primary btn-sm\"\n          \n          target=\"_blank\"\n          href=\"https://www.ietf.org/archive/id/draft-aip-agent-identity-protocol-00.xml\">\n            \n                <i class=\"bi bi-file-code\"></i> xml\n            \n        </a>\n        \n    \n        \n    \n        \n        <a class=\"btn btn-primary btn-sm\"\n          \n          target=\"_blank\"\n          href=\"/doc/draft-aip-agent-identity-protocol/00/bibtex/\">\n            \n                <i class=\"bi bi-file-ruled\"></i> bibtex\n            \n        </a>\n        \n    \n        \n        <a class=\"btn btn-primary btn-sm\"\n          \n          target=\"_blank\"\n          href=\"/doc/bibxml3/draft-aip-agent-identity-protocol-00.xml\">\n            \n                <i class=\"bi bi-file-code\"></i> bibxml\n            \n        </a>\n        \n    \n</div>\n\n            \n        </td>\n    </tr>\n    \n    \n        \n    \n</tbody>\n                                </table>\n                                <a class=\"btn btn-sm btn-warning mb-3\"\n                                target=\"_blank\"\n                                href=\"https://github.com/ietf-tools/datatracker/issues/new/choose\">\n                                    Report a datatracker bug\n                                    <i class=\"bi bi-bug\"></i>\n                                </a>\n                            </div>\n                            <div class=\"tab-pane mb-5\"\n                                 id=\"toc-tab-pane\"\n                                 role=\"tabpanel\"\n                                 aria-labelledby=\"toc-tab\"\n                                 tabindex=\"0\">\n                                <nav class=\"nav nav-pills flex-column small\" id=\"toc-nav\">\n                                </nav>\n                            </div>\n                            <div class=\"tab-pane mb-5 small\"\n                                 id=\"pref-tab-pane\"\n                                 role=\"tabpanel\"\n                                 aria-labelledby=\"pref-tab\"\n                                 tabindex=\"0\">\n                                <label class=\"form-label fw-bold mb-2\">Show sidebar by default</label>\n                                <div class=\"btn-group-vertical btn-group-sm d-flex\" role=\"group\">\n                                    <input type=\"radio\" class=\"btn-check\" name=\"sidebar\" id=\"on-radio\">\n                                    <label class=\"btn btn-outline-primary\" for=\"on-radio\">Yes</label>\n                                    <input type=\"radio\" class=\"btn-check\" name=\"sidebar\" id=\"off-radio\">\n                                    <label class=\"btn btn-outline-primary\" for=\"off-radio\">No</label>\n                                </div>\n                                <label class=\"form-label fw-bold mt-4 mb-2\">Tab to show by default</label>\n                                <div class=\"btn-group-vertical btn-group-sm d-flex\" role=\"group\">\n                                    <input type=\"radio\" class=\"btn-check\" name=\"deftab\" id=\"docinfo-radio\">\n                                    <label class=\"btn btn-outline-primary\" for=\"docinfo-radio\">\n                                        <i class=\"bi bi-info-circle me-1\"></i>Info\n                                    </label>\n                                    <input type=\"radio\" class=\"btn-check\" name=\"deftab\" id=\"toc-radio\">\n                                    <label class=\"btn btn-outline-primary\" for=\"toc-radio\">\n                                        <i class=\"bi bi-list-ol me-1\"></i>Contents\n                                    </label>\n                                </div>\n                                <label class=\"form-label fw-bold mt-4 mb-2\">HTMLization configuration</label>\n                                <div class=\"btn-group-vertical btn-group-sm d-flex\" role=\"group\">\n                                    <input type=\"radio\" class=\"btn-check\" name=\"htmlconf\" id=\"txt-radio\">\n                                    <label class=\"btn btn-outline-primary\" for=\"txt-radio\" title=\"This is the traditional HTMLization method.\">\n                                        <i class=\"bi bi-badge-sd me-1\"></i>HTMLize the plaintext\n                                    </label>\n                                    <input type=\"radio\" class=\"btn-check\" name=\"htmlconf\" id=\"html-radio\">\n                                    <label class=\"btn btn-outline-primary\" for=\"html-radio\" title=\"This is the modern HTMLization method.\">\n                                        <i class=\"bi bi-badge-hd me-1\"></i>Plaintextify the HTML\n                                    </label>\n                                </div>\n                                <label class=\"form-label fw-bold mt-4 mb-2\" for=\"ptsize\">Maximum font size</label>\n                                <input type=\"range\" class=\"form-range\" min=\"7\" max=\"16\" id=\"ptsize\" oninput=\"ptdemo.value = ptsize.value\">\n                                <label class=\"form-label fw-bold mt-4 mb-2\">Page dependencies</label>\n                                <div class=\"btn-group-vertical btn-group-sm d-flex\" role=\"group\">\n                                    <input type=\"radio\" class=\"btn-check\" name=\"pagedeps\" id=\"inline-radio\">\n                                    <label class=\"btn btn-outline-primary\" for=\"inline-radio\" title=\"Generate larger, standalone web pages that do not require network access to render.\">\n                                        <i class=\"bi bi-box me-1\"></i>Inline\n                                    </label>\n                                    <input type=\"radio\" class=\"btn-check\" name=\"pagedeps\" id=\"reference-radio\">\n                                    <label class=\"btn btn-outline-primary\" for=\"reference-radio\" title=\"Generate regular web pages that require network access to render.\">\n                                        <i class=\"bi bi-link-45deg me-1\"></i>Reference\n                                    </label>\n                                </div>\n                                <label class=\"form-label fw-bold mt-4 mb-2\">Citation links</label>\n                                <div class=\"btn-group-vertical btn-group-sm d-flex\" role=\"group\">\n                                    <input type=\"radio\" class=\"btn-check\" name=\"reflinks\" id=\"refsection-radio\">\n                                    <label class=\"btn btn-outline-primary\" for=\"refsection-radio\" title=\"Citation links go to the reference section.\">\n                                        <i class=\"bi bi-arrow-clockwise\"></i> Go to reference section\n                                    </label>\n                                    <input type=\"radio\" class=\"btn-check\" name=\"reflinks\" id=\"citation-radio\">\n                                    <label class=\"btn btn-outline-primary\" for=\"citation-radio\" title=\"Citation links go directly to the cited document.\">\n                                        <i class=\"bi bi-link-45deg me-1\"></i>Go to linked document\n                                    </label>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    \n<script>\n  var _paq = window._paq || [];\n  \n  _paq.push(['disableCookies']);\n  _paq.push(['trackPageView']);\n  _paq.push(['enableLinkTracking']);\n  (function() {\n    var u=\"//analytics.ietf.org/\";\n    _paq.push(['setTrackerUrl', u+'matomo.php']);\n    _paq.push(['setSiteId', 7]);\n    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n    g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);\n  })();\n</script>\n<noscript><p><img src=\"//analytics.ietf.org/matomo.php?idsite=7\" style=\"border:0;\" alt=\"\" /></p></noscript>\n\n    <script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML=\"window.__CF$cv$params={r:'a35180acdb13235b',t:'MTc4ODQwNDQxMA=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);\";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body>\n</html>\n","snapshot_chars":150318,"live_check":"changed"}]}