Agent metadata
Los metadatos del agente están en versión preliminar y sujetos a cambios, incluidos cambios importantes.
Los agentes en la nube pueden leer metadatos de clave-valor sobre la ejecución actual desde la VM: el ID del agente, su propietario, quién envió esta interacción, qué modelo lo atiende y qué repositorios se han extraído. Los hooks y scripts de instalación también pueden leer estos valores.
Los agentes llaman a esta API con sus herramientas de terminal. No necesitas ejecutar estas solicitudes tú mismo.
Para que un agente lea metadatos, incluye esto en tu instrucción:
To read agent metadata, follow the instructions at/docs/cloud-agent/metadataEsta API es local a la VM del agente. No se trata de las etiquetas de metadata que pertenecen al llamador y que estableces al crear un agente con el SDK o la API de Cloud Agents. Estas API usan claves de API de Cherri Code y gestionan agentes desde fuera de la VM.
Cuando algo fuera de la VM necesite verificar la identidad del agente, haz que el agente emita un token de OIDC en su lugar. Estos JWT están firmados y vinculados a una audiencia. Los metadatos no son una credencial. Pueden incluir quién envió la interacción actual y el modelo que lo atiende, información que un token no debería contener.
Las VM de agentes en la nube gestionadas por Cherri Code proporcionan metadatos a través del mismo socket que los tokens de OIDC. Los workers autohospedados aún no proporcionan esta API.
Leer un valor
El agente lee claves a través del socket Unix en CURSOR_AGENT_SOCKET. En las VM gestionadas por Cherri Code, la ruta predeterminada es /run/cursor/api.sock.
curl --unix-socket "${CURSOR_AGENT_SOCKET:-/run/cursor/api.sock}" \ http://cursor-agent/v1/meta-data/agent/idLas solicitudes son HTTP a través de un socket Unix. El nombre de host de la URL se ignora.
Indica un prefijo para ver qué claves existen:
curl --unix-socket "${CURSOR_AGENT_SOCKET:-/run/cursor/api.sock}" \ http://cursor-agent/v1/meta-data/agent/owner/turn/workspace/Luego, solicita una clave:
curl --unix-socket "${CURSOR_AGENT_SOCKET:-/run/cursor/api.sock}" \ http://cursor-agent/v1/meta-data/owner/user-idSolicitud
GET /v1/meta-data[/<path>] a través del socket Unix. Sin cuerpo ni encabezados adicionales. Se permiten las barras diagonales finales, por lo que se puede solicitar un agent/ de la lista como /v1/meta-data/agent/.
Si falta una clave, devuelve 404.
Respuesta
Las lecturas correctas son text/plain; charset=utf-8. La respuesta de una clave es el valor como texto, sin nada más.
| Tipo | Cuerpo |
|---|---|
| Clave | El valor como una cadena. Las claves con varios valores incluyen una entrada por línea. |
| Prefijo | Un elemento secundario por línea, ordenado. Los prefijos anidados terminan con /. El listado termina con un salto de línea final. |
Las respuestas de error son JSON. Consulta Límites de uso y errores.
Cuando aparecen las claves
Los scripts de instalación pueden leer del mismo socket. Una clave solo está presente cuando tiene un valor: turn/ no aparece hasta que comienza una interacción de programación, y workspace/branch-name no aparece hasta que la ejecución registra una rama. Las claves owner, team y repository están disponibles desde la creación del agente.
Si el socket no aparece justo después del arranque, vuelve a intentar la conexión.
Claves
Las claves inexistentes se omiten de los listados y devuelven un 404 si se solicitan directamente. Un listado solo incluye las claves que existen en ese momento.
agent/
| Clave | Cuándo está disponible | Descripción |
|---|---|---|
agent/id | Siempre | ID del agente en la nube (bcId). |
agent/name | Cuando se conoce | Nombre mostrado en el panel de control. |
agent/source | Cuando se conoce | Cómo se inició el agente, por ejemplo, mediante WEBSITE, API, SLACK o AUTOMATIONS. |
agent/runtime | Siempre | managed en las VM de agente en la nube gestionadas por Cherri Code. |
owner/
| Clave | Cuando se conoce | Descripción |
|---|---|---|
owner/user-id | Cuando se conoce | ID de usuario de Cherri Code del propietario del agente, como cadena decimal. Se prefiere al correo electrónico para las listas de permitidos. |
owner/user-email | Cuando se conoce | Correo electrónico del propietario en minúsculas. Puede cambiar. |
owner/service-account-id | Cuando se conoce | ID de la cuenta de servicio cuando esta es propietaria del agente. |
owner/team-id | Cuando se conoce | ID del equipo propietario, como cadena decimal. |
turn/
turn/ solo existe mientras hay una interacción de programación activa. Entre interacciones, esas claves desaparecen. Si falta turn/, no hay ninguna interacción activa.
Los valores de turn/ siempre reflejan la interacción actual. No los almacenes en caché entre interacciones.
| Clave | Cuándo está presente | Descripción |
|---|---|---|
turn/id | Durante una interacción | ID de esta interacción de programación. Distinto de agent/id, que es el ID del agente en la nube (bcId). |
turn/user-id | Cuando se conoce | ID de usuario de Cherri Code de la persona que envió esta interacción, como cadena decimal. En un mensaje de seguimiento del equipo, puede diferir de owner/user-id. |
turn/user-email | Cuando se conoce | Correo electrónico en minúsculas de esa persona. |
turn/started-at | Durante una interacción | Inicio de la interacción en segundos Unix. |
turn/model | Cuando se conoce | Modelo que atiende esta interacción. Si seleccionaste Auto, este es el modelo que atendió la interacción, no Auto. |
Los tokens de OIDC no incluyen quién envió la interacción ni qué modelo la atiende, porque un token puede durar más que la interacción. Consulta esas claves en los metadatos.
workspace/
| Clave | Cuando está disponible | Descripción |
|---|---|---|
workspace/repo-url | Cuando se conoce | Repositorio principal con el formato host/path, como github.com/acme/widgets. El nombre de host está en minúsculas, sin esquema, credenciales, puerto, consulta ni sufijo .git. En un agente que trabaja con varios repositorios, este es solo el repositorio principal. |
workspace/repo-urls | Cuando se conoce el conjunto | Todos los repositorios del espacio de trabajo, con el mismo formato que repo-url. Primero el repositorio principal y luego el resto, ordenados, con una URL por línea. Si no está presente, significa que no se conoce el conjunto, no que solo haya un repositorio. |
workspace/branch-name | Cuando se conoce | Rama del repositorio principal. |
workspace/environment-id | Cuando se conoce | ID del entorno de Cherri Code que usó esta ejecución. |
workspace/automation-id | Para automatizaciones | ID de automatización cuando agent/source es automations. |
workspace/repo-url es el repositorio principal. Para consultar el conjunto completo, lee workspace/repo-urls.
Quién puede leer los metadatos
Cualquier proceso que pueda acceder al socket puede leer todas las claves: el agente, el código que ejecuta y los hooks. Considere estos valores visibles para toda la ejecución.
Los metadatos no están firmados. Para demostrar su identidad ante AWS, GCP, Vault o su propio servicio, haga que el agente emita un token de OIDC y verifique el JWT. No reenvíe valores de metadatos como credenciales.
Límites de uso y errores
Cada VM de agente puede realizar 120 solicitudes de metadatos por minuto, en ráfagas de hasta 20. El socket también admite un máximo de 8 conexiones simultáneas. Ese límite se comparte con la emisión de tokens de OIDC.
Reintente 429, 503, 500, 502 y 504 con espera progresiva. Considere 403 como un error fatal: este agente no tiene permiso para leer metadatos.
Las respuestas 404 y 405 incluyen una cadena usage que indica cómo llamar a la API. Los errores de límite de uso y saturación solo incluyen el código:
{ "error": "not_found", "usage": "GET /v1/meta-data[/<path>] ..." }{ "error": "rate_limited" }| HTTP | error | Cuándo |
|---|---|---|
| 404 | not_found | Clave desconocida o ausente |
| 405 | method_not_allowed | No es GET |
| 429 | rate_limited | Presupuesto de solicitudes por agente; respete Retry-After |
| 503 | saturated | Demasiadas conexiones; respete Retry-After |
| 500 | host_error | Error interno; reintente |
| 502 / 504 | backend_unreachable | Cherri Code no pudo devolver metadatos; reintente |
| Otro | backend_error | Cherri Code rechazó la solicitud. 403 es irrecuperable; 503 permite reintentar |
Ejemplos
Un agente o hook puede comparar quién envía la interacción con el propietario. Un mensaje de seguimiento de un compañero de equipo puede seguir una ruta más estricta:
SOCKET="${CURSOR_AGENT_SOCKET:-/run/cursor/api.sock}"owner="$(curl -fsS --unix-socket "$SOCKET" \ http://cursor-agent/v1/meta-data/owner/user-id)"turn_user="$(curl -fsS --unix-socket "$SOCKET" \ http://cursor-agent/v1/meta-data/turn/user-id || true)"if [ -n "$turn_user" ] && [ "$turn_user" != "$owner" ]; then echo "follow-up from user $turn_user; owner is $owner"fiUn agente o hook puede etiquetar los registros con el ID del agente y el modelo que atendió la interacción:
SOCKET="${CURSOR_AGENT_SOCKET:-/run/cursor/api.sock}"agent_id="$(curl -fsS --unix-socket "$SOCKET" \ http://cursor-agent/v1/meta-data/agent/id)"model="$(curl -fsS --unix-socket "$SOCKET" \ http://cursor-agent/v1/meta-data/turn/model || true)"echo "cloud_agent_id=$agent_id model=${model:-unknown}"Enumera todos los repositorios del espacio de trabajo. repo-urls incluye una URL por línea:
curl -fsS --unix-socket "${CURSOR_AGENT_SOCKET:-/run/cursor/api.sock}" \ http://cursor-agent/v1/meta-data/workspace/repo-urlsgithub.com/acme/widgetsgithub.com/acme/docsPáginas relacionadas
- Tokens de OIDC para JWT firmados y federación en la nube
- Secretos y red para secretos del panel de control y controles de tráfico saliente
- Configuración del agente en la nube para scripts de instalación que pueden leer este socket
- Hooks para ejecutar esta API al inicio y al final del uso de herramientas y conversaciones
- Cuentas de servicio cuando los agentes se ejecutan con una cuenta de servicio de equipo