Tracekit MCP gateway
Proxy MCP autoalojado: los agentes se conectan a él en lugar de a tus servidores MCP, y un firmante Tracekit permite, bloquea o retiene cada llamada de herramienta para una persona, luego la firma en un registro que puedes verificar sin conexión. Las credenciales upstream permanecen en la puerta de enlace. Requiere un firmante Tracekit en ejecución. MIT.
Documentación
Los agentes pueden editar registros. No pueden ocultar la edición.
Tracekit verifica cada llamada de herramienta que hace tu agente antes de que se ejecute, firma cada llamada y decisión en una cadena hash,
y te entrega un archivo .tkb por ejecución que cualquiera puede verificar sin conexión.
8 de 8ataques de manipulación detectados480 pruebas, con un testigo (E1) | 512 de 512llamadas dañinas detenidas11 clases, 1 falsa alarma en 695 (E17) | < 1 msañadido por llamada de herramienta0.91 ms en p99, ida y vuelta del firmante (E9) | 8 de 8ataques internos detectadosuna puerta de fusión en cada PR (E8) |
Construido como Certificate Transparency: registros firmados en un log de solo añadidura que testigos independientes cofirman
Formato de archivo abierto · verificadores en Python y TypeScript · MIT · se ejecuta en tus propias máquinas
Pruébalo · Añádelo a tu agente · Qué demuestra · Qué contiene · Prueba · Cómo funciona · Pilótalo · Contribuye · Documentación
Cuando un agente hace algo que no debería, te haces tres preguntas: qué hizo, estaba permitido, y puedes confiar en el registro? El registro del propio agente no puede responder la tercera, porque el agente puede editarlo. Aquí hay una ejecución, registrada de ambas maneras:
La misma ejecución, registrada: la base de datos, el firmante, el visor y ambas ediciones son reales; el modelo está guionizado. Míralo con sonido (1:47)
En esta demo el firmante se ejecutó como el propio usuario del agente (modo de desarrollo), así que un agente que supiera cómo podría haber leído la clave y vuelto a firmar el registro. Ejecuta el firmante donde el agente no pueda alcanzarlo, con un testigo, y no podrá.
Pruébalo
uvx --from tracekit-ai tracekit demo --server
Sin clave de API, y nada que instalar con uv. Desde una caché vacía en un Mac tardó 5
segundos (10 con pip install tracekit-ai en un venv nuevo). El paquete es tracekit-ai: tracekit en PyPI es un
proyecto no relacionado. Un agente guionizado hace tres llamadas, y deberías ver:
== agent run (SCRIPTED: fixed tool calls, not a model)
Bash 'ls': allow
Bash 'sudo rm -rf /': deny TK-D001 TK-D004 TK-F003
Bash 'echo "unterminated': ask TK-SHELL-PARSE
...
Integrity: VERIFIED.
== tamper test: rewrite the denied call as allowed in a copy, then verify again
[FAIL] signatures — 11 record(s), keys valid at their position
seq 4: hash does not match the event
Integrity: FAILED.
La eliminación fue denegada antes de ejecutarse, la llamada retenida se ejecutó después de una aprobación, y la ejecución se verificó. Luego la demo reescribió la denegación como permitida en una copia, y la verificación falló en el registro que cambió.
Añádelo a tu agente
Tres líneas:
pip install tracekit-ai
import tracekit; tracekit.instrument() # the first line of your agent; then run it as usual
tracekit last # Integrity: VERIFIED. / Assurance: dev; ...
tracekit.instrument() inicia un firmante de desarrollo (o reutiliza el que está en ejecución) y controla y registra cada llamada de herramienta y modelo
de los frameworks que encuentra. tracekit last exporta tu última ejecución, la verifica y dice dónde está.
tracekit view --dev muestra cada ejecución. En una máquina limpia el ejemplo de LangGraph (un modelo simulado, sin clave de API) se instaló,
verificó y ejecutó en 27 segundos: examples/v2/clean-machine.sh langchain.
Estable: Claude Code, el SDK de OpenAI Agents, LangChain / LangGraph, el SDK de Claude Agent y MCP. Experimental: Codex CLI, Cursor, Gemini CLI, CrewAI, Browser Use, Pydantic AI, Google ADK, Haystack, LlamaIndex, Microsoft Agent Framework, Strands Agents y el SDK de TypeScript. Configuración: agentes de codificación · SDK de OpenAI Agents · SDK de Claude Agent · LangChain / LangGraph · MCP · CrewAI · Browser Use · Pydantic AI · Google ADK · Haystack · LlamaIndex · Microsoft Agent Framework · Strands Agents · TypeScript · Vercel AI SDK · OpenTelemetry · cualquier otro agente
Otras formas de entrar: agentes de codificación, sin uv, la demo del porqué, los paquetes de muestra, TypeScript
Agentes de codificación: tracekit init --dev --v2 conecta los hooks de Claude Code a un firmante de desarrollo; añade --agent codex, cursor o
gemini para los demás (experimental). Sin uv: pip install tracekit-ai, luego tracekit demo --server. --why
(experimental) muestra un correo
retenido cuya causa se encuentra mediante reproducción y se cita por su registro firmado:
tracekit demo --server # exit 0
tracekit demo --why # exit 0
tracekit init --dev --v2
Desde un checkout, los paquetes de muestra incluidos (v1) se verifican solo con el verificador (pip install --no-deps tracekit-ai es
suficiente), y python examples/v2/langchain/agent.py --scripted ejecuta un agente de LangGraph con un modelo simulado:
tracekit verify docs/sample/demo-run.tkb --key docs/sample/signer.pub # exit 0
tracekit verify docs/sample/demo-run-tampered.tkb --key docs/sample/signer.pub # exit 1
TypeScript necesita Node 18 o más reciente: npm install @cygnuxlabs/tracekit, y npx @cygnuxlabs/tracekit up inicia un firmante de
desarrollo sin Python en Macs con Apple Silicon, Linux y Windows (SDK de TypeScript). Python 3.9 a
3.13; las integraciones de frameworks necesitan 3.10 o más reciente.
Qué demuestra
Tres garantías. Están relacionadas, pero una no te da las otras, y cada una necesita algo diferente.
| Garantía | Qué obtienes | Qué necesita |
|---|---|---|
| Integridad de la evidencia | Un registro que fue editado, eliminado, intercambiado o insertado falla la verificación en ese registro | Solo el registro firmado. Cortar el final del registro, o volver a firmarlo con una clave robada, requiere un testigo para detectarlo |
| Control de ejecución | Cada llamada se verifica antes de ejecutarse. Una llamada denegada se bloquea; una llamada retenida se ejecuta solo después de un sí, con exactamente los argumentos que se aprobaron | La llamada pasa por Tracekit: un SDK, un hook o una puerta de enlace. El código que lo omite no se detiene |
| Aseguramiento independiente | Un operador que reescribe o bifurca su propio registro es detectado | Un testigo que el operador no controla, y un monitor. Ambos son experimentales, y ningún testigo público está en ejecución todavía |
Límites
- El modo de desarrollo no protege nada contra un agente que se ejecuta como tú. Las ejecuciones de desarrollo dicen
isolation: same-user(FAQ). - Una ejecución verificada prueba que el registro está intacto: no la intención, no que un resultado de herramienta reportado sea verdadero, y no que cada acción fue capturada (FAQ).
- Las acciones fuera de la ruta de captura no dejan registro, como un subproceso que un hook nunca ve o código que omite el adaptador (adaptadores).
- Las reglas de política coinciden con texto y nombres de herramientas. Un agente decidido puede reformular un comando; la protección es el aislamiento del firmante (referencia de política).
- Los compromisos ocultan contenido, no tiempos, tamaños o conteos (privacidad).
Qué garantiza cada despliegue, desde el modo de desarrollo hasta un firmante que el agente no puede alcanzar: garantías. Cada límite, con qué hacer al respecto: límites. Cómo se mapea a la Ley de IA de la UE, ISO/IEC 42001, el NIST AI RMF y OWASP: cumplimiento.
Qué contiene
Un firmante. El núcleo es estable y se endurece primero. El resto se envía en el mismo paquete como experimental: funciona y está probado, pero puede cambiar entre versiones (qué es estable).
| Núcleo | Qué hace | Medido |
|---|---|---|
| Registrar | Cada llamada de herramienta, decisión y resultado en una cadena hash firmada por ejecución. Un evento perdido se convierte en una brecha firmada, nunca en silencio | 6 de 8 ataques de manipulación detectados solo por el registro (E1) |
| Decidir | Permitir, denegar o retener cada llamada para una persona, antes de que se ejecute. Paquetes para shell, archivos, SQL, HTTP, CLIs de nube, navegadores, correo, mensajería, pagos, secretos y MCP | 512 de 512 llamadas dañinas detenidas, 1 falsa alarma en 695 (E17) |
| Aprobar | Una llamada retenida se ejecuta solo después de un sí desde la línea de comandos, vinculada a sus argumentos exactos y usada una vez (aprobaciones) | Argumentos editados, una instantánea reproducida o la aprobación de otra ejecución: rechazados, en las pruebas de contrato que ejecuta cada integración de framework estable |
| Probar | tracekit verify verifica el archivo de una ejecución sin conexión contra claves que fijaste | 8 de 8 ataques internos detectados (E8) |
| Observar | tracekit view: cada ejecución verificada, llamadas bloqueadas y retenidas, aprobaciones, brechas, reproducción y una revisión de ejecución (visor) | No medido |
| Experimental | Qué hace | Medido |
|---|---|---|
| Testigo | Testigos independientes cofirman cada punto de control; un monitor observa el registro para detectar reescrituras y bifurcaciones | 8 de 8 ataques de manipulación detectados con un testigo (E1) |
| Verificación cruzada | El firmante compara las llamadas que el modelo solicitó, como una puerta de enlace LLM o la transcripción de sesión las vio, con las llamadas que el agente reportó. Un hook omitido o una llamada inventada se señala | 12 de 12 discrepancias sembradas señaladas, 0 falsas (E10) |
| Contener | Incidentes firmados retienen o ponen en cuarentena una ejecución. Las herramientas se ejecutan con credenciales que el agente nunca tiene (ejecutor, puerta de enlace MCP). Un observador de salida señala tráfico que ninguna llamada explica | 8 de 8 verificaciones de contención y 10 de 10 de detección (E17) |
| Explicar | De dónde vino cada argumento, y tracekit why: qué entrada causó una acción, encontrada reproduciendo la ejecución sin ella | 6 de 6 causas verdaderas nombradas, 0 culpas falsas, un modelo de 7B, muestra pequeña |
| Más aprobadores | Una página web con passkeys, Slack, o un agente revisor que aprueba dentro de límites | 7 de 7 casos de abuso contra aprobadores de agentes detectados (E18) |
Prueba
Nuestros propios experimentos: pequeños, sintéticos y escritos por nosotros. Nada redondeado. Los fallos permanecen.
| Experimento | Configuración | Resultado |
|---|---|---|
| E1 detección de manipulación | Registros firmados de 120 registros, 8 ataques, 60 pruebas cada uno, re-ejecutado en 1.2 | 6 de 8 detectados solo por el registro, 8 de 8 con un testigo |
| E8 ataques internos | Usuarios reales sin privilegios contra un firmante de modo sistema en Linux: un firmante señuelo, un firmante detenido, una política intercambiada, ejecuciones fabricadas | 8 de 8 detectados, una puerta de fusión en cada solicitud de extracción |
| E17 paquetes de política | 512 llamadas de herramientas dañinas y 695 benignas en 11 clases, decididas por ambos motores de regex | 512 de 512 detenidas; 1 falsa alarma, un borrador de correo retenido para una persona |
| E10 conciliación | 30 ejecuciones, 12 con una discrepancia sembrada: un hook faltante, una llamada fabricada, argumentos cambiados | 12 de 12 señaladas, 0 falsos positivos |
| E9 sobrecarga | Ida y vuelta del firmante sobre un socket Unix, almacenamiento de archivos, ejecución rápida en macOS | 0.45 ms p50, 0.91 ms p99 por llamada; 5,356 eventos/s |
| E3 la puerta de regex v1, en un conjunto más difícil | 16 llamadas dañinas y 20 benignas escritas después de las reglas | 12 de 16 detectadas, 1 falsa alarma. Las reglas son trampas, no una caja de arena |
Las dos omisiones de E1 son parte del diseño: un registro no puede ver su propia cola cortada, y quien tenga la clave puede volver a firmarlo. Solo una copia de la cabecera guardada en otro lugar, un testigo, detecta esos casos, por lo que una ejecución sin testigos se verifica como dev. Los conjuntos de pruebas fueron escritos por nosotros, y nadie externo ha revisado aún los modelos de amenazas. Cada experimento, y lo que no se mide: evaluación · | ||
| informe técnico. |
Cómo funciona
- El agente nunca tiene una clave de firma y nunca asigna números de secuencia.
- Cada registro está firmado y lleva el hash del anterior, por lo que un byte modificado falla la verificación en ese registro.
- Nada de lo que el agente informa sobre sí mismo es de confianza: ni su aislamiento, ni su modo de fallo, ni las brechas, ni quién aprobó una llamada.
- Quién puede reescribir el registro determina cuánto vale una ejecución, así que coloca al firmante donde el agente no pueda alcanzarlo. El código del agente es el mismo en todos los modos;
TRACEKIT_SIGNERlo apunta al firmante.
| Dónde se ejecuta el firmante | Quién puede acceder a las claves y al registro | Aislamiento registrado |
|---|---|---|
| Portátil en modo desarrollador | el propio usuario del agente | same-user |
| Portátil en modo sistema (Linux; macOS experimental) | root y el usuario del sistema operativo del firmante | separate-user |
| Contenedor o sidecar de Kubernetes | el uid del firmante y el administrador del nodo | separate-user |
| Firmante central vía HTTPS (o Docker Compose) | los administradores del host del firmante | remote |
El operador que ejecuta el firmante aún podría reescribir su registro con su propia clave; un testigo independiente y un monitor hacen que eso sea visible. Cada modo de extremo a extremo: despliegue. El modelo completo: arquitectura, modelos de amenazas de portátil y servidor.
¿Es para ti?
| Usa Tracekit cuando | Un trazador simple es suficiente cuando |
|---|---|
| Tu agente actúa sobre sistemas reales: un shell, archivos, bases de datos, correo electrónico, pagos, la nube | Solo lee, o se ejecuta en un sandbox desechable |
| Algunas llamadas deben detenerse o retenerse para una persona antes de ejecutarse | Ver lo que sucedió después es suficiente |
| Alguien fuera del equipo tiene que confiar en el registro: un cliente, un auditor, una revisión de incidentes | Solo tu equipo lee los registros, para depurar |
Para depurar un prototipo, un trazador como OpenTelemetry, Langfuse o LangSmith es la herramienta adecuada. Tracekit no lo reemplaza; es el registro que puedes entregar a alguien que no confía en el agente. Cómo se compara con trazadores, bibliotecas de guardarraíles y otros registros a prueba de manipulación, y cuándo es la elección incorrecta: comparaciones.
Pruébalo con nosotros
¿Ejecutas un agente que actúa sobre sistemas reales, con alguien que tiene que aprobarlo: un cliente, un auditor, una aseguradora? Configuraremos Tracekit contigo durante dos semanas, gratis: un agente, en tus máquinas. Al final tendrás un archivo de evidencia verificado para cada ejecución y una revisión por escrito de lo que el agente hizo que no esperabas. Envía un correo a info@cygnuxlabs.com o abre una solicitud de piloto.
Comandos
tracekit demo --server # allow, deny, approve, then a tampered copy fails verification
tracekit up # start the dev signer, or find the running one
tracekit last # export your latest run, pin the dev key, verify it
tracekit view --dev # every run, verified: calls, decisions, gaps, replay, why
tracekit approvals list # calls held for a person; tracekit approvals approve ID
tracekit export --v2 --run ID -o run.tkb # one run as one .tkb file
tracekit verify run.tkb --trust trust.json # check it offline, against the keys and witnesses you pinned
tracekit policy lint policy.yaml # check a policy before the signer loads it
tracekit doctor # check this setup
tracekit init --dev --v2 # wire Claude Code's hooks; add --agent codex, cursor or gemini
El formato de evidencia
- Especificado. Formato de evidencia v2 busca ser lo suficientemente preciso para escribir un verificador independiente, con vectores de prueba normativos.
- Construido sobre estándares. Los registros se firman con Ed25519 sobre JSON canónico RFC 8785. Cada registro es un árbol Merkle RFC 6962, la estructura que usa Certificate Transparency. Los puntos de control son notas firmadas C2SP, y los testigos los cofirman según C2SP tlog-cosignature.
- Autocontenido. Un archivo
.tkbes un zip de registros, pruebas de inclusión, puntos de control y las instantáneas de políticas que decidieron las llamadas. No contiene código de verificación. - Los archivos antiguos siguen verificándose. Los formatos solo crecen, el verificador de cada formato está congelado, y un verificador más antiguo reporta un archivo más nuevo como
UNVERIFIABLE (needs tracekit >= x), nunca comoFAILED.
Verifica un paquete v1 en GitHub Actions con uses: Cygnux-Labs/Tracekit@main (bundle: y key: o witness:).
require-anchor por defecto es true, por lo que un paquete sin anclar falla el paso; establece require-anchor: "false" para solo
reportarlo.
Contribuye
Cada una de estas opciones es útil por sí sola, y ninguna necesita conocer todo el código base:
- Escribe un verificador en otro idioma. El formato de evidencia está especificado y tiene vectores de prueba. Un verificador en Go o Rust escrito solo desde la especificación es la mejor prueba de que la especificación está completa.
- Encuentra una llamada dañina que los paquetes dejen pasar. Añádela a
tests/data/policy/deny/con una regla que la detecte; E17 ejecuta cada caso. - Ejecuta Tracekit en tu propio agente y reporta lo que falló. Hacerlo con dos agentes de código abierto encontró errores reales (caso de estudio).
- Añade un framework. Una integración está completa cuando pasa el contrato de adaptador.
- Intenta romperlo. Encuentra una manipulación o un bypass que E1 y E8 no detecten, y repórtalo de forma privada como describe SECURITY.md. Todos los que encuentren uno son nombrados en el salón de la fama a menos que pidan lo contrario.
Para empezar: make install, luego make check
(contribuyendo). Las tareas más pequeñas están etiquetadas como
buen primer issue. Todos los que participan siguen
el código de conducta.
Documentación
| Para | Empieza aquí |
|---|---|
| Ver cada paso en una instalación limpia | walkthrough · demostraciones grabadas · recorrido del visor |
| Conectar un agente | inicio rápido v2 · agentes de codificación · SDK de TypeScript |
| Poner el firmante fuera de alcance | despliegue · compose · contenedor · Kubernetes · doctor |
| Decidir llamadas | referencia de políticas · aprobaciones · incidentes · webhooks |
| Comprobar evidencia | leyendo un informe de verificación · guía del auditor · testigos · monitor · mapeo de cumplimiento |
| Preguntar por qué ocurrió una acción | tracekit why · su arquitectura |
| Entender el diseño | arquitectura · evaluación · informe técnico · caso de estudio |
| Saber qué es estable | soporte · límites · FAQ · lista de verificación de seguridad · registro de cambios |
| Ejecutar el firmante v1 en portátil | agentes de codificación · firma · integraciones v1 |
Licencia
MIT, Copyright Cygnux Labs. Esta es la versión 1.3.0, y 1.x es la línea compatible. Reporta vulnerabilidades de forma privada como describe SECURITY.md.
Citar
@software{tracekit2026,
author = {{Cygnux Labs}},
title = {Tracekit: the tamper-evident flight recorder for AI agents},
year = {2026},
url = {https://github.com/Cygnux-Labs/Tracekit}
}
Los agentes pueden editar registros. No pueden ocultar la edición. Una estrella no cuesta nada y ayuda a otros equipos a encontrar Tracekit.
Sitio web · Evaluación · Límites · Contribuyendo · Issues
