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

FerramentaO que faz
watchtower_sync_usageImporta 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_spendVeja os gastos (hoje / semana / mês, alinhados ao calendário) com detalhamento por modelo e quanto é estimado
watchtower_budgetDefina alertas de orçamento diário/semanal/mensal (avisa em 80% e 100%)
watchtower_log_usageFallback manual para clientes que não são Claude Code. Prefira sync_usage.

Varredura de Segurança

FerramentaO que faz
watchtower_scan_secretsVarre 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_supabaseAudita 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_headersVarre uma URL publicada em busca de cabeçalhos de segurança ausentes (CSP, HSTS, X-Frame-Options, etc.)

Painel

FerramentaO que faz
watchtower_statusVisão geral rápida dos gastos + descobertas de segurança recentes
watchtower_scan_historyHistó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_usage analisa 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ções authenticated e anon e 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, nunca psql. 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 de psql é necessária.

Desenvolvimento

npm install
npm run build
npm test

Licença

MIT