{
  "title": "OpenID Connect para Agentes (OIDC-A) 1.0 Propuesta",
  "excerpt": "Propuesta técnica para extender OpenID Connect Core 1.0 para proporcionar un marco para representar, autenticar y autorizar agentes basados en LLM dentro del ecosistema OAuth 2.0.",
  "content_html": "<p><em>Este documento propone una extensión estándar a OpenID Connect para representar y verificar la identidad de agentes basados en LLM. Integra la propuesta central con marcos detallados para verificación, atestación y cadenas de delegación.</em></p>\n\n<h2>Resumen</h2>\n\n<p>OpenID Connect para Agentes (OIDC-A) 1.0 es una extensión de OpenID Connect Core 1.0 que proporciona un marco para representar, autenticar y autorizar agentes basados en LLM dentro del ecosistema OAuth 2.0. Esta especificación define claims estándar, endpoints y protocolos para establecer la identidad del agente, verificar la atestación del agente, representar cadenas de delegación y habilitar autorización granular basada en atributos del agente.</p>\n\n<h2>1. Introducción</h2>\n\n<h3>1.1 Justificación</h3>\n\n<p>A medida que los agentes basados en LLM se vuelven cada vez más prevalentes en los ecosistemas digitales, existe una necesidad creciente de métodos estandarizados para representar su identidad y gestionar su autorización. Los protocolos tradicionales OAuth 2.0 y OpenID Connect fueron diseñados principalmente para usuarios humanos y aplicaciones convencionales, careciendo de las construcciones necesarias para representar las características únicas de los agentes autónomos, tales como:</p>\n\n<ul>\n<li>Actuar en nombre de usuarios con diversos grados de autonomía</li>\n<li>Operar dentro de cadenas de delegación</li>\n<li>Poseer capacidades dinámicas basadas en sus modelos subyacentes</li>\n<li>Requerir atestación de su integridad y origen</li>\n</ul>\n\n<p>Esta especificación aborda estas brechas extendiendo OpenID Connect para proporcionar un marco integral para la identidad y autorización de agentes.</p>\n\n<h3>1.2 Terminología</h3>\n\n<p>Esta especificación utiliza los términos definidos en OAuth 2.0 [RFC6749], OpenID Connect Core 1.0, y los siguientes términos adicionales:</p>\n\n<ul>\n<li><strong>Agente</strong>: Una entidad de software basada en LLM capaz de acción autónoma o semi-autónoma basada en instrucciones en lenguaje natural.</li>\n<li><strong>Proveedor de Agente</strong>: La organización responsable de crear, entrenar y/o alojar el agente.</li>\n<li><strong>Modelo de Agente</strong>: El modelo LLM específico que impulsa el agente (por ejemplo, GPT-4, Claude 3).</li>\n<li><strong>Instancia de Agente</strong>: Una instancia en ejecución específica de un agente, típicamente asociada con una tarea o conversación particular.</li>\n<li><strong>Delegador</strong>: La entidad (típicamente un usuario humano) que delega autoridad a un agente para actuar en su nombre.</li>\n<li><strong>Cadena de Delegación</strong>: Una secuencia de pasos de delegación desde el usuario original a través de potencialmente múltiples agentes.</li>\n<li><strong>Atestación</strong>: Prueba criptográfica de la integridad, origen y/o propiedades de un agente.</li>\n<li><strong>Evidencia de Atestación</strong>: Estructura de datos que contiene la prueba utilizada para la atestación.</li>\n<li><strong>Relying Party (RP)</strong>: En este contexto, a menudo un Resource Server o aplicación Client que necesita verificar la identidad y autorización de un agente.</li>\n</ul>\n\n<h3>1.3 Visión General</h3>\n\n<p>OIDC-A extiende OpenID Connect mediante:</p>\n\n<ol>\n<li>Definir nuevos claims estándar para representar identidad, delegación y capacidades del agente.</li>\n<li>Especificar mecanismos y formatos para evidencia de atestación del agente.</li>\n<li>Establecer protocolos para representar y validar cadenas de delegación.</li>\n<li>Proporcionar mecanismos de descubrimiento para capacidades del agente y soporte de atestación.</li>\n<li>Definir marcos de autorización adecuados para casos de uso específicos de agentes.</li>\n<li>Introducir endpoints para verificación de atestación y descubrimiento de capacidades.</li>\n</ol>\n\n<h2>2. Claims de Identidad del Agente</h2>\n\n<h3>2.1 Claims Centrales de Identidad del Agente</h3>\n\n<p>Los siguientes claims DEBEN o DEBERÍAN incluirse en ID Tokens emitidos a o sobre agentes:</p>\n\n<table class=\"custom-table\">\n    <thead>\n        <tr>\n            <th>Claim</th>\n            <th>Tipo</th>\n            <th>Descripción</th>\n            <th>Requisito</th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            <td><code>agent_type</code></td>\n            <td>string</td>\n            <td>Identifica el tipo/clase de agente (por ejemplo, \"assistant\", \"retrieval\", \"coding\")</td>\n            <td>REQUERIDO</td>\n        </tr>\n        <tr>\n            <td><code>agent_model</code></td>\n            <td>string</td>\n            <td>Identifica el modelo específico (por ejemplo, \"gpt-4\", \"claude-3-opus\", \"gemini-pro\")</td>\n            <td>REQUERIDO</td>\n        </tr>\n        <tr>\n            <td><code>agent_version</code></td>\n            <td>string</td>\n            <td>Identificador de versión del modelo del agente</td>\n            <td>RECOMENDADO</td>\n        </tr>\n        <tr>\n            <td><code>agent_provider</code></td>\n            <td>string</td>\n            <td>Organización que proporciona/aloja el agente (por ejemplo, \"openai.com\", \"anthropic.com\")</td>\n            <td>REQUERIDO</td>\n        </tr>\n        <tr>\n            <td><code>agent_instance_id</code></td>\n            <td>string</td>\n            <td>Identificador único para esta instancia específica del agente</td>\n            <td>REQUERIDO</td>\n        </tr>\n    </tbody>\n</table>\n\n<h3>2.2 Claims de Delegación y Autoridad</h3>\n\n<table class=\"custom-table\">\n    <thead>\n        <tr>\n            <th>Claim</th>\n            <th>Tipo</th>\n            <th>Descripción</th>\n            <th>Requisito</th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            <td><code>delegator_sub</code></td>\n            <td>string</td>\n            <td>Identificador de sujeto de la entidad que más recientemente delegó autoridad a este agente</td>\n            <td>REQUERIDO</td>\n        </tr>\n        <tr>\n            <td><code>delegation_chain</code></td>\n            <td>array</td>\n            <td>Array ordenado de pasos de delegación (ver Sección 2.4.2)</td>\n            <td>OPCIONAL</td>\n        </tr>\n        <tr>\n            <td><code>delegation_purpose</code></td>\n            <td>string</td>\n            <td>Descripción del propósito/intención para el cual se delegó la autoridad</td>\n            <td>RECOMENDADO</td>\n        </tr>\n        <tr>\n            <td><code>delegation_constraints</code></td>\n            <td>object</td>\n            <td>Restricciones impuestas al agente por el delegador</td>\n            <td>OPCIONAL</td>\n        </tr>\n    </tbody>\n</table>\n\n<h3>2.3 Claims de Capacidad, Confianza y Atestación</h3>\n\n<table class=\"custom-table\">\n    <thead>\n        <tr>\n            <th>Claim</th>\n            <th>Tipo</th>\n            <th>Descripción</th>\n            <th>Requisito</th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            <td><code>agent_capabilities</code></td>\n            <td>array</td>\n            <td>Array de identificadores de capacidad que representan lo que el agente puede hacer</td>\n            <td>RECOMENDADO</td>\n        </tr>\n        <tr>\n            <td><code>agent_trust_level</code></td>\n            <td>string</td>\n            <td>Clasificación de confianza del agente (por ejemplo, \"verified\", \"experimental\")</td>\n            <td>OPCIONAL</td>\n        </tr>\n        <tr>\n            <td><code>agent_attestation</code></td>\n            <td>object</td>\n            <td>Evidencia de atestación o referencia (ver Sección 2.4.4)</td>\n            <td>RECOMENDADO</td>\n        </tr>\n        <tr>\n            <td><code>agent_context_id</code></td>\n            <td>string</td>\n            <td>Identificador para el contexto de conversación/tarea</td>\n            <td>RECOMENDADO</td>\n        </tr>\n    </tbody>\n</table>\n\n<h3>2.4 Formatos y Validación de Claims</h3>\n\n<h4>2.4.1 <code>agent_type</code></h4>\n<p>Valor de cadena de un conjunto definido de tipos de agente. Los implementadores DEBERÍAN usar uno de los siguientes valores cuando sea aplicable:</p>\n<ul>\n<li><code>assistant</code>: Agente asistente de propósito general</li>\n<li><code>retrieval</code>: Agente especializado en recuperación de información</li>\n<li><code>coding</code>: Agente especializado en generación o análisis de código</li>\n<li><code>domain_specific</code>: Agente especializado para un dominio particular</li>\n<li><code>autonomous</code>: Agente con alto grado de autonomía</li>\n<li><code>supervised</code>: Agente que requiere supervisión humana para acciones clave</li>\n</ul>\n\n<p>PUEDEN usarse tipos personalizados pero DEBERÍAN seguir el formato <code>vendor:type</code> (por ejemplo, <code>acme:financial_advisor</code>).</p>\n\n<h4>2.4.2 <code>delegation_chain</code></h4>\n<p>Array JSON que contiene objetos que representan cada paso en la cadena de delegación, desde el usuario original hasta el agente actual. Cada objeto DEBE contener:</p>\n<ul>\n<li><code>iss</code>: REQUERIDO. Cadena que identifica el Authorization Server o entidad que emitió/validó este paso de delegación.</li>\n<li><code>sub</code>: REQUERIDO. Cadena que identifica al delegador (la entidad que otorga permiso).</li>\n<li><code>aud</code>: REQUERIDO. Cadena que identifica al delegado (el agente que recibe permiso).</li>\n<li><code>delegated_at</code>: REQUERIDO. NumericDate que representa el momento en que ocurrió la delegación.</li>\n<li><code>scope</code>: REQUERIDO. Cadena separada por espacios de scopes OAuth que representan los permisos otorgados en este paso de delegación. DEBE ser un subconjunto de los scopes mantenidos por el delegador (<code>sub</code>).</li>\n<li><code>purpose</code>: OPCIONAL. Cadena que describe el propósito previsto de este paso de delegación.</li>\n<li><code>constraints</code>: OPCIONAL. Objeto JSON que especifica restricciones en la delegación (por ejemplo, <code>{\"max_duration\": 3600, \"allowed_resources\": [\"/data/abc\"]}</code>).</li>\n<li><code>jti</code>: OPCIONAL. Un identificador único para este paso de delegación específico, útil para revocación o seguimiento.</li>\n</ul>\n\n<p>El array DEBE estar ordenado cronológicamente.</p>\n\n<p><em>Reglas de Validación para <code>delegation_chain</code> (realizadas por Relying Party):</em></p>\n<ol>\n<li><strong>Verificación de Orden:</strong> Confirmar orden cronológico basado en <code>delegated_at</code>.</li>\n<li><strong>Confianza del Emisor:</strong> Verificar que cada <code>iss</code> sea confiable.</li>\n<li><strong>Coincidencia de Audiencia:</strong> Confirmar que <code>aud</code> del paso N coincida con <code>sub</code> del paso N+1.</li>\n<li><strong>Reducción de Scope:</strong> Verificar que <code>scope</code> en cada paso sea un subconjunto de/igual a los scopes disponibles del delegador.</li>\n<li><strong>Aplicación de Restricciones:</strong> Asegurar cumplimiento con cualquier <code>constraints</code>.</li>\n<li><strong>Validación de Firma (si aplica):</strong> Validar firmas si los pasos están firmados individualmente.</li>\n<li><strong>Verificación de Política:</strong> Evaluar la cadena validada contra políticas de autorización (por ejemplo, longitud máxima).</li>\n</ol>\n\n<h4>2.4.3 <code>agent_capabilities</code></h4>\n<p>Array de identificadores de cadena que representan las capacidades del agente. Los implementadores DEBERÍAN usar identificadores de capacidad de una taxonomía bien definida cuando esté disponible. Las capacidades personalizadas DEBERÍAN seguir el formato <code>vendor:capability</code> (por ejemplo, <code>acme:financial_analysis</code>).</p>\n\n<h4>2.4.4 <code>agent_attestation</code></h4>\n<p>Objeto JSON que contiene evidencia de atestación o una referencia a ella. DEBE incluir un campo <code>format</code> que indique el tipo de evidencia.</p>\n\n<p><em>Formato Recomendado:</em> Basado en JWT, potencialmente compatible con IETF RATS Entity Attestation Token (EAT).</p>\n\n<p>Ejemplo:</p>\n<pre><code class=\"language-json\">\"agent_attestation\": {\n  \"format\": \"urn:ietf:params:oauth:token-type:eat\",\n  \"token\": \"eyJhbGciOiJFUzI1NiIsInR5cCI6ImVhdCtqd3QifQ...\"\n}\n</code></pre>\n<p>PUEDEN usarse otros formatos (por ejemplo, <code>\"format\": \"TPM2-Quote\"</code>, <code>\"format\": \"SGX-Quote\"</code>).</p>\n\n<h2>3. Flujo de Protocolo</h2>\n\n<h3>3.1 Flujo de Autenticación del Agente</h3>\n\n<p>El flujo de autenticación OIDC-A extiende el flujo de Autenticación estándar de OpenID Connect:</p>\n\n<ol>\n<li><strong>Registro de Cliente</strong>: Los clientes que representan agentes DEBEN registrar metadatos adicionales (ver Sección 4).</li>\n<li><strong>Solicitud de Autenticación</strong>: Los agentes DEBERÍAN incluir el scope <code>agent</code> y potencialmente <code>delegation_context</code>.</li>\n<li><strong>Respuesta de Autenticación</strong>: El Authorization Server incluye claims específicos del agente en el ID Token.</li>\n<li><strong>Validación de Token</strong>: Los RPs DEBEN validar claims OIDC estándar y claims relevantes específicos del agente (incluyendo atestación y delegación si están presentes) según la política.</li>\n</ol>\n\n<h3>3.2 Flujo de Delegación</h3>\n\n<p>Cuando se delega autoridad a un agente:</p>\n\n<ol>\n<li>El delegador se autentica y autoriza la delegación.</li>\n<li>El Authorization Server emite un nuevo ID Token al agente incluyendo <code>delegator_sub</code>, <code>delegation_chain</code> (actualizado), <code>delegation_purpose</code> y <code>scope</code> restringido.</li>\n</ol>\n\n<h3>3.3 Flujo de Verificación de Atestación</h3>\n\n<p>Para verificar la atestación de un agente:</p>\n\n<ol>\n<li>El agente incluye el claim <code>agent_attestation</code> en su ID Token o proporciona evidencia por separado.</li>\n<li>El RP valida la evidencia basándose en el <code>format</code> especificado:\n<ul>\n<li>Verificar firmas criptográficas usando claves confiables (obtenidas vía Discovery).</li>\n<li>Comparar mediciones de plataforma contra valores conocidos como buenos.</li>\n<li>Validar nonces para prevenir ataques de repetición.</li>\n<li>Opcionalmente, usar el <code>agent_attestation_endpoint</code> para asistencia en validación.</li>\n</ul>\n</li>\n<li>Las decisiones de autorización incorporan el estado de atestación (por ejemplo, <code>verified: true/false</code>).</li>\n</ol>\n\n<h2>4. Registro de Cliente y Descubrimiento</h2>\n\n<h3>4.1 Metadatos de Registro de Cliente de Agente</h3>\n\n<p>Extiende OAuth 2.0 Dynamic Client Registration [RFC7591]:</p>\n\n<table class=\"custom-table\">\n    <thead>\n        <tr>\n            <th>Parámetro</th>\n            <th>Tipo</th>\n            <th>Descripción</th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            <td><code>agent_provider</code></td>\n            <td>string</td>\n            <td>Identificador del proveedor del agente</td>\n        </tr>\n        <tr>\n            <td><code>agent_models_supported</code></td>\n            <td>array</td>\n            <td>Lista de modelos de agente soportados</td>\n        </tr>\n        <tr>\n            <td><code>agent_capabilities</code></td>\n            <td>array</td>\n            <td>Lista de capacidades del agente</td>\n        </tr>\n        <tr>\n            <td><code>attestation_formats_supported</code></td>\n            <td>array</td>\n            <td>Lista de formatos de atestación soportados</td>\n        </tr>\n        <tr>\n            <td><code>delegation_methods_supported</code></td>\n            <td>array</td>\n            <td>Lista de métodos de delegación soportados</td>\n        </tr>\n    </tbody>\n</table>\n\n<h3>4.2 Metadatos de Descubrimiento</h3>\n\n<p>Extiende OpenID Connect Discovery 1.0:</p>\n\n<table class=\"custom-table\">\n    <thead>\n        <tr>\n            <th>Parámetro</th>\n            <th>Tipo</th>\n            <th>Descripción</th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            <td><code>agent_attestation_endpoint</code></td>\n            <td>string</td>\n            <td>URL del endpoint de atestación</td>\n        </tr>\n        <tr>\n            <td><code>agent_capabilities_endpoint</code></td>\n            <td>string</td>\n            <td>URL del endpoint de descubrimiento de capacidades</td>\n        </tr>\n        <tr>\n            <td><code>agent_claims_supported</code></td>\n            <td>array</td>\n            <td>Lista de claims de agente soportados</td>\n        </tr>\n        <tr>\n            <td><code>agent_types_supported</code></td>\n            <td>array</td>\n            <td>Lista de tipos de agente soportados</td>\n        </tr>\n        <tr>\n            <td><code>delegation_methods_supported</code></td>\n            <td>array</td>\n            <td>Lista de métodos de delegación soportados</td>\n        </tr>\n        <tr>\n            <td><code>attestation_formats_supported</code></td>\n            <td>array</td>\n            <td>Lista de formatos de atestación soportados</td>\n        </tr>\n        <tr>\n            <td><code>attestation_verification_keys_endpoint</code></td>\n            <td>string</td>\n            <td>URL para recuperar claves públicas para verificar firmas de atestación</td>\n        </tr>\n    </tbody>\n</table>\n\n<h2>5. Endpoints</h2>\n\n<h3>5.1 Endpoint de Atestación del Agente</h3>\n\n<p>Un recurso protegido OAuth 2.0 que devuelve información de atestación sobre un agente o asiste en validar evidencia proporcionada. URL anunciada vía parámetro de descubrimiento <code>agent_attestation_endpoint</code>.</p>\n\n<h4>5.1.1 Ejemplo de Solicitud (Obtener Información)</h4>\n\n<pre><code>GET /agent/attestation?agent_id=123&amp;nonce=abc\nAuthorization: Bearer &lt;token&gt;\n</code></pre>\n\n<h4>5.1.2 Ejemplo de Respuesta</h4>\n\n<pre><code class=\"language-json\">{\n  \"verified\": true,\n  \"provider\": \"openai.com\",\n  \"model\": \"gpt-4\",\n  \"version\": \"2025-03\",\n  \"attestation_timestamp\": 1714348800,\n  \"attestation_signature\": \"...\"\n}\n</code></pre>\n\n<h3>5.2 Endpoint de Capacidades del Agente</h3>\n\n<p>Proporciona información sobre las capacidades de un agente. URL anunciada vía parámetro de descubrimiento <code>agent_capabilities_endpoint</code>.</p>\n\n<h4>5.2.1 Ejemplo de Solicitud</h4>\n\n<pre><code>GET /.well-known/agent-capabilities\n</code></pre>\n\n<h4>5.2.2 Ejemplo de Respuesta</h4>\n\n<pre><code class=\"language-json\">{\n  \"capabilities\": [\n    {\"id\": \"text_generation\", \"description\": \"...\"},\n    {\"id\": \"code_generation\", \"description\": \"...\"}\n  ],\n  \"supported_constraints\": [\"max_tokens\", \"allowed_tools\"]\n}\n</code></pre>\n\n<h2>6. Consideraciones de Seguridad</h2>\n\n<h3>6.1 Autenticación del Agente</h3>\n\n<p>Los agentes DEBERÍAN usar métodos asimétricos fuertes (JWT Client Auth [RFC7523], mTLS [RFC8705]), potencialmente combinados con atestación. Los secretos compartidos NO son RECOMENDADOS.</p>\n\n<h3>6.2 Seguridad de Delegación</h3>\n\n<p>Los sistemas DEBEN validar toda la cadena de delegación, aplicar reducción de scope, implementar mecanismos de consentimiento y considerar límites de tiempo. Las políticas pueden limitar la longitud de la cadena. Se necesitan mecanismos robustos de revocación.</p>\n\n<h3>6.3 Seguridad de Atestación</h3>\n\n<p>Requiere gestión segura de claves de firma, manejo robusto de nonce, mediciones conocidas como buenas confiables, endpoints seguros y protección contra ataques de repetición. La evidencia de atestación puede tener implicaciones de privacidad.</p>\n\n<h3>6.4 Seguridad de Tokens</h3>\n\n<p>Los ID Tokens con claims de agente DEBERÍAN estar encriptados. Los access tokens DEBERÍAN tener tiempos de vida limitados. Los refresh tokens para agentes requieren consideración cuidadosa.</p>\n\n<h2>7. Consideraciones de Privacidad</h2>\n\n<p>Las implementaciones DEBEN considerar la correlación potencial de identidad del agente, implicaciones de privacidad de cadenas de delegación, requisitos de consentimiento del usuario y minimización de datos en claims.</p>\n\n<h2>8. Compatibilidad y Versionado</h2>\n\n<p>OIDC-A 1.0 está diseñado para compatibilidad con OAuth 2.0 [RFC6749], OIDC Core 1.0, JWT [RFC7519] y RFCs relacionados. Las versiones futuras apuntarán a compatibilidad hacia atrás.</p>\n\n<h2>9. Referencias</h2>\n\n<ul>\n<li>[RFC6749] The OAuth 2.0 Authorization Framework</li>\n<li>[RFC7519] JSON Web Token (JWT)</li>\n<li>[RFC7523] JWT Profile for OAuth 2.0 Client Authentication</li>\n<li>[RFC7591] OAuth 2.0 Dynamic Client Registration</li>\n<li>[RFC7662] OAuth 2.0 Token Introspection</li>\n<li>[RFC8705] OAuth 2.0 Mutual-TLS Client Authentication</li>\n<li>[OpenID Connect Core 1.0]</li>\n<li>[OpenID Connect Discovery 1.0]</li>\n<li>[IETF RATS] Remote Attestation Procedures Architecture</li>\n</ul>\n\n<h2>Apéndice A: Ejemplo de ID Token con Claims de Agente</h2>\n\n<pre><code class=\"language-json\">{\n  \"iss\": \"https://auth.example.com\",\n  \"sub\": \"agent_instance_789\",\n  \"aud\": \"client_123\",\n  \"exp\": 1714435200,\n  \"iat\": 1714348800,\n  \"auth_time\": 1714348800,\n  \"nonce\": \"n-0S6_WzA2Mj\",\n  \"agent_type\": \"assistant\",\n  \"agent_model\": \"gpt-4\",\n  \"agent_version\": \"2025-03\",\n  \"agent_provider\": \"openai.com\",\n  \"agent_instance_id\": \"agent_instance_789\",\n  \"delegator_sub\": \"user_456\",\n  \"delegation_purpose\": \"Email management assistant\",\n  \"agent_capabilities\": [\"email:read\", \"email:draft\", \"calendar:view\"],\n  \"agent_trust_level\": \"verified\",\n  \"agent_context_id\": \"conversation_123\",\n  \"agent_attestation\": {\n    \"format\": \"urn:ietf:params:oauth:token-type:eat\",\n    \"token\": \"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...\",\n    \"timestamp\": 1714348800\n  },\n  \"delegation_chain\": [\n    {\n      \"iss\": \"https://auth.example.com\",\n      \"sub\": \"user_456\",\n      \"aud\": \"agent_instance_789\",\n      \"delegated_at\": 1714348700,\n      \"scope\": \"email profile calendar\"\n    }\n  ]\n}\n</code></pre>\n\n<h2>Apéndice B: Ejemplo de Cadena de Delegación (Multi-paso)</h2>\n\n<pre><code class=\"language-json\">\"delegation_chain\": [\n  {\n    \"iss\": \"https://auth.example.com\",\n    \"sub\": \"user_456\",\n    \"aud\": \"agent_instance_789\",\n    \"delegated_at\": 1714348800,\n    \"scope\": \"email calendar\",\n    \"purpose\": \"Manage my emails and calendar\"\n  },\n  {\n    \"iss\": \"https://auth.example.com\",\n    \"sub\": \"agent_instance_789\",\n    \"aud\": \"agent_instance_101\",\n    \"delegated_at\": 1714348830,\n    \"scope\": \"calendar:view\",\n    \"purpose\": \"Analyze available time slots\"\n  }\n]\n</code></pre>\n\n<style>\n.custom-table {\n    width: 100%;\n    border-collapse: collapse;\n    margin-bottom: 1em; /* Add some space below tables */\n}\n\n.custom-table th, .custom-table td {\n    border: 1px solid #ddd;\n    padding: 8px;\n    text-align: left; /* Default alignment */\n}\n\n.custom-table th {\n    background-color: #f2f2f2;\n    font-weight: bold; /* Make headers bold */\n    text-align: center; /* Center align headers */\n}\n\n.custom-table tr:nth-child(even){background-color: #f9f9f9;}\n\n.custom-table tr:hover {background-color: #ddd;}\n\n.custom-table td {\n    color: #333; /* Darker text for better readability */\n    vertical-align: top; /* Align content top */\n}\n\n/* Center align specific columns */\n.custom-table td:nth-child(2) { /* Type column */\n    text-align: center;\n}\n.custom-table td:nth-child(4) { /* Requirement column */\n    text-align: center;\n}\n\n/* Style inline code within tables */\n.custom-table code {\n    background-color: #eef; /* Light background for code */\n    padding: 0.2em 0.4em;\n    border-radius: 3px;\n    font-size: 90%;\n}\n</style>",
  "source_hash": "sha256:73ea6cb5f87d953b8052cd05e0a127fa1a9cf036913230dc7e62c81ec066af98",
  "model": "claude-sonnet-4-5-20250929",
  "generated_at": "2026-01-02T01:58:02.071887+00:00"
}