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
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.
8 de 8ataques de adulteração detectados480 tentativas, com uma testemunha (E1) | 512 de 512chamadas prejudiciais interrompidas11 classes, 1 falso alarme em 695 (E17) | < 1 msadicionado por chamada de ferramenta0,91 ms no p99, ida e volta do assinante (E9) | 8 de 8ataques internos detectadosum 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:
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.
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.
| Garantia | O que você obtém | O que ela precisa |
|---|---|---|
| Integridade das evidências | Um registro que foi editado, excluído, trocado ou inserido falha na verificação nesse registro | Apenas o log assinado. Cortar o final do log, ou reassiná-lo com uma chave roubada, requer uma testemunha para detectar |
| Controle de execução | Cada chamada é verificada antes de executar. Uma chamada negada é bloqueada; uma chamada retida executa somente após um sim, com exatamente os argumentos que foram aprovados | A chamada passa pelo Tracekit: um SDK, um hook ou um gateway. Código que o ignora não é interrompido |
| Garantia independente | Um operador que reescreve ou bifurca seu próprio log é detectado | Uma 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úcleo | O que faz | Medido |
|---|---|---|
| Registrar | Cada 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êncio | 6 de 8 ataques de adulteração detectados pelo log sozinho (E1) |
| Decidir | Permitir, 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 MCP | 512 de 512 chamadas prejudiciais interrompidas, 1 falso alarme em 695 (E17) |
| Aprovar | Uma 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 |
| Provar | tracekit verify verifica o arquivo de uma execução offline contra chaves que você fixou | 8 de 8 ataques internos detectados (E8) |
| Observar | tracekit 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 |
| Experimental | O que faz | Medido |
|---|---|---|
| Testemunha | Testemunhas independentes coassinam cada checkpoint; um monitor observa o log para reescritas e bifurcações | 8 de 8 ataques de adulteração detectados com uma testemunha (E1) |
| Verificação cruzada | O 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 é sinalizado | 12 de 12 discrepâncias semeadas sinalizadas, 0 falsas (E10) |
| Conter | Incidentes 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 explica | 8 de 8 verificações de contenção e 10 de 10 de detecção (E17) |
| Explicar | De onde cada argumento veio, e tracekit why: qual entrada causou uma ação, encontrada reproduzindo a execução sem ela | 6 de 6 causas verdadeiras nomeadas, 0 culpas falsas, um modelo 7B, amostra pequena |
| Mais aprovadores | Uma página web com passkeys, Slack, ou um agente revisor que aprova dentro de limites | 7 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.
| Experimento | Configuração | Resultado |
|---|---|---|
| E1 detecção de adulteração | Logs assinados de 120 registros, 8 ataques, 60 tentativas cada, re-executados em 1.2 | 6 de 8 detectados pelo log sozinho, 8 de 8 com uma testemunha |
| E8 ataques internos | Usuá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 fabricadas | 8 de 8 detectados, um portão de merge em cada pull request |
| E17 pacotes de política | 512 chamadas de ferramenta prejudiciais e 695 benignas em 11 classes, decididas por ambos os mecanismos de regex | 512 de 512 interrompidas; 1 falso alarme, um e-mail de rascunho retido para uma pessoa |
| E10 reconciliação | 30 execuções, 12 com uma discrepância semeada: um hook ausente, uma chamada fabricada, argumentos alterados | 12 de 12 sinalizadas, 0 falsos positivos |
| E9 sobrecarga | Ida e volta do assinante sobre um socket Unix, armazenamento de arquivos, execução rápida no macOS | 0,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ícil | 16 chamadas prejudiciais e 20 benignas escritas após as regras | 12 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
- 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_SIGNERo aponta para o assinante.
| Onde o assinante roda | Quem pode acessar as chaves e o log | Isolamento registrado |
|---|---|---|
| Laptop dev | o próprio usuário do agente | same-user |
| Modo sistema do laptop (Linux; macOS experimental) | root e o usuário do SO do assinante | separate-user |
| Contêiner ou sidecar Kubernetes | o uid do assinante e o administrador do nó | separate-user |
| Assinante central via HTTPS (ou Docker Compose) | os administradores do host do assinante | remote |
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 quando | Um rastreador simples é suficiente quando |
|---|---|
| Seu agente age em sistemas reais: shell, arquivos, bancos de dados, e-mail, pagamentos, nuvem | Ele apenas lê, ou roda em um sandbox descartável |
| Algumas chamadas devem ser interrompidas ou retidas para uma pessoa antes de serem executadas | Ver o que aconteceu depois é suficiente |
| Alguém fora da equipe precisa confiar no registro: um cliente, um auditor, uma revisão de incidente | Apenas 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 comoFAILED.
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
| Para | Comece aqui |
|---|---|
| Ver cada etapa em uma instalação limpa | walkthrough · demos gravadas · tour do visualizador |
| Conectar um agente | início rápido v2 · agentes de codificação · SDK TypeScript |
| Colocar o assinante fora de alcance | implantação · compose · contêiner · Kubernetes · doctor |
| Decidir chamadas | referência de política · aprovações · incidentes · webhooks |
| Verificar evidência | lendo um relatório de verificação · guia do auditor · testemunhas · monitor · mapeamento de conformidade |
| Perguntar por que uma ação aconteceu | tracekit why · sua arquitetura |
| Entender o design | arquitetura · avaliação · relatório técnico · estudo de caso |
| Saber o que é estável | suporte · limites · FAQ · checklist de segurança · changelog |
| Executar o assinante v1 no laptop | agentes 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
