Desempenho

Quanto tempo o zn-gate leva: os hooks dos agentes e o scanner local, com a versão, a data, a máquina e o método de cada medição.

Ver .md

O zn-gate roda na sua máquina, então o custo dele é tempo em cada chamada de ferramenta, não uma ida e volta pela rede. Esta página traz os números medidos, diz de qual versão e de qual dia vem cada um e o que eles não cobrem. Estes números são medições em uma única máquina, não uma promessa da mesma velocidade na sua.

Hooks dos agentes

Toda vez que um agente de código chama uma ferramenta, ele inicia o hook do zn-gate e espera por ele: uma vez antes da chamada (por exemplo, um comando de shell) e outra depois, com a saída da ferramenta.

Medido em 2026-10-17 em um runner ubuntu-latest do GitHub Actions (4 vCPU AMD EPYC 7763) com Node.js 22.23, usando o código de hooks do repositório do zn-gate daquele dia (versão do pacote 1.11.0). Tempos em milissegundos. Um node -e "" vazio leva 25 ms (p50) na mesma máquina.

Agente Evento p50 (ms) p95 (ms)
Claude Code PreToolUse, comando de shell 51 54.7
Codex CLI PreToolUse, comando de shell 52 53.8
Cursor beforeShellExecution 51.7 58.6
Claude Code PostToolUse, 1 KB 63 65
Codex CLI PostToolUse, 1 KB 62.2 65.3
Cursor postToolUse (MCP), 1 KB 62.2 64
Claude Code PostToolUse, 100 KB 67.5 70.4
Codex CLI PostToolUse, 100 KB 67 68.8
Cursor postToolUse (MCP), 100 KB 66.9 68.9
Claude Code PostToolUse, 100 KB com 2 segredos 73.8 76.3
Codex CLI PostToolUse, 100 KB com 2 segredos 74.7 77.5
Cursor postToolUse (MCP), 100 KB com 2 segredos 75.9 77.9
Claude Code PostToolUse, 1000 KB 85.8 89.4
Codex CLI PostToolUse, 1000 KB 86.4 88.5
Cursor postToolUse (MCP), 1000 KB 88.9 92.3

A maior parte desse tempo é a inicialização do Node.js. Como ler a tabela: um comando de shell custa cerca de 50 ms antes de rodar, e um resultado de ferramenta de até 1000 KB, cerca de 90 ms no máximo (p95). O Cursor só deixa o zn-gate reescrever a saída MCP, por isso as linhas pós-chamada dele são de ferramentas MCP. O OpenCode não está na tabela: o plugin do zn-gate roda dentro do processo do OpenCode, então nenhum processo de hook é iniciado.

Como os hooks foram medidos

  • O benchmark inicia node lib/hooks/runner.js <agent> com o evento do agente no stdin, exatamente como o agente faz, e cronometra até o processo terminar.
  • As saídas têm 1 KB, 100 KB (também com dois segredos dentro) e 1000 KB de texto parecido com código-fonte.
  • O cofre está bloqueado, então os valores detectados são redigidos de vez e nenhum processo em segundo plano participa.
  • Cada caso roda 40 vezes depois de uma execução de aquecimento. p95 é o 38º dos 40 tempos (posto mais próximo).
  • Valores falsos são gerados a cada execução. Um caso falha se algum deles voltar do hook, se o hook não conseguiu verificar a saída ou se um caso com segredos não tiver uma marca do zn-gate no lugar deles.

Uma verificação de CI roda este benchmark a cada mudança no código dos hooks. Ela compara o p95 de cada caso dividido pelo tempo de inicialização do Node na mesma execução, de modo que uma máquina mais rápida ou mais lenta muda pouco o resultado, e falha se essa razão passar de 20 % acima da referência guardada.

Scanner local

O scanner é a parte do zn-gate que verifica texto com suas regras e redige segredos. Ele roda dentro do processo, sem rede. Há duas medições, feitas em momentos diferentes em uma máquina da AWS com Intel Xeon Platinum 8259CL. Ambas usaram entradas benignas que o scanner nunca tinha visto (sem cache).

Verificar um resultado de ferramenta (regras e redação de segredos)

Medido em 2026-10-11 com o zn-gate 1.4.1, em uma máquina da AWS de 2 vCPU com Node.js 24. É a chamada completa a check_tool_result, em processo. p50 é a mediana de 3 execuções e p99 a pior das 3.

Tamanho da entrada p50 (ms) p99 (ms)
200 B 0.045 0.19
4 KB 0.30 0.81
64 KB 3.8 6.7

Só as regras

Medido em 2026-10-10 com o zn-gate 1.4.0 (versão das regras 2026-09-29.1), em uma máquina de 2,5 GHz com Node.js 24.21, 20.000 amostras por tamanho. É a verificação de regras sem redação de segredos.

Tamanho da entrada p50 (ms) p95 (ms)
200 caracteres 0.013 0.028
1.000 caracteres 0.047 0.077
4.000 caracteres 0.173 0.372
16.000 caracteres 0.681 1.179

As regras levam menos de 0,1 ms (p50) para entradas de até cerca de 1.000 caracteres. O tempo cresce em proporção ao tamanho da entrada, então não aplique esse número a textos bem mais longos.

Limites

  • Os números dos hooks vêm de um único runner de CI. No seu computador os tempos serão diferentes; a maior parte da diferença acompanha a inicialização do Node.js, não o zn-gate.
  • Os números do scanner foram medidos com o zn-gate 1.4.0 e 1.4.1. Não foram medidos de novo em versões posteriores e esta página não os apresenta como tal.
  • Os números do scanner valem para texto que o scanner nunca viu; são em processo e não incluem a inicialização do Node.js nem do agente.
  • Esta página não cobre a verificação opcional na nuvem, que adiciona uma chamada de rede e não faz parte dos números locais. Nenhuma latência de ponta a ponta dela é publicada aqui.
  • Os números são medianas e percentis altos de poucas execuções em uma máquina cada, não garantias.

Os scripts do benchmark e os arquivos de medição estão na pasta bench do repositório do zn-gate. Páginas relacionadas: Redação de segredos e Configuração.