# Gestionar agentes

> Cambia los destinos y la protección de un agente de egress, desactívalo, rota su token o bórralo, desde el panel, la API o MCP.

Un agente es una aplicación o un bot que llama a proveedores de modelos a través de la pasarela alojada. Tiene un nombre, una descripción, los destinos a los que puede llamar (de 1 a 32), dos protecciones (**Bloquear la inyección de prompts**, `enforce_injection`, y **Bloquear fugas de datos**, `block_dlp`, las dos activadas por defecto), un interruptor `disabled` y su propio token. Cada cambio necesita un `admin` de toda la organización. Para crear uno, mira [empezar](https://developers.openwaf.dev/es/egress/cloud/get-started/#create-an-agent).

En la API, los agentes se nombran por id (`…/egress/agents/{id}`, donde `…` es `https://dash.openwaf.dev/v1/orgs/{org}`); en MCP, por nombre o id. Los cambios admiten la cabecera opcional `X-Change-Reason` (en MCP, el `reason` obligatorio), que queda en la auditoría; no son configuración versionada, así que no hay `dry_run` ni `If-Match`.

## Cambiar destinos y protección

Solo cambian los campos que envías; `allowed_targets` se sustituye entero. El nombre no se puede cambiar, porque forma parte de las URL del agente en la pasarela: crea un agente nuevo.

**Panel**

En **Egress IA → Agentes**, elige **Editar** en la fila del agente, cambia su descripción, destinos o protección y guarda.
**API**

```sh
curl -sS -X PATCH "https://dash.openwaf.dev/v1/orgs/$ORG/egress/agents/$AGENT_ID" \
  -H "Authorization: Bearer $OPENWAF_TOKEN" -H "Content-Type: application/json" \
  -H "X-Change-Reason: el bot de soporte también llama a OpenAI" \
  -d '{"allowed_targets": ["openrouter", "openai"]}'
```
**MCP**

`egress_update_agent` con `agent`, los campos que cambian (`description`, `allowed_targets`, `enforce_injection`, `block_dlp`, `disabled`) y un `reason`; `confirm=false` enseña el cambio y `confirm=true` lo aplica.


Desactiva una protección solo en un agente que tenga que procesar texto con pinta de ataque, como informes de seguridad: los detectores no se pueden desactivar de uno en uno.

## Desactivar un agente

El token de un agente desactivado se rechaza (`401`) hasta que lo vuelvas a activar; no cambia nada más. Marca **Desactivado** en el diálogo de edición del agente, envía `{"disabled": true}` con `PATCH` o llama a `egress_update_agent` con `disabled: true`.

## Rotar el token

Rotar emite un token nuevo, que se enseña una sola vez, y el actual deja de funcionar en segundos. Actualiza antes todas las aplicaciones que lo usen.

**Panel**

En **Egress IA → Agentes**, elige **Rotar token** en la fila del agente y confirma. Copia el token nuevo del diálogo.
**API**

```sh
curl -sS -X POST "https://dash.openwaf.dev/v1/orgs/$ORG/egress/agents/$AGENT_ID/rotate-token" \
  -H "Authorization: Bearer $OPENWAF_TOKEN" -H "X-Change-Reason: token filtrado en un log de CI"
```

La respuesta es `{"agent": …, "token": "OWE_TOKEN_…"}`, como en el alta.
**MCP**

`egress_rotate_token` con `agent` y `reason`, y después otra vez con `confirm=true`. El token nuevo solo va en esa respuesta.


Si un token se filtra, rótalo o desactiva el agente: un token solo sirve contra la pasarela, para los destinos permitidos del agente y con sus protecciones, pero hasta entonces puede gastar la clave del proveedor.

## Borrar un agente

Al borrar un agente su token deja de funcionar al momento; sus peticiones bloqueadas siguen en el registro. No se puede deshacer. En el panel elige **Borrar** en la fila del agente; en la API envía `DELETE …/egress/agents/{id}`; por MCP llama a `egress_delete_agent`.

Borrar agentes, destinos y claves sigue funcionando aunque Egress IA se desactive para la organización, así que siempre puedes retirar lo que montaste.

## Auditoría

Cada cambio deja una entrada en la auditoría de la organización: `egress.agent.create`, `egress.agent.update`, `egress.agent.rotate_token` y `egress.agent.delete`, con el actor, el motivo y, en los cambios hechos por MCP, `"channel": "mcp"`. El token nunca aparece; solo su prefijo (`OWE_TOKEN_` y 6 caracteres).
