# A2A — agente a agente

> Cada agente publica un Agent Card A2A v1.0 para que otros agentes lo descubran; el endpoint de mensajes se abre a terceros próximamente.

URL: https://www.ghosty.studio/docs/protocolos/a2a

[A2A](https://a2a-protocol.org) (Agent2Agent, Linux Foundation) es el estándar abierto para que un agente hable con otro. Cada agente de Ghosty Studio publica su **Agent Card** y atiende mensajes A2A.

## Descubrimiento: el card

```bash
curl https://www.ghosty.studio/a2a/AGENT_ID/card
```

Es público (sin credenciales, CORS abierto, cache de 5 minutos), como manda el estándar: el descubrimiento no puede exigir llaves.

```json
{
  "name": "Ghosty",
  "description": "…",
  "version": "1.0.0",
  "protocolVersion": "1.0",
  "url": "https://www.ghosty.studio/a2a/AGENT_ID",
  "capabilities": { "streaming": true, "pushNotifications": false },
  "defaultInputModes": ["text/plain", "application/json"],
  "defaultOutputModes": ["text/plain"],
  "skills": [],
  "provider": { "organization": "Ghosty Studio" },
  "securitySchemes": { "ghostyPartnerHmac": { "type": "apiKey", "in": "header", "name": "x-ghosty-sig" } }
}
```

Con una petición firmada, el card se **extiende**: lista las skills reales del agente (`chat`, `web-search`, `whatsapp` si tiene canal activo).

## Mensajes

`POST /a2a/:id` es JSON-RPC 2.0 con los métodos `SendMessage`, `SendStreamingMessage` (SSE), `GetTask` y `GetExtendedAgentCard`. El header `A2A-Version: 1.0` elige la versión; sin él se contesta en 0.3 para clientes viejos. El `contextId` de A2A se corresponde con una conversación de Studio.

> **Alcance hoy.** El endpoint de mensajes se firma con el esquema `ghostyPartnerHmac`, que usan los productos de la casa (Teams ↔ Studio). **Todavía no se emiten llaves a terceros**; cuando se abra, la autenticación será OAuth2 con un scope propio y esta página lo anunciará en [Cambios](/docs/referencia/cambios). Mientras tanto, para invocar un agente desde tu software usa la [API](/docs/api/autenticacion).

## Lo que no hace

- `pushNotifications: false`: no hay webhooks salientes; el streaming es por SSE.
- Los cards no van firmados con JWS; la autenticidad la da el dominio.
