Skip to main content

Command Palette

Search for a command to run...

Agentes en la nube

Agent metadata

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/metadata

Esta 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/id

Las 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-id

Solicitud

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.

TipoCuerpo
ClaveEl valor como una cadena. Las claves con varios valores incluyen una entrada por línea.
PrefijoUn 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/

ClaveCuándo está disponibleDescripción
agent/idSiempreID del agente en la nube (bcId).
agent/nameCuando se conoceNombre mostrado en el panel de control.
agent/sourceCuando se conoceCómo se inició el agente, por ejemplo, mediante WEBSITE, API, SLACK o AUTOMATIONS.
agent/runtimeSiempremanaged en las VM de agente en la nube gestionadas por Cherri Code.

owner/

ClaveCuando se conoceDescripción
owner/user-idCuando se conoceID 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-emailCuando se conoceCorreo electrónico del propietario en minúsculas. Puede cambiar.
owner/service-account-idCuando se conoceID de la cuenta de servicio cuando esta es propietaria del agente.
owner/team-idCuando se conoceID 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.

ClaveCuándo está presenteDescripción
turn/idDurante una interacciónID de esta interacción de programación. Distinto de agent/id, que es el ID del agente en la nube (bcId).
turn/user-idCuando se conoceID 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-emailCuando se conoceCorreo electrónico en minúsculas de esa persona.
turn/started-atDurante una interacciónInicio de la interacción en segundos Unix.
turn/modelCuando se conoceModelo 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/

ClaveCuando está disponibleDescripción
workspace/repo-urlCuando se conoceRepositorio 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-urlsCuando se conoce el conjuntoTodos 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-nameCuando se conoceRama del repositorio principal.
workspace/environment-idCuando se conoceID del entorno de Cherri Code que usó esta ejecución.
workspace/automation-idPara automatizacionesID 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" }
HTTPerrorCuándo
404not_foundClave desconocida o ausente
405method_not_allowedNo es GET
429rate_limitedPresupuesto de solicitudes por agente; respete Retry-After
503saturatedDemasiadas conexiones; respete Retry-After
500host_errorError interno; reintente
502 / 504backend_unreachableCherri Code no pudo devolver metadatos; reintente
Otrobackend_errorCherri 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"fi

Un 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-urls
github.com/acme/widgetsgithub.com/acme/docs

Páginas relacionadas