What's Inherited

Mostra o que um checkout que você não escreveu instrui seu agente a fazer antes de você executá-lo — arquivos de instrução e suas importações, comandos de hook vinculados a eventos do agente, servidores MCP que o repositório declara, e as skills e subagentes que ele inclui.

Documentação

whats-inherited-mcp

npm License: MIT Glama

Você revisa o código que clona. Quase ninguém revisa a parte dele que fala com seu agente. Um servidor MCP que enumera tudo em um checkout endereçado a um agente de IA, e não a você: arquivos de instrução, comandos de hook conectados a eventos do agente, servidores MCP que o repositório declara, e as skills e subagentes que ele envia.

Por quê

git diff mostra código, e você lê código. Ele também mostra três linhas adicionadas em um CLAUDE.md, e você as lê rapidamente, porque parecem documentação. Elas não são documentação — são instruções que seu modelo seguirá.

A superfície é maior do que a maioria imagina. Um diretório que você clonou pode conter:

  • CLAUDE.md / AGENTS.md / .cursorrules — carregados no contexto e tratados como instruções, incluindo cópias aninhadas profundas na árvore que só se aplicam quando o agente trabalha naquele subdiretório
  • comandos de hook em .claude/settings.json — shell conectado para disparar no uso de ferramentas, início de sessão ou envio de prompt
  • .mcp.json — servidores MCP que o repositório pede para adicionar, frequentemente iniciados com npx -y <package>, o que significa que o código executado é baixado no momento da inicialização e não é o código que você revisou
  • .claude/skills, .claude/commands, .claude/agents — capacidades que o repositório entrega ao agente

Nada reúne isso em um só lugar. Este faz.

Execute contra um checkout de langfuse/langfuse em 7d2afa4 — um repositório open-source comum e respeitável, escolhido precisamente porque não há nada de errado com ele:

# Inherited agent surface

**12 item(s) in this checkout are addressed to an agent, not to you.**

| Surface                       | Count | Detail                                                       |
|-------------------------------|------:|--------------------------------------------------------------|
| Instruction files             |    12 | ~41,848 est. tokens, 5,593 lines your agent is told to follow |
| Hook commands                 |     0 | configured to run on agent events                             |
| MCP servers declared          |     0 | 0 fetch code from a registry at launch                        |
| Skills / commands / subagents | 33 extensions (196 files) | shipped under `.agents/`, available to the agent |

## Worth a look
- 11 instruction file(s) are **not at the repo root** — they apply when the agent
  works in those subdirectories and are easy to miss in review.

e instruction_files adiciona:

> Counted once, reachable under more than one name (symlinks):
> - `AGENTS.md` ← also `.agents/AGENTS.md`, `CLAUDE.md`

Cinco mil e quinhentas linhas de instrução permanente, a maioria em arquivos que você nunca abriria, em um repositório que ninguém tem motivo para desconfiar. Esse é o ponto: o número é grande mesmo no caso benigno, exatamente por isso uma entrada incomum passa despercebida.

Ferramentas

FerramentaO que responde
inherited_summaryO destaque: tudo neste checkout endereçado a um agente. Comece aqui
instruction_filesCada CLAUDE.md/AGENTS.md/.cursorrules, seu tamanho e custo de tokens, e o que suas linhas @import puxam — incluindo imports que resolvem fora do repositório
auto_run_commandsComandos de hook que o checkout conecta a eventos do agente, e se o script referenciado está dentro do repositório, fora dele ou ausente
declared_mcp_serversServidores MCP que o repositório declara, quais deles buscam código na inicialização e caminhos de sistema de arquivos concedidos fora do checkout
agent_extensionsSkills, comandos de barra e subagentes que o repositório envia

Cada ferramenta aceita um dir opcional. Quando omitido, o servidor recorre a WI_DEFAULT_ROOT se estiver definido e, caso contrário, ao seu diretório de trabalho.

Instalação

Claude Desktop (um clique, sem terminal): baixe o whats-inherited-mcp-<version>.dxt mais recente de Releases e abra-o com o Claude Desktop (duplo clique, ou Configurações → Extensões → Instalar Extensão…). O servidor e suas dependências vêm dentro do pacote — sem npm, sem instalação de Node.

