# Threat model para un agente

## 1. Objetivo autorizado

```yaml
principal:
purpose:
success_outcome:
expires_at:
maximum_duration:
maximum_cost:
```

## 2. Activos

| Activo | Clasificación | Ubicación | Impacto si se lee | Impacto si se modifica |
|---|---|---|---|---|
| | public / internal / confidential / secret | | | |

## 3. Sources no confiables

| Source | Actor que lo controla | Entra al contexto | Puede persistir | Validación |
|---|---|---:|---:|---|
| Web | Tercero | Sí | No | extracción + trust label |
| Correo | Remitente | Sí | No | identidad + trust label |
| Tool output | Proveedor/tool | Sí | No | schema + límites |
| Memoria | Sesiones anteriores | Sí | Sí | provenance + TTL |
| MCP metadata | Operador del servidor | Sí | Configuración | firma/revisión |

Añade: documentos, repositorios, OCR, imágenes, mensajes inter-agent y datos de
usuario según el producto.

## 4. Sinks y efectos

| Sink | Efecto | Reversible | Datos admitidos | Grant | Confirmación |
|---|---|---:|---|---|---:|
| HTTP | transmitir | No | public/internal acotado | host + path | según destino |
| Email | comunicar | No | según destinatario | audiencia | Sí |
| Base de datos | escribir | Parcial | schema validado | recurso | según riesgo |
| Shell | ejecutar | Variable | sin secretos | comando/capability | según sandbox |
| Memoria | persistir | Sí | con provenance | namespace | policy/preference |

## 5. Task grant

```yaml
id:
principal:
purpose:
issued_at:
expires_at:
allowed_tools: []
allowed_egress_hosts: []
may_read_sensitive: false
may_write_memory: false
max_operations:
max_amount_minor:
resource_constraints: []
```

## 6. Invariantes

- [ ] Datos y tool outputs no pueden ampliar el grant.
- [ ] Todas las tools pasan por un broker fuera del modelo.
- [ ] El agente no recibe secretos de largo plazo.
- [ ] Targets sensibles provienen de selección explícita.
- [ ] SECRET no alcanza ningún sink de egress.
- [ ] Contenido UNTRUSTED no entra a memoria de política.
- [ ] Un servidor MCP se ejecuta con privilegio mínimo.
- [ ] Un identificador de estado está ligado al principal autenticado.
- [ ] Todo commit boundary muestra efecto, target, datos y destino.
- [ ] Existe kill switch por agente, tenant, tool y workflow.

## 7. Trayectorias de abuso

Documenta una cadena completa:

```text
actor
  → source
  → contenido/control
  → decisión del modelo
  → tool propuesta
  → control que debe detenerla
  → sink
  → impacto
```

| ID | Trayectoria | Control preventivo | Detección | Recuperación | Test |
|---|---|---|---|---|---|
| AS-001 | | | | | |

## 8. Egress matrix

| Clasificación | Mismo tenant | Servicio corporativo | Tercero aprobado | Internet |
|---|---:|---:|---:|---:|
| PUBLIC | allow | allow | allow | grant |
| INTERNAL | grant | grant | confirm | deny |
| CONFIDENTIAL | grant | grant | confirm/deny | deny |
| SECRET | broker only | broker only | deny | deny |
| UNTRUSTED | quarantine | quarantine | deny | deny |

## 9. Memoria

Cada registro debe incluir:

```yaml
value:
source:
trust:
tenant:
task_id:
created_at:
expires_at:
approved_by:
```

Define quién puede escribir `policy/`, `preferences/`, `facts/`, `task/` y
`external/`.

## 10. Respuesta a incidentes

- Kill switch:
- Revocación de tokens/grants:
- Bloqueo de egress:
- Preservación de traces:
- Limpieza de memoria:
- Revisión de artefactos:
- Restauración:
- Responsable:
- Tiempo objetivo:
- Regresión añadida:
