WatchTower
Rastreamento de custos + varredura de segurança para construtores de IA
Documentação
Watchtower MCP
O portão de segurança pré-deploy para apps codados no vibe. Ele não pergunta se sua RLS do Supabase existe — ele faz login como um usuário aleatório e como a função anônima e prova se eles conseguem ler os dados dos seus outros usuários, diretamente dentro do Claude Code, antes de você publicar.
Sem URL para colar. Sem upload de dados. Sem deploy necessário. Roda localmente no loop de agente do seu Claude Code.
A maioria dos scanners sinaliza. Watchtower prova.
Commodity scanner → ⚠ "RLS may not be enabled on `profiles`."
Watchtower → [CRIT] [PROVEN] the anon role read rows from `profiles`
belonging to other accounts — RLS is not isolating users.
[CRIT] [PROVEN] the OpenAI key in src/config.ts returned
HTTP 200 from the vendor — it is LIVE. Rotate it now.
Ele executa uma sonda cross-tenant somente leitura, com rollback ao vivo contra seu banco de dados — a classe CVE-2025-48757, onde mais de 170 apps vazaram suas tabelas de usuários porque a RLS estava "presente" mas nunca foi realmente aplicada — e verifica se uma chave vazada é real chamando o próprio fornecedor da chave. (Ele também rastreia seus gastos reais do Claude Code, para que o dia do deploy não seja uma surpresa de US$ 8 mil.)
Somente leitura. Local-first. MIT — audite o código-fonte. Sem conta. Nada sai da sua máquina, exceto a verificação de chave opcional, que chama apenas o fornecedor de cada chave. A sonda pode LER, nunca ESCREVER — cada verificação é uma transação com rollback.
Instalação
npm install -g watchtower-mcp
Adicione à sua configuração MCP do Claude Code (~/.claude/settings.json):
{
"mcpServers": {
"watchtower": {
"command": "watchtower-mcp"
}
}
}
Reinicie o Claude Code. Agora você tem 9 ferramentas disponíveis.
Ferramentas
Rastreamento de Custos
| Ferramenta | O que faz |
|---|---|
watchtower_sync_usage | Importa o uso real de tokens automaticamente dos logs de sessão do próprio Claude Code (~/.claude/projects). Preciso, sem registro manual. Execute a qualquer momento — eventos já importados são ignorados. |
watchtower_spend | Veja os gastos (hoje / semana / mês, alinhados ao calendário) com detalhamento por modelo e quanto é estimado |
watchtower_budget | Defina alertas de orçamento diário/semanal/mensal (avisa em 80% e 100%) |
watchtower_log_usage | Fallback manual para clientes que não são Claude Code. Prefira sync_usage. |
Varredura de Segurança
| Ferramenta | O que faz |
|---|---|
watchtower_scan_secrets | Varre o código-fonte em busca de chaves/tokens hardcoded (Node puro, sem shell). Passe verify: true para confirmar quais chaves estão realmente ativas por meio de uma chamada somente leitura a cada fornecedor. |
watchtower_scan_supabase | Audita a correção da RLS do Postgres/Supabase — executa uma sonda cross-tenant ao vivo, somente leitura, para provar se um usuário aleatório ou a função anônima consegue ler dados de outros usuários. Não apenas "a RLS existe". |
watchtower_scan_headers | Varre uma URL publicada em busca de cabeçalhos de segurança ausentes (CSP, HSTS, X-Frame-Options, etc.) |
Painel
| Ferramenta | O que faz |
|---|---|
watchtower_status | Visão geral rápida dos gastos + descobertas de segurança recentes |
watchtower_scan_history | Histórico de descobertas de segurança anteriores (sem duplicatas) |
Uso
Depois de instalado, basta pedir ao Claude:
"Sync my Claude Code usage and show this month's spend"
"Scan my project for hardcoded secrets and check if any are live"
"Audit my Supabase database — can other users read my data?"
"Check the security headers on https://myapp.vercel.app"
"Set a $5 daily budget alert"
Como Funciona
- Rastreamento de custos —
watchtower_sync_usageanalisa os logs de transcrição do Claude Code (as contagens reais de tokens cobrados) e os armazena em um banco de dados SQLite local em~/.watchtower/watchtower.db. Os custos são calculados a partir de uma tabela de preços atual; modelos desconhecidos são claramente rotulados como estimados em vez de precificados incorretamente silenciosamente. As janelas de gastos são alinhadas ao calendário (UTC) para reconciliar com sua fatura da Anthropic. - Varredura de segredos — executa inteiramente em processo (sem shell), com de-duplicação de sobreposição, filtragem de placeholders/entropia para reduzir falsos positivos e redação de segredos em toda a saída. Com
verify: true, cada chave detectada recebe uma única solicitação de verificação somente leitura ao seu próprio fornecedor (Anthropic/OpenAI/Stripe/GitHub) ou uma decodificação JWT local (Supabase) — para que você saiba quais vazamentos são reais. - Correção da RLS — conecta-se com o driver
pg(a credencial permanece em processo), então dentro de transações somente leitura com rollback, ele assume as funçõesauthenticatedeanone tenta ler cada tabela. Uma linha visível para um não-proprietário aleatório ou para a função anônima é um vazamento cross-tenant comprovado — a classe de violação CVE-2025-48757. Descobertas respaldadas por uma leitura ao vivo são marcadas como[PROVEN].
Segurança
Watchtower se mantém no padrão que ele mesmo verifica:
- Nenhum shell é invocado em lugar algum. O scanner de segredos lê arquivos diretamente; a auditoria de RLS usa o driver
pg, nuncapsql. Caminhos e strings de conexão fornecidos pelo chamador não podem injetar comandos, e sua senha de banco de dados nunca é colocada em uma linha de comando. - Segredos detectados são redigidos em toda a saída e nunca são gravados no banco de dados.
- A verificação de chave ao vivo é opcional (
verify: true) e contata apenas o fornecedor de cada chave por endpoints somente leitura.
Modelos Suportados
Claude Opus 4.6, Sonnet 4.6, Haiku 4.5 e Sonnet 3.5. Modelos desconhecidos são precificados como uma estimativa explícita (taxas do Sonnet) e sinalizados como tal.
Requisitos
- Node.js 18+
- Claude Code (ou qualquer cliente compatível com MCP)
- Para a auditoria de RLS: uma string de conexão Postgres/Supabase com permissão para ler o schema e (idealmente) as funções
authenticated/anon. Nenhuma instalação depsqlé necessária.
Desenvolvimento
npm install
npm run build
npm test
Licença
MIT