What's Inherited

Muestra lo que un checkout que no escribiste le dice a tu agente que haga antes de ejecutarlo: archivos de instrucciones y sus importaciones, comandos hook conectados a eventos del agente, servidores MCP que declara el repositorio, y las habilidades y subagentes que incluye.

Documentación

whats-inherited-mcp

npm License: MIT Glama

Revisas el código que clonas. Casi nadie revisa la parte que habla con tu agente. Un servidor MCP que enumera todo lo que hay en un checkout dirigido a un agente de IA en lugar de a ti: archivos de instrucciones, comandos de hooks conectados a eventos del agente, servidores MCP que el repositorio declara, y las skills y subagentes que incluye.

Por qué

git diff te muestra código, y tú lees código. También te muestra tres líneas añadidas en un CLAUDE.md, y las hojeas porque parecen documentación. No son documentación — son instrucciones que tu modelo seguirá.

La superficie es más grande de lo que la mayoría imagina. Un directorio que clonas puede contener:

  • CLAUDE.md / AGENTS.md / .cursorrules — cargados en el contexto y tratados como instrucciones, incluyendo copias anidadas en lo profundo del árbol que solo se aplican cuando el agente trabaja en ese subdirectorio
  • comandos de hooks en .claude/settings.json — shell conectado para ejecutarse al usar herramientas, al iniciar sesión o al enviar un prompt
  • .mcp.json — servidores MCP que el repositorio pide añadir, a menudo lanzados con npx -y <package>, lo que significa que el código que se ejecuta se descarga al inicio y no es el código que revisaste
  • .claude/skills, .claude/commands, .claude/agents — capacidades que el repositorio entrega al agente

Nada reúne todo eso en un solo lugar. Esto lo hace.

Ejecutado contra un checkout de langfuse/langfuse en 7d2afa4 — un repositorio de código abierto ordinario y de buena reputación, elegido precisamente porque no tiene nada malo:

# 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.

y instruction_files añade:

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

Cinco mil y pico líneas de instrucciones permanentes, la mayoría en archivos que nunca abrirías, en un repositorio que nadie tiene motivos para desconfiar. Ese es el punto: el número es grande incluso en el caso benigno, que es exactamente por lo que una entrada inusual pasa desapercibida.

Herramientas

HerramientaQué responde
inherited_summaryEl titular: todo lo que hay en este checkout dirigido a un agente. Empieza aquí
instruction_filesCada CLAUDE.md/AGENTS.md/.cursorrules, su tamaño y coste de tokens, y qué arrastran sus líneas de @import — incluyendo imports que se resuelven fuera del repositorio
auto_run_commandsComandos de hooks que el checkout conecta a eventos del agente, y si el script al que referencia cada uno está dentro del repositorio, fuera de él, o falta
declared_mcp_serversServidores MCP que el repositorio declara, cuáles de ellos descargan código al lanzarse, y las rutas del sistema de archivos que se les conceden fuera del checkout
agent_extensionsSkills, comandos de barra y subagentes que el repositorio incluye

Cada herramienta acepta un dir opcional. Cuando se omite, el servidor recurre a WI_DEFAULT_ROOT si está definido, y si no, a su directorio de trabajo.

Instalación

Claude Desktop (un clic, sin terminal): descarga el último whats-inherited-mcp-<version>.dxt desde Releases y ábrelo con Claude Desktop (doble clic, o Ajustes → Extensiones → Instalar extensión…). El servidor y sus dependencias viajan dentro del paquete — sin npm, sin instalar Node.

Regístrate con Claude Code (disponible en cada sesión):

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

O en cualquier configuración de cliente MCP:

{
  "mcpServers": {
    "whats-inherited": {
      "command": "npx",
      "args": ["-y", "whats-inherited-mcp"]
    }
  }
}
Desde el código fuente
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 en npm y como io.github.stcmain/whats-inherited-mcp en el Registro MCP.

