Tracekit MCP gateway

Proxy MCP auto-hospedado: agentes se conectam a ele em vez dos seus servidores MCP, e um assinante Tracekit permite, bloqueia ou retém cada chamada de ferramenta para uma pessoa, depois a assina em um log que você pode verificar offline. As credenciais upstream permanecem no gateway. Requer um assinante Tracekit em execução. MIT.

Documentação

Tracekit: the tamper-evident flight recorder for AI agents

Agentes podem editar logs. Eles não conseguem esconder a edição.

O Tracekit verifica cada chamada de ferramenta que seu agente faz antes de executá-la, assina cada chamada e decisão em uma cadeia de hash, e fornece a você um arquivo .tkb por execução que qualquer pessoa pode verificar offline.

PyPI Works with 19 agents and frameworks CI MIT licence

8 de 8

ataques de adulteração detectados
480 tentativas, com uma testemunha (E1)

512 de 512

chamadas prejudiciais interrompidas
11 classes, 1 falso alarme em 695 (E17)

< 1 ms

adicionado por chamada de ferramenta
0,91 ms no p99, ida e volta do assinante (E9)

8 de 8

ataques internos detectados
um portão de merge em cada PR (E8)

Construído como Certificate Transparency: registros assinados em um log somente de acréscimo que testemunhas independentes coassinam
Formato de arquivo aberto · verificadores em Python e TypeScript · MIT · roda em suas próprias máquinas

Experimente · Adicione ao seu agente · O que ele prova · O que contém · Prova · Como funciona · Pilote · Contribua · Documentação


Quando um agente faz algo que não deveria, você faz três perguntas: o que ele fez, era permitido, e você pode confiar no registro? O log do próprio agente não responde à terceira, porque o agente pode editá-lo. Aqui está uma execução, registrada das duas formas:

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.

A mesma execução, registrada: o banco de dados, o assinante, o visualizador e ambas as edições são reais; o modelo é roteirizado. Assista com som (1:47)

Nesta demonstração, o assinante rodou como o próprio usuário do agente (modo de desenvolvimento), então um agente que soubesse como poderia ter lido a chave e reassinado o log. Execute o assinante onde o agente não pode alcançá-lo, com uma testemunha, e ele não conseguirá.

Experimente

uvx --from tracekit-ai tracekit demo --server

Sem chave de API e nada para instalar com uv. De um cache vazio em um Mac, levou 5 segundos (10 com pip install tracekit-ai em um venv novo). O pacote é tracekit-ai: tracekit no PyPI é um projeto não relacionado. Um agente roteirizado faz três chamadas, e você deve 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.

A exclusão foi negada antes de executar, a chamada retida executou após uma aprovação, e a execução foi verificada. Então a demonstração reescreveu a negação como permitida em uma cópia, e a verificação falhou no registro que ela alterou.

Adicione ao seu agente

Três linhas:

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 um assinante de desenvolvimento (ou reutiliza o que está em execução) e controla e registra cada chamada de ferramenta e modelo dos frameworks que encontra. tracekit last exporta sua execução mais recente, verifica-a e informa onde está. tracekit view --dev mostra cada execução. Em uma máquina limpa, o exemplo LangGraph (um modelo simulado, sem chave de API) instalou, executou e verificou em 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

Estável: Claude Code, o OpenAI Agents SDK, LangChain / LangGraph, o Claude Agent SDK e MCP. Experimental: Codex CLI, Cursor, Gemini CLI, CrewAI, Browser Use, Pydantic AI, Google ADK, Haystack, LlamaIndex, Microsoft Agent Framework, Strands Agents e o TypeScript SDK. Configuração: agentes de codificação · OpenAI Agents SDK · Claude Agent SDK · LangChain / LangGraph · MCP · CrewAI · Browser Use · Pydantic AI · Google ADK · Haystack · LlamaIndex · Microsoft Agent Framework · Strands Agents · TypeScript · Vercel AI SDK · OpenTelemetry · qualquer outro agente

Outras formas de acesso: agentes de codificação, sem uv, a demonstração do porquê, os pacotes de exemplo, TypeScript

Agentes de codificação: tracekit init --dev --v2 conecta os hooks do Claude Code a um assinante de desenvolvimento; adicione --agent codex, cursor ou gemini para os outros (experimental). Sem uv: pip install tracekit-ai, depois tracekit demo --server. --why (experimental) mostra um e-mail retido cuja causa é encontrada por reprodução e citada por seu registro assinado:

