Ir al contenido

Safe defaults

Los agentes son rapidísimos. Eso es bueno cuando hacés algo bien y malo cuando hacés algo mal — los errores también escalan. Prysm:ID asume eso desde el diseño y aplica una capa de “safe defaults” sobre el plano de control que un agente toca.

1. Scope de la machine key. Cualquier acción que el scope no permita, falla con 403 forbidden_by_scope antes de tocar Stripe, antes de borrar nada, antes de cambiar nada. Vos elegís el scope cuando creás la key.

2. Confirmation gates en el MCP server. Las operaciones destructivas o costosas requieren un confirmed: true explícito. El primer call del agente devuelve:

{
"requires_confirmation": true,
"confirmation_token": "ct_abc123",
"summary": "This will permanently delete workspace 'acme' and all 1,247 users.",
"irreversible": true
}

El agente no puede auto-confirmar. Te muestra el summary, espera tu OK, y solo entonces re-llama con confirmed: true, confirmation_token: ct_abc123. Esto bloquea la clase de bug “el agente alucinó y borró producción”.

3. Rate limits dedicados al control plane. Un agente desbocado intentando crear 1000 workspaces va a tope con un cap por minuto. Ver rate limits.

AcciónPor qué
workspaces.deleteIrreversible. Borra una instancia entera.
tenants.deleteIrreversible. Pierde users del tenant.
apps.deleteRomperás logins activos de esa app.
idps.remove cuando es el único IdPDejarías el workspace sin método de login.
keys.create con workspace:adminCrear keys con privilegio máximo merece confirmación.
billing.set_plan cuando es downgradePuede reducir cuota de MAU bruscamente.
branding.set_custom_domainCambia el issuer; puede romper apps existentes.
webhooks.delete cuando es el único activoPerderías visibilidad de eventos.
AcciónPor qué
Creación de cosas reversibles (workspaces, apps, IdPs)Si el agente creó algo de más, lo borrás. Costo bajo.
branding.setCambiar logo no es destructivo; reversible en un click.
webhooks.createAdicionar callbacks adicionales no rompe los existentes.
Lectura de cualquier cosaObvio.
billing.set_plan cuando es upgradePagar más nunca rompió un cliente. (Es broma. Pero el riesgo de un upgrade automático es bajo y reversible al fin del período.)

En app.prysmid.com → audit, cada acción tiene un actor:

  • actor=user:<email> → un humano hizo eso (sesión OIDC).
  • actor=key:<machine_key_id> → una machine key hizo eso.

Filtrá por actor:starts-with(key:) y vas a ver todo lo automatizado. Si un día algo raro aparece, sabés inmediatamente si fue agente y cuál.

Cómo desactivar un confirmation gate (si realmente querés)

Sección titulada «Cómo desactivar un confirmation gate (si realmente querés)»

A veces tenés un workflow batch totalmente automático donde la pausa de confirmación es ruido. Para esos casos:

Ventana de terminal
curl -X POST https://api.prysmid.com/v1/workspaces/$WS/machine-keys/$KEY_ID \
-d '{"unattended_mode": true}'

Esto elimina las confirmation gates para esa key específica. Es un trade-off explícito: ganás automatización, perdés la red de seguridad. Recomendaciones:

  • Solo en keys con scope acotado. Una key tenant:acme:write con unattended_mode es razonable. Una workspace:admin no.
  • Solo con expiración corta (semanas, no años).
  • Solo en pipelines determinísticos, no en agentes interactivos. Un cron de provisión de demos sí; tu Claude personal no.
  • Approval queues: para teams donde un agente propone cambios y un humano otro aprueba (no el que está hablando con el agente).
  • Anomaly detection: alertas automáticas cuando una machine key hace algo fuera de su patrón histórico (volumen anómalo, nueva clase de operación, hora rara).
  • Per-tool fine-grained scopes: hoy tenés workspace:write, pero podrías querer apps:write sin idps:write. Lo discutimos en GitHub si te interesa.

El agente es usuario de primera clase. Pero “primera clase” no significa “sin guardrails”. Significa el mismo respeto y la misma desconfianza inteligente que aplicás a un colega nuevo con acceso producción.

Las gates no están para frenarte — están para que cuando un día tu agente alucine, el blast radius sea recuperable, no terminal.