Configuración

Un único ajuste opcional, y no requiere credenciales.

VariableValor por defectoSignificado
WI_DEFAULT_ROOTel directorio de trabajo del servidorDirectorio a inspeccionar cuando se llama a una herramienta sin un argumento dir.

Cada herramienta acepta un dir explícito, que siempre tiene prioridad. WI_DEFAULT_ROOT solo cambia el recurso de respaldo, y merece la pena definirlo cuando un cliente de escritorio lanza el servidor: el proceso entonces hereda el directorio de trabajo de ese cliente, que rara vez es el checkout que querías inspeccionar.

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

Qué cuenta, y qué se niega a adivinar

Inflar esto en la dirección alarmista sería fácil y haría la herramienta inútil, así que el recuento es deliberadamente conservador:

  • No detecta contenido malicioso. No hay escáner heurístico, ni regex de "frase sospechosa", ni puntuación de riesgo. Esos producen falsos positivos con confianza en repositorios normales y pasan por alto cualquier cosa escrita con cuidado. Este servidor te dice dónde mirar; la lectura la haces tú.
  • Los archivos se cuentan una sola vez. Un repositorio puede exponer un archivo bajo varios nombres — CLAUDE.md → AGENTS.md → .agents/AGENTS.md es un patrón real en la naturaleza. Las entradas se deduplican por ruta real resuelta y se listan los alias, en lugar de contar el mismo contenido tres veces.
  • .claude/ no se cuenta dos veces. El CLAUDE.md de una skill se reporta como skill, no también como archivo de instrucciones del proyecto.
  • "No se identificó token de ruta" no es una afirmación de seguridad. Cuando un comando de hook no tiene una ruta del sistema de archivos que este servidor pueda extraer con confianza, lo dice y se detiene. Esa es una brecha declarada en el análisis, no un veredicto.
  • La detección de imports es conservadora. Los bloques de código delimitados se eliminan primero, y un @token sin raíz solo cuenta cuando nombra un documento — así que @scope/pkg y @mentions quedan fuera del número.

Limitaciones honestas

  • Reporta; no juzga, y no arregla. Nada se edita, se pone en cuarentena ni se puntúa. Cada elemento que lista es normal en un repositorio legítimo.
  • Que tu cliente ejecute realmente los hooks del proyecto es asunto de tu cliente. Los clientes difieren, y dan prompts de forma distinta y cambian entre versiones. Este servidor reporta lo que los archivos declaran, no lo que tu cliente hará con ellos.
  • Los recuentos de tokens son estimaciones (~4 caracteres por token). Trátalos como una clasificación y una escala aproximada, no como facturación. El tokenizador de Anthropic no es público, así que nada local puede hacerlo mejor.
  • El diseño de Claude Code es el modelo. Se reconocen los archivos de instrucciones de Cursor, Windsurf, Cline y Copilot, pero el análisis de hooks y MCP sigue el esquema de Claude Code.
  • Los monorepos muy grandes se truncan. El recorrido tiene límite de profundidad y de entradas; cuando se alcanza el límite, la salida lo dice y marca los resultados como parciales en lugar de subestimar en silencio.
  • Nunca lee el historial de git. Describe el árbol de trabajo tal como está en disco ahora mismo, no lo que un diff cambió.
  • Los directorios con enlaces simbólicos no se siguen (riesgo de bucles). Los archivos con enlaces simbólicos sí.

Notas de diseño / modelo de amenazas