Registre com o Claude Code (disponível em todas as sessões):

claude mcp add --scope user whats-inherited -- npx -y whats-inherited-mcp

Ou em qualquer configuração de cliente MCP:

{
  "mcpServers": {
    "whats-inherited": {
      "command": "npx",
      "args": ["-y", "whats-inherited-mcp"]
    }
  }
}
A partir do código-fonte
git clone https://github.com/stcmain/whats-inherited-mcp.git
cd whats-inherited-mcp
npm install && npm run build
# then point your client at node /path/to/whats-inherited-mcp/dist/index.js

Publicado como whats-inherited-mcp no npm e como io.github.stcmain/whats-inherited-mcp no Registro MCP.

Configuração

Uma configuração opcional, e não exige credenciais.

VariávelPadrãoSignificado
WI_DEFAULT_ROOTo diretório de trabalho do servidorDiretório a inspecionar quando uma ferramenta é chamada sem um argumento dir.

Cada ferramenta aceita um dir explícito, que sempre vence. WI_DEFAULT_ROOT apenas muda o fallback, e vale a pena definir quando um cliente desktop inicia o servidor: o processo então herda o diretório de trabalho desse cliente, que raramente é o checkout que você pretendia inspecionar.

{
  "mcpServers": {
    "whats-inherited": {
      "command": "npx",
      "args": ["-y", "whats-inherited-mcp"],
      "env": { "WI_DEFAULT_ROOT": "/path/to/the/checkout" }
    }
  }
}

O que conta, e o que se recusa a adivinhar

Inflar isso na direção alarmante seria fácil e tornaria a ferramenta inútil, então a contabilidade é deliberadamente conservadora:

  • Não detecta conteúdo malicioso. Não há scanner heurístico, regex de "frase suspeita" ou pontuação de risco. Isso produz falsos positivos confiantes em repositórios comuns e perde qualquer coisa escrita com cuidado. Este servidor diz onde olhar; você faz a leitura.
  • Arquivos são contados uma vez. Um repositório pode expor um arquivo sob vários nomes — CLAUDE.md → AGENTS.md → .agents/AGENTS.md é um padrão real no mundo real. As entradas são deduplicadas pelo caminho real resolvido e os aliases são listados, em vez de contar o mesmo conteúdo três vezes.
  • .claude/ não é contado duas vezes. O CLAUDE.md de uma skill é relatado como skill, não também como arquivo de instrução do projeto.
  • "Nenhum token de caminho identificado" não é uma afirmação de segurança. Quando um comando de hook não tem um caminho de sistema de arquivos que este servidor possa extrair com confiança, ele diz isso e para. Essa é uma lacuna declarada na análise, não um veredito.
  • A detecção de imports é conservadora. Blocos de código cercados são removidos primeiro, e um @token sem raiz só conta quando nomeia um documento — então @scope/pkg e @mentions ficam fora do número.

Limitações honestas

  • Ele relata; não julga, e não corrige. Nada é editado, colocado em quarentena ou pontuado. Cada item listado é normal em um repositório legítimo.
  • Se seu cliente realmente executa hooks de projeto é problema do seu cliente. Clientes diferem, e eles fazem prompts de forma diferente e mudam entre versões. Este servidor relata o que os arquivos declaram, não o que seu cliente fará com eles.
  • Contagens de tokens são estimativas (~4 caracteres/token). Trate-as como uma classificação e uma escala aproximada, não como cobrança. O tokenizador da Anthropic não é público, então nada local pode fazer melhor.
  • O layout do Claude Code é o modelo. Arquivos de instrução do Cursor, Windsurf, Cline e Copilot são reconhecidos, mas a análise de hooks e MCP segue o esquema do Claude Code.
  • Monorepos muito grandes são truncados. A varredura tem limite de profundidade e de entradas; quando o limite é atingido, a saída diz isso e marca os resultados como parciais, em vez de subnotificar silenciosamente.
  • Nunca lê o histórico do git. Descreve a árvore de trabalho como está no disco agora, não o que um diff mudou.
  • Diretórios com symlink não são seguidos (risco de loop). Arquivos com symlink são.