tracekit demo --server                # exit 0
tracekit demo --why                   # exit 0
tracekit init --dev --v2

A partir de um checkout, os pacotes de exemplo fornecidos (v1) verificam com o verificador sozinho (pip install --no-deps tracekit-ai é suficiente), e python examples/v2/langchain/agent.py --scripted executa um agente LangGraph com um 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 precisa de Node 18 ou mais recente: npm install @cygnuxlabs/tracekit, e npx @cygnuxlabs/tracekit up inicia um assinante de desenvolvimento sem Python em Macs com Apple Silicon, Linux e Windows (TypeScript SDK). Python 3.9 a 3.13; as integrações de framework precisam de 3.10 ou mais recente.

O que ele prova

Três garantias. Elas estão relacionadas, mas uma não dá as outras, e cada uma precisa de algo diferente.

GarantiaO que você obtémO que ela precisa
Integridade das evidênciasUm registro que foi editado, excluído, trocado ou inserido falha na verificação nesse registroApenas o log assinado. Cortar o final do log, ou reassiná-lo com uma chave roubada, requer uma testemunha para detectar
Controle de execuçãoCada chamada é verificada antes de executar. Uma chamada negada é bloqueada; uma chamada retida executa somente após um sim, com exatamente os argumentos que foram aprovadosA chamada passa pelo Tracekit: um SDK, um hook ou um gateway. Código que o ignora não é interrompido
Garantia independenteUm operador que reescreve ou bifurca seu próprio log é detectadoUma testemunha que o operador não controla, e um monitor. Ambos são experimentais, e nenhuma testemunha pública está em execução ainda

Limites

  • O modo de desenvolvimento não protege nada contra um agente que roda como você. Execuções de desenvolvimento dizem isolation: same-user (FAQ).
  • Uma execução verificada prova que o registro está intacto: não a intenção, não que um resultado de ferramenta relatado é verdadeiro, e não que cada ação foi capturada (FAQ).
  • Ações fora do caminho de captura não deixam registro, como um subprocesso que um hook nunca vê ou código que ignora o adaptador (adaptadores).
  • Regras de política correspondem a texto e nomes de ferramentas. Um agente determinado pode reformular um comando; a proteção é o isolamento do assinante (referência de política).
  • Compromissos ocultam conteúdo, não tempo, tamanhos ou contagens (privacidade).

O que cada implantação garante, do modo de desenvolvimento a um assinante que o agente não pode alcançar: garantias. Cada limite, com o que fazer sobre ele: limites. Como ele se mapeia para o EU AI Act, ISO/IEC 42001, o NIST AI RMF e OWASP: conformidade.

O que contém

Um assinante. O núcleo é estável e é endurecido primeiro. O resto é enviado no mesmo pacote como experimental: funciona e é testado, mas pode mudar entre versões (o que é estável).

NúcleoO que fazMedido
RegistrarCada chamada de ferramenta, decisão e resultado em uma cadeia de hash assinada por execução. Um evento perdido se torna uma lacuna assinada, nunca silêncio6 de 8 ataques de adulteração detectados pelo log sozinho (E1)
DecidirPermitir, negar ou reter cada chamada para uma pessoa, antes de executar. Pacotes para shell, arquivos, SQL, HTTP, CLIs de nuvem, navegadores, e-mail, mensagens, pagamentos, segredos e MCP512 de 512 chamadas prejudiciais interrompidas, 1 falso alarme em 695 (E17)
AprovarUma chamada retida executa somente após um sim da linha de comando, vinculada aos seus argumentos exatos e usada uma vez (aprovações)Argumentos editados, um snapshot reproduzido ou a aprovação de outra execução: recusados, nos testes de contrato que toda integração de framework estável executa
Provartracekit verify verifica o arquivo de uma execução offline contra chaves que você fixou8 de 8 ataques internos detectados (E8)
Observartracekit view: cada execução verificada, chamadas bloqueadas e retidas, aprovações, lacunas, reprodução e uma revisão de execução (visualizador)Não medido
ExperimentalO que fazMedido
TestemunhaTestemunhas independentes coassinam cada checkpoint; um monitor observa o log para reescritas e bifurcações8 de 8 ataques de adulteração detectados com uma testemunha (E1)
Verificação cruzadaO assinante compara as chamadas que o modelo pediu, como um gateway LLM ou a transcrição da sessão as viu, com as chamadas que o agente relatou. Um hook ignorado ou uma chamada inventada é sinalizado12 de 12 discrepâncias semeadas sinalizadas, 0 falsas (E10)
ConterIncidentes assinados retêm ou colocam em quarentena uma execução. Ferramentas rodam com credenciais que o agente nunca detém (executor, gateway MCP). Um observador de saída sinaliza tráfego que nenhuma chamada explica8 de 8 verificações de contenção e 10 de 10 de detecção (E17)
ExplicarDe onde cada argumento veio, e tracekit why: qual entrada causou uma ação, encontrada reproduzindo a execução sem ela6 de 6 causas verdadeiras nomeadas, 0 culpas falsas, um modelo 7B, amostra pequena
Mais aprovadoresUma página web com passkeys, Slack, ou um agente revisor que aprova dentro de limites7 de 7 casos de abuso contra aprovadores de agente detectados (E18)

