
node9-proxy v2.8.3
A Camada de Segurança de Execução para a Era dos Agentes. Fornecendo governança determinística "Sudo" e logs de auditoria para agentes de IA autônomos.
🛡️ Node9
O que o seu agente de IA realmente fez? Descubra.
O Node9 fica entre o seu agente de IA e as ferramentas que ele pode usar — descubra o que ele já vem fazendo, proteja contra ações arriscadas em tempo real e revise o que aconteceu em qualquer janela de tempo.
Funciona com Claude Code · Codex CLI · Antigravity (agy) · GitHub Copilot CLI · Gemini CLI · Cursor · Windsurf · VSCode · Claude Desktop · Opencode · Pi · Hermes Agent · qualquer servidor MCP.
O que o Node9 faz
- 🔍 Descubra — examine todas as sessões de IA passadas em busca de vazamentos de credenciais, loops de agente, operações bloqueadas e todos os segredos em disco que um agente poderia alcançar agora
- 🛡 Proteja — revise ou bloqueie comandos arriscados antes que sejam executados —
rm -rf,git push --force,DROP TABLE, leituras de credenciais,curl | bash, vazamentos de chaves AWS/GitHub/Stripe - 📊 Revise — relatório por janela de período (hoje / semana / mês / 90 dias) — custo por agente, principais ferramentas, escudos acionados, raio de impacto
Varredura retrospectiva
Esta é a minha própria máquina — 90 dias enquanto construía o Node9. Pontuação 25/100, 5 arquivos de credenciais que um agente de IA poderia alcançar agora.```bash npx node9-ai scan # before installation, runs in ~10s, nothing uploads node9 scan # after installation, same output
<p align="center">
Node9 scan scorecard
</p>
## Scorecard de postura de segurança
`node9 posture` avalia o quão exposta esta máquina está a um agente comprometido — isolamento, egress, segredos em disco, supply chain, privilégio — e fornece o comando exato para corrigir cada descoberta.```bash
node9 posture # scorecard with the #1 risk and a fix for every finding
node9 posture --ship # send a redacted snapshot to your node9 dashboard (fleet view)
Os achados são agrupados por quem pode corrigi-los: 🔒 os que o node9 reduz (basta executar o comando) e 🧱 os que só você pode. Cada um traz um o quê / porquê / quem em linguagem simples e uma remediação real — por exemplo, o achado "agente roda sem sandbox no host" aponta diretamente para node9 sandbox run (abaixo).```text
🛡️ Node9 Posture — agent on this host Score: 100/100 (Good)
2 advisories below don't affect the score — OS-level exposure, yours to weigh.
🟢 node9 is already protecting you ✅ Secrets node9 DLP is blocking this ✅ Egress node9 egress is approval-gating this ✅ Approval gate node9 is blocking this ✅ Privilege node9 is approval-gating this
🔒 node9 reduces these — run the command, the rest is yours ⚠️ Isolation Running directly on the host — no container The agent runs loose on your whole machine, not in a sandbox. → node9 sandbox run — jail it: kernel egress + scoped mounts + node9 inside → node9 shield enable project-jail — or shrink the blast radius, keep host access ⚠️ Network exposure 4 services on 0.0.0.0 (node :3000/:4000, PostgreSQL :5432, Redis :6379) Reachable from your whole network, not just this laptop. → node9 shield enable postgres|redis — node9 blocks DROP TABLE / FLUSHALL → bind to 127.0.0.1 / firewall the port (your part)
✅ Supply chain no issues found ✅ Coverage no issues found
Track this across your fleet & keep it green → node9.ai
## Analisar um repositório — segurança de agente-CI
`node9 scan-repo` verifica qualquer repositório (ou uma pasta local) em busca de maneiras pelas quais um agente de IA conectado ao GitHub Actions poderia ser **sequestrado por um terceiro** — workflows injetáveis, segredos acessíveis ao agente, servidores MCP sem pinagem, configuração de agente excessivamente ampla e arquivos de instrução envenenados. Estático e apenas de análise: ele lê somente a configuração commitada, nunca executa o código do repositório. Nenhuma instalação ou token é necessário para repositórios públicos.```bash
npx node9-ai scan-repo <owner/repo> # any public repo, no install
node9 scan-repo . # a local checkout — no network
node9 scan-repo <owner/repo> --json # machine-readable
I need the actual content of chunk 9 to translate it. Please provide the Markdown text you want translated.```text 🛡️ node9 scan-repo · node9-ai/agent-security-demo · ⚠️ agent-security risk found inspected 2 config file(s), 2 finding(s)
🔴 CRITICAL Injectable agent workflow — untrusted input reaches a tool-using agent with secrets .github/workflows/vulnerable-example.yml · CI-2 • runs with base-repo secrets (pull_request_target) • checks out the untrusted PR head into the workspace root • allowed_non_write_users: "*" — any user can trigger the agent • no effective actor gate
🔴 CRITICAL Exfiltratable secrets reachable by an injectable agent .github/workflows/vulnerable-example.yml · CI-4 • agent has arbitrary shell (bare Bash) → can read env and exfiltrate
O que ele verifica:
| Verificação | Sinaliza |
| ----------- | ---------------------------------------------------------------------------- |
| **CI-1** | config de agente commitada que pré-autoriza ferramentas amplas ou executa hooks remotos |
| **CI-2** | fluxos de trabalho de agente injetáveis — um outsider pode acionar o agente e sequestrá-lo |
| **CI-3** | servidores MCP sem pin / `@latest` ou credenciais inline (cadeia de suprimentos) |
| **CI-4** | segredos que um agente injetado poderia exfiltrar |
| **CI-6** | instruções envenenadas ou perigosas em `CLAUDE.md` / `AGENTS.md` / skills |
**Proteja cada PR** — o mesmo mecanismo de uma GitHub Action, para que uma config sequestrável não possa ser mesclada:```yaml
# .github/workflows/agent-security.yml
- uses: node9-ai/node9-proxy@v2
with:
fail-on: high # or 'never' to just comment
Marketplace: node9 Agent Security
Está a executá-lo? Adicione o scanned by node9 badge ao seu README.
Monitorização em tempo real
Node9 monitor dashboard
node9 monitor abre um painel interativo de terminal com duas vistas:
[1]Tempo real — atividade ao vivo, aprovações, alertas de segurança, pontuação de risco atual[2]Relatório — resumo por janela de período: custo, principais ferramentas, escudos acionados, raio de explosão
Relatório
Prima [2] no monitor para um resumo por janela de período. Alterne a janela com [T]oday · [W]eek · [M]onth · [N]inety — os mesmos painéis da análise acima, alimentados pelo seu registo de auditoria pós-instalação.
Node9 monitor [2] Report
```bash node9 monitor # press [2] for Report view node9 report --period 7d # CLI form, no TUI ``` ## Instalação```bash # macOS / Linux brew tap node9-ai/node9 && brew install node9or via npm (any platform)
npm install -g node9-ai
I need the actual content of chunk 17 to translate it. Please provide the Markdown text you want translated.```bash
node9 init # auto-wires all detected agents + MCP servers
node9 login # connect this machine to your workspace (approve it in the browser)
node9 doctor # verify everything is wired and reporting
Requer Node.js 18+.
init por si só dá-te aplicação local completa: regras, shields, DLP e
aprovações funcionam todos offline, nesta máquina.
login é o que coloca a máquina no teu dashboard. Imprime um código, abre o
navegador, e aprovas a máquina aí; se ainda não tiveres uma conta,
registar-te a meio do fluxo devolve-te à mesma aprovação com o código
intacto. Até o executares, tudo é aplicado localmente mas nada chega ao
Mission Control, por isso o dashboard fica vazio.
node9 logout desliga uma máquina novamente. Revoga a chave dessa máquina;
a aplicação local continua a funcionar.
Shields — pacotes de regras curados
Cada shield é um conjunto de regras curado para um serviço ou domínio. Ativa apenas o que precisas.
| Shield | O que deteta | Ativar |
|---|---|---|
project-jail | Bloqueia leituras de ~/.ssh, ~/.aws, .env, credenciais via Bash e Read tool | node9 shield enable project-jail |
bash-safe | curl | bash, rm -rf /, sobrescrita de disco, eval de remoto | node9 shield enable bash-safe |
postgres | DROP TABLE, TRUNCATE, DROP COLUMN, DELETE sem WHERE | node9 shield enable postgres |
mongodb | dropDatabase, drop(), deleteMany({}), remoções de índices | node9 shield enable mongodb |
redis | FLUSHALL, FLUSHDB, CONFIG SET num servidor ativo | node9 shield enable redis |
aws | Eliminação S3, terminação EC2, alterações IAM, destruição RDS | node9 shield enable aws |
k8s | eliminação de namespace, helm uninstall, limpezas de cluster role | node9 shield enable k8s |
docker | system prune, volume prune, rm -f de contentores | node9 shield enable docker |
github | gh repo delete, eliminação de branch remota, alterações de definições | node9 shield enable github |
filesystem | chmod 777, escritas em /etc/, /boot/, /usr/ | node9 shield enable filesystem |
mcp-tool-gating | ferramentas MCP não aprovadas a ativar silenciosamente novas capacidades | node9 shield enable mcp-tool-gating |
| node9 shield list # show all shields + status |
## Sempre ativo — sem necessidade de configuração
- **Git** — detecta `git push --force`, `git reset --hard`, `git clean -fd`
- **SQL** — detecta `DELETE` / `UPDATE` sem `WHERE`, `DROP TABLE`, `TRUNCATE`
- **Shell** — detecta `curl | bash`, `sudo` não autorizado
- **DLP** — sinaliza chaves AWS, tokens do GitHub, chaves Stripe, chaves privadas PEM em qualquer argumento de ferramenta, conteúdo de arquivo ou configuração de shell (`~/.zshrc`, `~/.bashrc`)
- **DLP de resposta** — o scanner em segundo plano lê o histórico de conversas do Claude e alerta você se o Claude _escreveu_ um segredo no texto da resposta
- **Fixação de skills** — verificação SHA-256 das skills/plugins do Claude instalados entre sessões
## Prompts de revisão — aproveite inline, no seu agente
Quando o node9 sinaliza uma ação para **revisão** (ex.: `git push --force`, um `DROP TABLE`), o prompt de aprovar/negar é renderizado **inline na conversa do agente** — sem sessão congelada, sem terminal separado, sem corrida de timeout de hook. O node9 ainda executa o avaliador completo e toma a decisão; apenas a _superfície_ do prompt se move para o agente.
- **Ativado por padrão** para **Claude Code** e **GitHub Copilot CLI** — os agentes cujo contrato de hook suporta um `ask` nativo. Todos os outros agentes (Codex, Gemini, Antigravity, Hermes, Cursor, OpenCode, Pi) usam o próprio aprovador do node9.
- **Controle isso** com `reviewChannel` em `~/.node9/config.json` (ou `--no-ask` no hook):```jsonc
{
"settings": {
"reviewChannel": "ask", // "ask" = inline agent prompt (default) | "approver" = node9's own approver
},
}
- Configurações de equipe: quando um aprovador de nuvem/equipe está configurado (
approvers.cloud: true), as revisões são roteadas para esse aprovador — o node9 não permite que uma autoaprovação inline contorne a aprovação roteada/de segunda parte.
Sandbox — execute um agente em uma jaula
Quando apenas observar não é suficiente, node9 sandbox executa o agente dentro de um contêiner descartável com uma lista de permissões de saída imposta pelo kernel e montagens com escopo — enquanto os hooks do node9 governam e auditam cada chamada de ferramenta dentro da caixa. A versão rígida da proteção: o agente só pode tocar na pasta que você monta e alcançar os hosts que você permite; todo o resto é descartado no kernel.```bash
cd ~/my-project
node9 sandbox new # write node9.sandbox.yaml — what to mount + which hosts to allow
node9 sandbox run # build + boot the jailed agent (your project at /workspace)
node9 sandbox tail # watch the agent's actions live, from the host
- **Descartável** — o contêiner é destruído na saída; suas edições de projeto vão para o seu disco real, nada mais sobrevive.
- **Mesma política** — suas regras existentes de shields / egress / aprovações se aplicam dentro da caixa, transmitidas para o mesmo log de auditoria e painel.
- **Fecha o ciclo de postura** — executá-lo faz os achados de Isolation / Egress ficarem verdes.
Escopo honesto (Fase 1): contêiner único, **Claude primeiro** (Codex em seguida); o agente ainda mantém suas _próprias_ credenciais na caixa (a parede de egress as confina aos hosts permitidos) — _"o agente nunca detém um segredo"_ é a fase do broker de credenciais no roadmap. Requer Docker.
## Gateway MCP
Envolva qualquer servidor MCP de forma transparente. O agente vê o mesmo servidor — o Node9 intercepta cada chamada de ferramenta.```json
{
"mcpServers": {
"postgres": {
"command": "node9",
"args": ["mcp", "--upstream", "npx -y @modelcontextprotocol/server-postgres postgresql://..."]
}
}
}
Ou apenas execute node9 init — ele envolve seus servidores MCP existentes automaticamente.
🔐 Fixação de ferramentas MCP — defesa contra rug pull
Servidores MCP podem alterar suas definições de ferramentas entre sessões. Um servidor comprometido ou malicioso poderia silenciosamente adicionar, remover ou modificar ferramentas depois que você confiou nele pela primeira vez — um ataque de rug pull.
O Node9 fixa as definições de ferramentas no primeiro uso:
- Primeira conexão — o gateway registra um hash SHA-256 do nome, descrição e esquema de cada ferramenta
- Conexões subsequentes — o hash é comparado; se as ferramentas mudaram, a sessão é colocada em quarentena e toda chamada de ferramenta é bloqueada até que um humano revise e aprove a alteração
- Estado de fixação corrompido — falha de forma segura (bloqueia), nunca re-confia silenciosamente```bash node9 mcp pin list # show all pinned servers and hashes node9 mcp pin update # remove pin, re-pin on next connection node9 mcp pin reset # clear all pins
</details>
## Outros comandos
Além dos três comandos de fluxo acima (`scan` / `monitor` / `report`):
| Comando | O que mostra | Quando usar |
| ---------------- | --------------------------------------------------------- | --------------------------------------- |
| `node9 blast` | O que um agente de IA pode alcançar agora — arquivos, credenciais, env | Primeira coisa a executar em qualquer máquina |
| `node9 tail` | Fluxo ao vivo de cada chamada de ferramenta (somente texto, sem TUI) | Para canalizar para outras ferramentas, CI, logs |
| `node9 sessions` | Histórico de sessões com prompt, rastreamento de ferramentas e custo | Para revisar uma transferência ou trabalho anterior |
| `node9 dlp` | Descobertas de vazamento de credenciais no texto de resposta do Claude | Sempre que um alerta de desktop DLP disparar |
| `node9 mask` | Redigir segredos em texto puro dos arquivos locais de histórico de sessão | Após uma descoberta de DLP — limpa o disco local |
Além disso, um **HUD ao vivo** na barra de status do seu Claude Code:```
🛡 node9 | standard | [bash-safe] | ✅ 12 allowed 🛑 2 blocked 🚨 0 dlp | ~$0.43
📊 claude-opus-4-7 | ctx [████████░░░] 54% | 5h [██░░░░░░░░] 12% | 7d [█░░░░░░░] 7%
🗂 2 CLAUDE.md | 8 rules | 3 MCPs | 4 hooks
Leitura dos dados — o que os números significam
O Node9 expõe o sinal. Aqui estão os padrões que vale a pena conhecer:
| Sinal | Significado provável |
|---|---|
Would have blocked ≥ 5 numa semana | O agente está a tentar operações de alto impacto; vale a pena rever os escudos |
Regra única review-git-push >50% dos achados | A sua própria regra está a atuar como pretendido — não é um risco, apenas supervisão |
Achado de DLP na ferramenta user-prompt | Colou um segredo no seu próprio prompt — rode a chave |
| Agent Loop ×50+ no mesmo ficheiro | Agente preso no ciclo editar/testar/corrigir — verifique o contexto ou abrande |
| Discrepância de pin da ferramenta MCP | O servidor mudou as suas ferramentas — reveja antes de voltar a confiar |
| Aviso de resposta MCP grande | Esse servidor está a inflar a sua janela de contexto em cada turno subsequente |
Alerta Response DLP | O Claude escreveu um segredo no texto da sua resposta — não bloqueado, rode imediatamente |
Achado de DLP em tool-result | O Claude leu um ficheiro que contém um segredo (.env, credenciais) — rode a chave e execute node9 mask |
Achado de DLP em [Shell] | Segredo em texto simples em ~/.zshrc ou ~/.bashrc — todas as sessões de IA o podem ver |
Sinais isolados são normais; padrões persistentes são aquilo em que age.
SDK Python — governe qualquer agente Python```python
from node9 import configure, protect
configure(agent_name="my-agent", policy="require_approval")
@protect("bash") def run_command(cmd: str) -> str: ...
**[Python SDK →](https://github.com/node9-ai/node9-python)** · **[Exemplo de agente de revisão de código para CI →](https://github.com/node9-ai/node9-pr-agent)**
## Por baixo dos panos
- **Scan** lê o histórico bruto do agente em `~/.claude/projects/`, `~/.gemini/tmp/`, `~/.gemini/antigravity-*/brain/`, `~/.copilot/session-state/`, `~/.codex/sessions/` — sem chamadas de API, totalmente offline
- **Runtime** intercepta chamadas de ferramentas via hooks de pré-execução (Claude Code, Codex, Antigravity, GitHub Copilot CLI, Gemini CLI, Opencode, Pi) ou via o gateway MCP (Cursor, Windsurf, VSCode, Claude Desktop). Todas as decisões são gravadas atomicamente em `~/.node9/audit.log`.
- **Gateway MCP** é um proxy stdio; intercepta `tools/list` + `tools/call` JSON-RPC, encaminha o restante
- **Mecanismo de políticas** usa [mvdan-sh](https://github.com/mvdan/sh) para análise de AST bash — derrota ofuscação via escape com barras invertidas, substituição de variáveis, eval de download remoto
- **Sandbox** gera um Dockerfile + entrypoint que selam uma parede de egresso deny-by-default com `ipset`/`iptables`, e então fazem downgrade para um agente não-root com o daemon e hooks do node9 rodando internamente; apenas o arquivo de credenciais do agente é montado, nunca todo o seu `~/.claude`
## Documentação completa
Referência de configuração, regras inteligentes, regras com estado, hosts confiáveis, modos de aprovação, referência da CLI — em **[node9.ai/docs](https://node9.ai/docs)**.
## Projetos relacionados
- **[node9-python](https://github.com/node9-ai/node9-python)** — SDK Python
- **[node9-pr-agent](https://github.com/node9-ai/node9-pr-agent)** — GitHub Action que revisa PRs através do Node9
## Enterprise
**Node9 Pro** adiciona bloqueio de governança, SAML/SSO, exportação central de auditoria e implantação em VPC. Consulte [node9.ai](https://node9.ai).
## Licença
Apache-2.0
<p align="center">
<sub>Feito com ☕ e paranoia saudável.</sub>
</p>