Las capturas no prueban nada: empaquetar evidencia de agentes sin exponer las trazas
AgentInspect publica Evidence v2, un formato que convierte la ejecución de un agente en un directorio verificable con hashes y política de redacción, en vez de adjuntar una imagen al pull request.

AgentInspect ha publicado Evidence v2, un formato que convierte la ejecución de un agente en un directorio de evidencia revisable, en lugar de una captura de pantalla o un volcado de trazas en crudo. La implementación verificada es agent-inspect@6.17.6. El problema que ataca es concreto: quien revisa un pull request no puede saber de qué traza salió una imagen, si alguien la recortó después ni qué política de redacción se aplicó antes de compartirla.
El JSONL original tampoco sirve como unidad de entrega. Responde a algunas de esas preguntas y abre otra: puede contener identificadores, atributos o fragmentos de texto que no deberían salir de la máquina del desarrollador. La propuesta es un objeto derivado, donde la traza fuente se queda en privado y el revisor recibe una copia redactada con contexto suficiente para cuestionar el resultado.
Qué se genera y qué se comprueba
El comando trabaja sobre una ejecución suelta o sobre una sesión completa:
npx agent-inspect bundle <run-id> --dir .agent-inspect --profile share --out ./agent-evidence
npx agent-inspect bundle --session sess-support-042 --dir .agent-inspect --profile strict --out ./agent-evidence
Los traces de origen son de solo lectura. La salida incluye evidence.html como punto de entrada cómodo, evidence.json como manifiesto que hace inspeccionable la carpeta entera, y una serie de ficheros derivados: copia redactada de la traza, resumen, resultados de comprobaciones, informe de redacción y métricas de rendimiento.
El manifiesto separa cuatro cosas: versión del formato, generador, origen y política. La distinción importante está entre sourceHashes y files[].sha256. Los primeros identifican los bytes previos a la redacción de los que se derivó el artefacto; los segundos protegen los bytes exactos que quedaron dentro del paquete final. El hash del origen no revela el contenido redactado, y tampoco conserva el original por ti: la retención sigue siendo una decisión aparte.
La verificación se lanza en local:
npx agent-inspect bundle verify ./agent-evidence
Comprueba la forma del manifiesto, que estén los ficheros declarados, sus SHA-256, la aparición de ficheros inesperados (falla por defecto), la evaluación registrada y la procedencia del generador. Si alguien edita el resumen, sustituye la traza redactada o suelta un fichero no listado en el directorio final, la verificación deja de pasar. Eso permite afirmar algo preciso: el paquete es internamente consistente con su manifiesto.
Integridad no es autenticidad
El propio autor lo deja claro y conviene repetirlo sin adornos: bundle verify es una comprobación de integridad. Evidence v2 no va firmado criptográficamente por una identidad de confianza, así que quien pueda reemplazar la carpeta completa puede fabricar otro paquete válido. Tampoco es un log con encadenado de hashes, ni prueba de durabilidad antes de un efecto secundario, ni de reejecución, ni de ejecución exactamente una vez, ni certifica cumplimiento normativo. Si la autoría importa, hay que añadir firma, control de acceso y almacenamiento de confianza en el pipeline.
El perfil share, pensado para pull requests y soporte interno, es un punto de partida; para compartir fuera, strict es mejor. El comando evalúa el artefacto redactado y se niega a producir salidas marcadas como UNSAFE o UNKNOWN salvo que se pase --allow-unsafe. Es un buen guardarraíl que falla en cerrado, pero no garantiza que un texto libre no lleve dentro algo sensible. La recomendación del proyecto es abrir el HTML y el resumen, revisar el informe de redacción, verificar y aplicar la política de retención de la casa.
Lo que cambia para quien mantiene agentes en producción es que la evidencia deja de ser una imagen que nadie puede auditar y pasa a ser un objeto con hashes y política declarada. Lo que sigue pendiente es lo de siempre: capturar menos desde el principio, porque la redacción no debería ser la única barrera.