Notas de design / modelo de ameaça

O trabalho inteiro deste servidor é olhar conteúdo que pode ser hostil, então o design assume que é.

  • Não deve se tornar o vetor de injeção sobre o qual relata. O corpo de um arquivo de instrução nunca é retornado — apenas metadados, caminhos e campos estruturados extraídos de chaves JSON de configuração conhecidas. Colar o CLAUDE.md de um repositório no seu contexto para dizer que o repositório pode conter algo ruim seria contraproducente.
  • Strings escritas pelo repositório são cercadas e rotuladas. Comandos de hook e linhas de inicialização de MCP precisam ser mostrados para serem úteis. Eles são emitidos dentro de spans de código inline com crases neutralizadas, pipes escapados e novas linhas achatadas para que uma string criada não possa escapar do span ou de uma tabela markdown, e cada bloco carrega uma nota permanente de que o texto citado são dados do checkout, não instruções.
  • Sem processos filhos. Sem shell. Sem rede. Sem gravações. As únicas APIs Node usadas são leituras de node:fs, node:path e node:os. Não há importação de child_process em nenhum lugar do código-fonte, então nada em um repositório escaneado pode ser executado ao escaneá-lo.
  • dir é o único caminho controlado pelo modelo, e é limitado por construção: é resolvido, com caminho real e obrigado a ser um diretório existente. Como corpos de arquivo nunca são emitidos, apontá-lo para algo sensível divulga nomes de arquivos e tamanhos, nunca conteúdos — e não pode gravar, executar ou transmitir nada.
  • Valores de variáveis de ambiente nunca são lidos — apenas nomes. .mcp.json é um lugar onde as pessoas deixam chaves de API em texto puro.
  • Trabalho limitado: limite de profundidade, limite de entradas, teto de tamanho de arquivo e sem travessia de diretórios com symlink.

Quem faz isso

Construído por Shift The Culture — operamos uma empresa de uma pessoa com agentes de IA e enviamos as ferramentas que precisávamos nós mesmos. Este servidor é gratuito e licenciado sob MIT, sem amarras.

Tem três irmãos, todos também gratuitos e MIT:

  • whats-running-mcp — o que está realmente rodando na máquina agora, em vez do que uma transcrição antiga afirma.
  • whats-loaded-mcp — o que está consumindo sua janela de contexto antes de você digitar: descrições de skills, arquivos de memória e seus imports.
  • whats-allowed-mcp — o que seu agente pode fazer sem pedir permissão: regras de permissão mescladas, qual arquivo de configuração vence e as regras que seu cliente aceita e depois ignora.

O resto dessas ferramentas é pago:

  • Agent Fleet Ops Kit ($29) — os outros modos de falha de rodar três ou quatro agentes em uma máquina: duas sessões editando o mesmo checkout, um servidor de desenvolvimento que ninguém possui (então o agente testa um aplicativo diferente do que edita) e servidores MCP vazados de sessões travadas que seguram portas e RAM por semanas. Prefere PayPal? Mesmo kit no Payhip.
  • Agent Reliability Kit ($29) — um hook Stop e dois CLIs que bloqueiam um turno quando um agente afirma "concluído" contra um repositório, URL ou build que nunca foi realmente verificado. Prefere PayPal? Mesmo kit no Payhip.

O servidor acima permanece gratuito e MIT de qualquer forma — não tem upsell, sem telemetria e sem dependência dos kits pagos.

Patrocinadores

Este servidor é MIT e permanece MIT. Não há edição pro, sem telemetria e nada retido da versão gratuita. Patrocínio é como a manutenção é paga sem que nada disso mude.

Ainda sem patrocinadores — a primeira vaga está aberta. Patrocinadores empresariais recebem seu nome ou logo nesta seção, nos dois servidores irmãos e na página de patrocinadores. Níveis, exatamente o que a colocação é e o que ela explicitamente não compra: https://shifttheculture.media/sponsor

Indivíduos: https://paypal.me/ShiftTheCultureLLC — qualquer valor, sem vantagens, sem níveis.

Licença

MIT © Zachary Pampu