Prova

Nossos próprios experimentos: pequenos, sintéticos e escritos por nós. Nada arredondado. As falhas permanecem.

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.
ExperimentoConfiguraçãoResultado
E1 detecção de adulteraçãoLogs assinados de 120 registros, 8 ataques, 60 tentativas cada, re-executados em 1.26 de 8 detectados pelo log sozinho, 8 de 8 com uma testemunha
E8 ataques internosUsuários reais sem privilégios contra um assinante Linux em modo de sistema: um assinante falso, um assinante interrompido, uma política trocada, execuções fabricadas8 de 8 detectados, um portão de merge em cada pull request
E17 pacotes de política512 chamadas de ferramenta prejudiciais e 695 benignas em 11 classes, decididas por ambos os mecanismos de regex512 de 512 interrompidas; 1 falso alarme, um e-mail de rascunho retido para uma pessoa
E10 reconciliação30 execuções, 12 com uma discrepância semeada: um hook ausente, uma chamada fabricada, argumentos alterados12 de 12 sinalizadas, 0 falsos positivos
E9 sobrecargaIda e volta do assinante sobre um socket Unix, armazenamento de arquivos, execução rápida no macOS0,45 ms p50, 0,91 ms p99 por chamada; 5.356 eventos/s
E3 o portão de regex v1, em um conjunto mais difícil16 chamadas prejudiciais e 20 benignas escritas após as regras12 de 16 detectadas, 1 falso alarme. Regras são alarmes, não uma sandbox
As duas falhas E1 são do projeto: um log não consegue ver seu próprio final cortado, e quem detém a chave pode assiná-lo novamente. Somente
uma cópia do cabeçalho mantida em outro lugar, uma testemunha, captura essas falhas, então uma execução sem testemunha verifica como dev. Os conjuntos de teste
foram escritos por nós, e ninguém de fora revisou os modelos de ameaças ainda. Cada experimento, e o que não é
medido: avaliação ·
relatório técnico.

Como 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.
  • O agente nunca detém uma chave de assinatura e nunca atribui números de sequência.
  • Cada registro é assinado e carrega o hash do anterior, então um byte alterado falha na verificação naquele registro.
  • Nada que o agente reporta sobre si mesmo é confiável: nem seu isolamento, nem seu modo de falha, nem lacunas, nem quem aprovou uma chamada.
  • Quem pode reescrever o log decide o valor de uma execução, então coloque o assinante onde o agente não possa alcançá-lo. O código do agente é o mesmo em todos os modos; TRACEKIT_SIGNER o aponta para o assinante.
Onde o assinante rodaQuem pode acessar as chaves e o logIsolamento registrado
Laptop devo próprio usuário do agentesame-user
Modo sistema do laptop (Linux; macOS experimental)root e o usuário do SO do assinanteseparate-user
Contêiner ou sidecar Kuberneteso uid do assinante e o administrador do nóseparate-user
Assinante central via HTTPS (ou Docker Compose)os administradores do host do assinanteremote

O operador que executa o assinante ainda poderia reescrever seu log com sua própria chave; uma testemunha independente e um monitor tornam isso visível. Cada modo de ponta a ponta: implantação. O modelo completo: arquitetura, modelos de ameaças de laptop e servidor.

É para você?

Use Tracekit quandoUm rastreador simples é suficiente quando
Seu agente age em sistemas reais: shell, arquivos, bancos de dados, e-mail, pagamentos, nuvemEle apenas lê, ou roda em um sandbox descartável
Algumas chamadas devem ser interrompidas ou retidas para uma pessoa antes de serem executadasVer o que aconteceu depois é suficiente
Alguém fora da equipe precisa confiar no registro: um cliente, um auditor, uma revisão de incidenteApenas sua equipe lê os logs, para depuração

