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

Tracekit: the tamper-evident flight recorder for AI agents

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.

PyPI Works with 19 agents and frameworks CI MIT licence

8 de 8

ataques de manipulación detectados
480 pruebas, con un testigo (E1)

512 de 512

llamadas dañinas detenidas
11 clases, 1 falsa alarma en 695 (E17)

< 1 ms

añadido por llamada de herramienta
0.91 ms en p99, ida y vuelta del firmante (E9)

8 de 8

ataques internos detectados
una 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:

What happened: a support ticket hides an instruction, the agent deletes 43 of 128 orders, then edits its log and Tracekit's record so the delete reads as a lookup. The agent's own log shows two lookups of order 1042; grep finds no DELETE, and the database holds 85 orders: it looks clean. Tracekit, the same run: the 13:51:59 run_sql call is flagged ACME-F001 deleting rows, and when the run closed verification failed with seq 7: hash does not match the event. Caught at record 7.

A ticket with a hidden instruction makes a support agent delete 43 orders, then edit its own log and Tracekit's record of the delete. grep finds no delete; Tracekit marks the run FAILED because record 7 no longer matches its hash.

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.

Works with Claude Code, Codex CLI, Cursor and Gemini CLI; the Python and TypeScript SDKs; the OpenAI Agents SDK, Claude Agent SDK, LangChain, LangGraph, MCP, CrewAI, Browser Use, Pydantic AI, the Vercel AI SDK and OpenTelemetry

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íaQué obtienesQué necesita
Integridad de la evidenciaUn registro que fue editado, eliminado, intercambiado o insertado falla la verificación en ese registroSolo el registro firmado. Cortar el final del registro, o volver a firmarlo con una clave robada, requiere un testigo para detectarlo
Control de ejecuciónCada 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 aprobaronLa llamada pasa por Tracekit: un SDK, un hook o una puerta de enlace. El código que lo omite no se detiene
Aseguramiento independienteUn operador que reescribe o bifurca su propio registro es detectadoUn 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úcleoQué haceMedido
RegistrarCada 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 silencio6 de 8 ataques de manipulación detectados solo por el registro (E1)
DecidirPermitir, 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 MCP512 de 512 llamadas dañinas detenidas, 1 falsa alarma en 695 (E17)
AprobarUna 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
Probartracekit verify verifica el archivo de una ejecución sin conexión contra claves que fijaste8 de 8 ataques internos detectados (E8)
Observartracekit view: cada ejecución verificada, llamadas bloqueadas y retenidas, aprobaciones, brechas, reproducción y una revisión de ejecución (visor)No medido
ExperimentalQué haceMedido
TestigoTestigos independientes cofirman cada punto de control; un monitor observa el registro para detectar reescrituras y bifurcaciones8 de 8 ataques de manipulación detectados con un testigo (E1)
Verificación cruzadaEl 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ñala12 de 12 discrepancias sembradas señaladas, 0 falsas (E10)
ContenerIncidentes 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 explica8 de 8 verificaciones de contención y 10 de 10 de detección (E17)
ExplicarDe dónde vino cada argumento, y tracekit why: qué entrada causó una acción, encontrada reproduciendo la ejecución sin ella6 de 6 causas verdaderas nombradas, 0 culpas falsas, un modelo de 7B, muestra pequeña
Más aprobadoresUna página web con passkeys, Slack, o un agente revisor que aprueba dentro de límites7 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.

Tamper detection, 60 trials per attack. The signed log alone catches editing, deleting, swapping or inserting a record, re-chaining without the key and a torn last line in 60 of 60 trials, and misses truncating the tail and re-signing with the key (0 of 60). With a witness, all eight are caught in 60 of 60.
ExperimentoConfiguraciónResultado
E1 detección de manipulaciónRegistros firmados de 120 registros, 8 ataques, 60 pruebas cada uno, re-ejecutado en 1.26 de 8 detectados solo por el registro, 8 de 8 con un testigo
E8 ataques internosUsuarios reales sin privilegios contra un firmante de modo sistema en Linux: un firmante señuelo, un firmante detenido, una política intercambiada, ejecuciones fabricadas8 de 8 detectados, una puerta de fusión en cada solicitud de extracción
E17 paquetes de política512 llamadas de herramientas dañinas y 695 benignas en 11 clases, decididas por ambos motores de regex512 de 512 detenidas; 1 falsa alarma, un borrador de correo retenido para una persona
E10 conciliación30 ejecuciones, 12 con una discrepancia sembrada: un hook faltante, una llamada fabricada, argumentos cambiados12 de 12 señaladas, 0 falsos positivos
E9 sobrecargaIda y vuelta del firmante sobre un socket Unix, almacenamiento de archivos, ejecución rápida en macOS0.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ícil16 llamadas dañinas y 20 benignas escritas después de las reglas12 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

1. Your agent, through its SDK or hook, asks the signer to decide each call; it holds a run token, never a key. 2. The signer, out of the agent's reach, allows, denies or asks a person, and signs every call, decision and result into one hash chain per run. 3. Witnesses cosign each checkpoint. 4. Each run exports as run.tkb, which tracekit verify checks offline: VERIFIED, or FAILED at the record that changed.
  • 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_SIGNER lo apunta al firmante.
Dónde se ejecuta el firmanteQuién puede acceder a las claves y al registroAislamiento registrado
Portátil en modo desarrolladorel propio usuario del agentesame-user
Portátil en modo sistema (Linux; macOS experimental)root y el usuario del sistema operativo del firmanteseparate-user
Contenedor o sidecar de Kubernetesel uid del firmante y el administrador del nodoseparate-user
Firmante central vía HTTPS (o Docker Compose)los administradores del host del firmanteremote

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 cuandoUn trazador simple es suficiente cuando
Tu agente actúa sobre sistemas reales: un shell, archivos, bases de datos, correo electrónico, pagos, la nubeSolo lee, o se ejecuta en un sandbox desechable
Algunas llamadas deben detenerse o retenerse para una persona antes de ejecutarseVer 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 incidentesSolo 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 .tkb es 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 como FAILED.

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

ParaEmpieza aquí
Ver cada paso en una instalación limpiawalkthrough · demostraciones grabadas · recorrido del visor
Conectar un agenteinicio rápido v2 · agentes de codificación · SDK de TypeScript
Poner el firmante fuera de alcancedespliegue · compose · contenedor · Kubernetes · doctor
Decidir llamadasreferencia de políticas · aprobaciones · incidentes · webhooks
Comprobar evidencialeyendo un informe de verificación · guía del auditor · testigos · monitor · mapeo de cumplimiento
Preguntar por qué ocurrió una accióntracekit why · su arquitectura
Entender el diseñoarquitectura · evaluación · informe técnico · caso de estudio
Saber qué es establesoporte · límites · FAQ · lista de verificación de seguridad · registro de cambios
Ejecutar el firmante v1 en portátilagentes 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