# AX-SYS-35: Agrupa las tareas relacionadas bajo un mismo ID de contexto

> Memory and state · intermediate · AX-SYS-35

Cuando varias tareas forman parte del mismo trabajo, dales un ID de contexto compartido que el agente pueda devolver, para que un seguimiento empiece con el historial del caso y no desde cero.

## Por qué

Un caso de soporte casi nunca es una sola llamada. La clienta pide un reembolso, luego el costo de envío y después pregunta por qué su estado de cuenta todavía muestra el cargo. Si cada petición inicia una tarea nueva y sin relación, el agente tiene que repetirlo todo, el servidor no distingue un seguimiento de una petición nueva y un segundo agente que retoma el caso solo ve fragmentos. A2A incorpora la agrupación al protocolo. Un `contextId` agrupa de forma lógica tareas y mensajes relacionados para dar continuidad a una serie de interacciones. Un cliente puede enviarlo sin `taskId` para iniciar una tarea nueva dentro de un contexto existente, y un agente que no puede aceptar un `contextId` enviado por el cliente debe rechazar la petición en lugar de crear otro en silencio. La API de OpenAI traza la misma línea entre una llamada y el hilo que la rodea: un objeto de conversación se puede reutilizar entre sesiones, dispositivos o trabajos, y aunque los objetos de respuesta se guardan 30 días por defecto, los elementos de una conversación no están sujetos a ese TTL. El contexto no es una llave para los datos. A2A exige limitar los resultados a lo que quien llama está autorizado a ver incluso cuando no envía `contextId`, así que el ID agrupa el trabajo sin dar acceso a él. [AX-SYS-16](ax-sys-16-persist-state-across-workflows.mdx) hace que una tarea se pueda reanudar; este principio enlaza las distintas tareas de un mismo caso.

## Haz

Devuelve un ID de contexto con la primera tarea, acéptalo en las peticiones siguientes, permite listar tareas por contexto y rechaza un ID de contexto que no puedas respetar.

## No hagas

Tratar cada seguimiento como una conversación nueva, ni reemplazar en silencio el ID de contexto que envió el agente por otro.

## Artefacto

```json
{
  "message": {
    "role": "ROLE_USER",
    "messageId": "msg_552",
    "contextId": "ctx_refund_ord123",
    "referenceTaskIds": ["task_refund_01"],
    "parts": [{ "text": "Also refund the $6.90 shipping fee on the same order." }]
  }
}
```

`GET /tasks?contextId=ctx_refund_ord123` devuelve entonces las dos tareas, así que cualquier agente que retome el caso ve el historial completo, dentro de sus propios permisos.

## Fuentes

1. [A2A Protocol Specification (Context Identifier Semantics)](https://a2a-protocol.org/latest/specification/): A contextId logically groups multiple related Task and Message objects, providing continuity across a series of interactions; clients MAY use contextId without taskId to start a new task within an existing conversation context; an agent that cannot accept a client-provided contextId MUST reject the request with an error and MUST NOT generate a new contextId; even when no contextId is given, results MUST be scoped to the caller's authorized access boundaries
2. [OpenAI API Docs: Conversation state](https://developers.openai.com/api/docs/guides/conversation-state): After creating a conversation object, you can keep using it across sessions, devices, or jobs; response objects are saved for 30 days by default, while conversation objects and the items in them are not subject to the 30 day TTL

---
Source: Agent Experience Principles (axprinciples.com)