Todo el trabajo de este servidor es mirar contenido que puede ser hostil, así que el diseño asume que lo es.

  • No debe convertirse en el vector de inyección del que informa. El cuerpo de un archivo de instrucciones nunca se devuelve — solo metadatos, rutas y campos estructurados extraídos de claves JSON de configuración conocidas. Pegar el CLAUDE.md de un repositorio en tu contexto para decirte que el repositorio podría contener algo malo sería contraproducente.
  • Las cadenas escritas por el repositorio van entre delimitadores y etiquetadas. Los comandos de hooks y las líneas de lanzamiento de MCP tienen que mostrarse para ser útiles. Se emiten dentro de tramos de código en línea con las comillas invertidas neutralizadas, las barras verticales escapadas y los saltos de línea aplanados para que una cadena manipulada no pueda salirse del tramo ni de una tabla de Markdown, y cada bloque lleva una nota permanente de que el texto citado son datos del checkout, no instrucciones.
  • Sin procesos hijos. Sin shell. Sin red. Sin escrituras. Las únicas APIs de Node utilizadas son lecturas de node:fs, node:path y node:os. No hay ningún import de child_process en todo el código fuente, así que nada en un repositorio escaneado puede ejecutarse al escanearlo.
  • dir es la única ruta controlada por el modelo, y está acotada por construcción: se resuelve, se le aplica ruta real y se exige que sea un directorio existente. Como los cuerpos de archivo nunca se emiten, apuntarlo a algo sensible revela nombres de archivo y tamaños, nunca contenidos — y no puede escribir, ejecutar ni transmitir nada.
  • Los valores de variables de entorno nunca se leen — solo los nombres. .mcp.json es un lugar donde la gente deja claves de API en texto plano.
  • Trabajo acotado: límite de profundidad, límite de entradas, techo de tamaño de archivo y sin recorrido de directorios con enlaces simbólicos.

Quién hace esto

Creado por Shift The Culture — dirigimos una empresa unipersonal con agentes de IA y publicamos las herramientas que nosotros mismos necesitábamos. Este servidor es gratuito y con licencia MIT, sin condiciones.

Tiene tres hermanos, también todos gratuitos y MIT:

  • whats-running-mcp — qué está realmente ejecutándose en la máquina ahora mismo, en lugar de lo que afirma una transcripción antigua.
  • whats-loaded-mcp — qué está consumiendo tu ventana de contexto antes de que escribas: descripciones de skills, archivos de memoria y sus imports.
  • whats-allowed-mcp — qué puede hacer tu agente sin pedirte permiso: reglas de permisos fusionadas, qué archivo de configuración gana, y las reglas que tu cliente acepta y luego ignora.

El resto de esas herramientas son de pago:

  • Agent Fleet Ops Kit ($29) — los otros modos de fallo de ejecutar tres o cuatro agentes en una sola máquina: dos sesiones editando el mismo checkout, un servidor de desarrollo que nadie posee (así que el agente prueba una aplicación distinta de la que edita), y servidores MCP filtrados de sesiones bloqueadas que retienen puertos y RAM durante semanas. ¿Prefieres PayPal? El mismo kit en Payhip.
  • Agent Reliability Kit ($29) — un hook de Stop y dos CLIs que bloquean un turno cuando un agente afirma "hecho" contra un repositorio, URL o build que nunca se comprobó realmente. ¿Prefieres PayPal? El mismo kit en Payhip.

El servidor de arriba sigue siendo gratuito y MIT en cualquier caso — no tiene ventas internas, ni telemetría, ni dependencia de los kits de pago.

Patrocinadores

Este servidor es MIT y seguirá siendo MIT. No hay edición pro, ni telemetría, y nada se retiene de la versión gratuita. El patrocinio es cómo se paga el mantenimiento sin que nada de eso cambie.

Aún no hay patrocinadores — la primera plaza está abierta. Los patrocinadores corporativos reciben su nombre o logotipo en esta sección, en los dos servidores hermanos, y en la página de patrocinadores. Niveles, exactamente qué incluye la colocación, y qué compra explícitamente: https://shifttheculture.media/sponsor

Particulares: https://paypal.me/ShiftTheCultureLLC — cualquier cantidad, sin ventajas, sin niveles.

Licencia

MIT © Zachary Pampu