Para depurar um protótipo, um rastreador como OpenTelemetry, Langfuse ou LangSmith é a ferramenta certa. Tracekit não substitui um; é o registro que você pode entregar a alguém que não confia no agente. Como ele se compara a rastreadores, bibliotecas de guardrail e outros logs à prova de adulteração, e quando é a escolha errada: comparações.

Pilote conosco

Executando um agente que age em sistemas reais, com alguém que precisa aprovar: um cliente, um auditor, uma seguradora? Vamos configurar Tracekit com você por duas semanas, gratuitamente: um agente, nas suas máquinas. No final, você terá um arquivo de evidência verificado para cada execução e uma revisão por escrito do que o agente fez que você não esperava. Envie um e-mail para info@cygnuxlabs.com ou abra uma solicitação 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

O formato de evidência

  • Especificado. Formato de evidência v2 visa ser preciso o suficiente para escrever um verificador independente, com vetores de teste normativos.
  • Construído sobre padrões. Registros são assinados com Ed25519 sobre JSON canônico RFC 8785. Cada log é uma árvore Merkle RFC 6962, a estrutura que Certificate Transparency usa. Checkpoints são notas assinadas C2SP, e testemunhas co-assinam conforme tlog-cosignature C2SP.
  • Autocontido. Um arquivo .tkb é um zip de registros, provas de inclusão, checkpoints e os snapshots de política que decidiram as chamadas. Ele não contém código de verificação.
  • Arquivos antigos continuam verificando. Formatos apenas crescem, o verificador de cada formato é congelado, e um verificador mais antigo reporta um arquivo mais novo como UNVERIFIABLE (needs tracekit >= x), nunca como FAILED.

Verifique um bundle v1 em GitHub Actions com uses: Cygnux-Labs/Tracekit@main (bundle: e key: ou witness:). require-anchor tem como padrão true, então um bundle sem ancoragem falha na etapa; defina require-anchor: "false" para apenas reportá-lo.

Contribua

Cada um destes é útil por si só, e nenhum precisa conhecer todo o código:

  • Escreva um verificador em outro idioma. O formato de evidência é especificado e tem vetores de teste. Um verificador em Go ou Rust escrito apenas a partir da especificação é o melhor teste de que a especificação está completa.
  • Encontre uma chamada prejudicial que os pacotes deixam passar. Adicione-a a tests/data/policy/deny/ com uma regra que a capture; E17 executa cada caso.
  • Execute Tracekit no seu próprio agente e relate o que quebrou. Fazer isso com dois agentes de código aberto encontrou bugs reais (estudo de caso).
  • Adicione um framework. Uma integração está concluída quando passa no contrato de adaptador.
  • Tente quebrá-lo. Encontre uma adulteração ou um bypass que E1 e E8 não detectam, e relate-o em particular como SECURITY.md descreve. Todos que encontrarem um são nomeados no hall da fama, a menos que peçam para não ser.

Para começar: make install, depois make check (contribuindo). Tarefas menores são rotuladas como good first issue. Todos que participam seguem o código de conduta.

Documentação

ParaComece aqui
Ver cada etapa em uma instalação limpawalkthrough · demos gravadas · tour do visualizador
Conectar um agenteinício rápido v2 · agentes de codificação · SDK TypeScript
Colocar o assinante fora de alcanceimplantação · compose · contêiner · Kubernetes · doctor
Decidir chamadasreferência de política · aprovações · incidentes · webhooks
Verificar evidêncialendo um relatório de verificação · guia do auditor · testemunhas · monitor · mapeamento de conformidade
Perguntar por que uma ação aconteceutracekit why · sua arquitetura
Entender o designarquitetura · avaliação · relatório técnico · estudo de caso
Saber o que é estávelsuporte · limites · FAQ · checklist de segurança · changelog
Executar o assinante v1 no laptopagentes de codificação · assinatura · integrações v1

Licença

MIT, Copyright Cygnux Labs. Esta é a versão 1.3.0, e 1.x é a linha suportada. Reporte vulnerabilidades em particular como SECURITY.md descreve.

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}
}

Agentes podem editar logs. Eles não podem esconder a edição. Uma estrela não custa nada e ajuda outras equipes a encontrar Tracekit.

Website · Avaliação · Limites · Contribuindo · Issues