Usar o zn-gate no Windows
Instale o zn-gate no Windows pelo PowerShell ou pelo Git Bash, onde ele guarda seus arquivos (%USERPROFILE%\.zn), como os hooks dos agentes rodam no Windows, as versões mínimas e os limites conhecidos.
O zn-gate roda nativamente no Windows. Esta página mostra o que muda em relação ao macOS e ao Linux: instalar pelo PowerShell ou pelo Git Bash, onde o zn guarda seus arquivos, como os hooks dos agentes iniciam, quais versões você precisa e o que não está coberto.
O que você precisa
| Item | Versão | Para quê |
|---|---|---|
| Node.js | 18 ou mais recente (LTS); 20.12 ou mais recente para o plugin do Claude Code | Executa o zn-gate e cada hook. Precisa estar no seu PATH |
| Claude Code | 2.1.295 ou mais recente; 2.1.299 ou mais recente recomendado no Windows | 2.1.295 é o mínimo para o plugin. Veja os limites conhecidos sobre a 2.1.299 |
| Git for Windows | Qualquer versão recente | Necessário para adicionar o plugin do Claude Code pelo GitHub. O Claude Code também executa os comandos dos hooks com o Git Bash |
Instale o Node.js em nodejs.org, abra um terminal novo e confira node --version. O instalador nativo do Claude Code não inclui o Node.js: sem ele, o Claude Code avisa no início da sessão que não encontrou o node, os prompts são bloqueados e as chamadas de ferramentas rodam sem verificação.
Instalar no PowerShell
Execute você mesmo, em uma janela normal do PowerShell e sem argumentos:
npx.cmd -y zn-gate init
Ele encontra o Claude Code, o Codex CLI, o Cursor e o OpenCode, mostra a configuração de cada um, executa cada passo depois que você confirma e termina com uma verificação.
Se o PowerShell disser "running scripts is disabled on this system": a política de execução padrão bloqueia npm.ps1 e npx.ps1. Escolha uma opção:
- Use as versões
.cmd:npm.cmd,npx.cmdezn.cmd(por exemplo,npm.cmd install -g zn-gate). - Execute os comandos no Prompt de Comando.
- Permita scripts locais só para a sua conta:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned.
Para o Claude Code, o recomendado é o plugin:
claude plugin marketplace add usezn/zn
claude plugin install zn-gate@usezn
Para o Codex CLI, o Cursor ou o OpenCode, instale o zn-gate e depois os hooks dele:
npm.cmd install -g zn-gate
zn.cmd hooks install codex # ou: cursor, opencode
Instalar no Git Bash
A política de execução do PowerShell não afeta o Git Bash, então os comandos são os mesmos do macOS e do Linux:
npx -y zn-gate init
Um agente de cada vez: npm install -g zn-gate e depois zn hooks install codex (ou cursor, opencode).
O pacote Python, para agentes que você mesmo constrói, é instalado em um ambiente virtual. No PowerShell:
python -m venv .venv
.venv\Scripts\pip install zn-gate
Onde o zn guarda seus arquivos
O zn guarda seu estado em uma pasta .zn no seu perfil de usuário: %USERPROFILE%\.zn (por exemplo, C:\Users\voce\.zn). Defina a variável de ambiente ZN_HOME para usar outra pasta.
| O quê | Onde |
|---|---|
| O cofre criptografado (segredos) | %USERPROFILE%\.zn\vault\ (secrets.age) |
| Arquivos de sessão enquanto o cofre está desbloqueado | %USERPROFILE%\.zn\run\ |
| O registro de auditoria local do cofre | %USERPROFILE%\.zn\audit.jsonl |
O registro que o zn-gate evidence lê |
%USERPROFILE%\.zn\evidence.jsonl |
| Ajustes opcionais dos hooks | %USERPROFILE%\.zn\config.json |
A chave do cofre fica no Gerenciador de Credenciais do Windows (Windows Credential Manager). Quando não há chaveiro, o zn pede uma senha (passphrase) no lugar (zn unlock --backend passphrase). O zn não define modos de arquivo do Unix no Windows: valem as permissões da pasta do seu perfil de usuário.
Onde cada agente guarda a configuração que o zn hooks install escreve:
| Agente | No Windows |
|---|---|
| Claude Code | %USERPROFILE%\.claude\settings.json (ou a pasta em CLAUDE_CONFIG_DIR) |
| Codex CLI | %USERPROFILE%\.codex\hooks.json (ou a pasta em CODEX_HOME) |
| Cursor | %USERPROFILE%\.cursor\hooks.json |
| OpenCode | plugins\zn-gate.js em %USERPROFILE%\.config\opencode (ou na pasta sob XDG_CONFIG_HOME) |
Os agentes não podem ler nem alterar %USERPROFILE%\.zn: o zn bloqueia, inclusive quando um comando escreve $env:USERPROFILE\.zn ou %USERPROFILE%\.zn.
Os arquivos de política da organização que podem desligar os hooks ficam em C:\Program Files\ClaudeCode (Claude Code) e %ProgramData%\OpenAI\Codex (Codex). O zn-gate check e o zn hooks install leem esses arquivos e avisam quando algum deles impede o zn de funcionar.
Como os hooks rodam no Windows
Cada hook é um processo curto do Node.js: o agente inicia o node, que executa o script de hook do zn-gate com o evento na entrada padrão.
| Agente | Como o hook inicia |
|---|---|
| Claude Code, plugin | O node executa o lançador do plugin, que antes verifica os arquivos fixados do zn-gate |
Claude Code, zn hooks install |
O Claude Code executa o comando com o Git Bash (com o PowerShell só se o Git Bash não estiver instalado). O zn escreve o caminho do node e o do script de hook entre aspas simples e com barras normais, então um caminho com espaços ou caracteres especiais nunca é interpretado |
| Codex CLI | O comando do Windows passa pelo cmd.exe e inicia powershell.exe -NoProfile -NonInteractive com a mesma chamada ao node |
| Cursor | No Windows, o Cursor costuma envolver o comando no PowerShell. O zn escreve a mesma forma com powershell.exe, que o cmd.exe, o PowerShell e o Git Bash executam do mesmo jeito |
| OpenCode | O plugin inicia o node com uma lista de argumentos, sem shell |
Na nossa CI, o plugin acrescenta uma mediana de 51 a 90 ms por chamada de hook no Windows, além dos 42 a 92 ms que o hook leva sem o plugin.
O processo em segundo plano do cofre conversa com os hooks por um pipe nomeado do Windows (um socket Unix no macOS e no Linux). Cada conexão precisa provar que conhece a chave de sessão guardada em %USERPROFILE%\.zn\run\. A caixa de confirmação do cofre, o Gerenciador de Credenciais e o zn secret set --clipboard iniciam o Windows PowerShell 5.1 do sistema, localizado pelo próprio sistema e não pela variável SystemRoot, que um agente poderia alterar. Sem ele, a caixa não aparece (as aprovações são recusadas) e o Gerenciador de Credenciais para com um erro que sugere zn unlock --backend passphrase.
Executar comandos com zn run
- Um programa
.cmdou.bat(por exemplo, uma CLI instalada com npm) inicia somente pelocmd.exedo sistema. O zn recusa um caminho de programa que contenha%,!ou", porque ocmd.exeos expandiria. - Aprovar um arquivo
.cmdou.bataprova esse arquivo, não os programas que ele inicia pelo nome: um shim do npm executa onodeque estiver no seuPATH. Prefira aprovar o próprio programa ou usar a ferramentasecrets_http_requestpara APIs web. - Os programas são localizados como o Windows faz, pelo
PATHEXT: uma instalação do npm coloca um script chamadoclaudeao lado doclaude.cmd, e o zn escolhe o que o Windows consegue executar. - Um comando do PowerShell que já passa por
zn-gate run -- ...com um marcador de segredo é deixado como está pelo hook. Antes da 1.12.0, ele era recusado.
Limites conhecidos
- WSL: não testado. Não executamos o zn-gate dentro do Subsistema do Windows para Linux, então esta página não diz nada sobre ele.
- Claude Code é o caminho que testamos no Windows, incluindo a ferramenta PowerShell dele.
- Codex CLI: executamos o comando do hook manualmente no PowerShell e no
cmd.exe. Ele não faz parte dos nossos testes automáticos. - Cursor e OpenCode: não testados no Windows. No OpenCode, o envoltório do
zn runé escrito para bash: com o PowerShell como shell do OpenCode, um comando com marcador de segredo falha em vez de rodar (nenhum valor é exposto). zn-gate check: no Windows, ele não inicia um hook instalado comozn hook <agent>. Em vez disso, verifica as regras do zn para esse agente e diz isso na saída.- Claude Code anterior à 2.1.299, sem o Git for Windows: o
PreToolUsedeixava as chamadas passarem quando o hook não conseguia rodar. Atualize o Claude Code ou instale o Git for Windows. - Um hook que não consegue rodar (por exemplo, falta o
node) deixa as chamadas de ferramentas sem verificação no Claude Code e no Codex, e bloqueia os prompts no Claude Code. O que cada agente suporta. - Um comando de shell, PowerShell ou Monitor com mais de 100 KB é bloqueado, porque o zn não consegue verificá-lo no tempo que o agente espera pelo hook.
Confira se está funcionando
Abra um terminal novo e execute:
npx.cmd -y zn-gate check
Ele deve mostrar OK para cada agente que você configurou. O que a saída significa.
Leitura adicional
- Instalar o zn-gate: todos os agentes e a configuração com um só comando.
- Guarde os valores do seu .env no cofre criptografado