LayerMap

Servidor MCP local que proporciona a los agentes de codificación un grafo de llamadas resuelto por compilador para TypeScript/JavaScript, Go, Python y Java. Una sola llamada rastrea los llamadores de una función hasta 8 niveles hasta rutas y manejadores HTTP, además de los llamados y cada referencia. Solo lectura; se ejecuta en tu máquina.

Documentación

LayerMap

LayerMap

Inglés · 中文

npm License

Claude Code asks which HTTP endpoints changing Storage.MarkFeedAsRead affects; one LayerMap call returns all four callers with their routes

Una sesión real de Claude Code en Miniflux, reproducida: una llamada al mapa encuentra cada endpoint, y luego el agente los confirma en el código fuente.

Un mapa en capas de tu código para agentes de programación. LayerMap ofrece a Claude Code, Codex, DeepSeek Harness y otros clientes MCP tres herramientas de solo lectura que responden, en una sola llamada, lo que un agente normalmente deduce con docenas de búsquedas:

  • ¿Qué llama a esto, y qué afecta cambiarlo? Llamadores rastreados hasta 8 niveles, hasta las rutas HTTP, handlers, jobs y comandos desde los que se originan.
  • ¿A qué llama? Callees hasta 8 niveles.
  • ¿Qué hay aquí? Módulos, las declaraciones de cada archivo y cada uso de un símbolo.

Mapea TypeScript, JavaScript, Go, Python y Java con el compilador propio de cada lenguaje, de modo que las llamadas a través de interfaces, clases base, plantillas y decoradores se resuelven como las resuelve el compilador, incluidas las que la búsqueda de texto no encuentra.

Ejemplo

En Miniflux, una llamada a Storage.MarkFeedAsRead encuentra las cuatro formas en que una solicitud llega a él, cada una con su ruta:

DECLARATION internal/storage/entry.go: Storage.MarkFeedAsRead m656-680 exported
  ← called by internal/api/feed.go: handler.markFeedAsRead m140-155 @149
  ← called by internal/fever/handler.go: handler.handleWriteFeeds m492-519 @508
  ← called by internal/googlereader/handler.go: handler.markAllAsReadHandler m1261-1338 @1311
  ← called by internal/ui/feed_mark_as_read.go: handler.markFeedAsRead m14-30 @24
[1] internal/api/feed.go: handler.markFeedAsRead m140-155
  ← used as value by internal/api/api.go: Serve f25-84 @61 "/feeds/{feedID}/mark-all-as-read"
[1] internal/googlereader/handler.go: handler.markAllAsReadHandler m1261-1338
  ← used as value by internal/googlereader/handler.go: Serve f44-64 @62 "/mark-all-as-read"
[1] internal/ui/feed_mark_as_read.go: handler.markFeedAsRead m14-30
  ← used as value by internal/ui/ui.go: Serve f18-180 @77 "/feed/{feedID}/mark-all-as-read"
… (the Fever API, then on down to main.go: main)

m y f marcan métodos y funciones con sus líneas; @ es la línea de la llamada, y la ruta entre comillas es la ruta bajo la que está registrada.

Resultados

Preguntas de impacto ("¿qué endpoints HTTP afecta cambiar esto?") en proyectos públicos de Go, Python y Java, evaluadas a ciegas contra conjuntos de verdad verificados con la propia cadena de herramientas de cada lenguaje:

Con LayerMapSin él
Endpoints encontrados, con un máximo de 15 solicitudes (gpt-5.5, 6 tareas × 3 ejecuciones)97.9%58.8%
Usado sin que se le pida por Claude Code / Codex (plugin instalado)6 de 6 / 6 de 6—
Endpoints encontrados, sin límite de solicitudes (Claude Code / Codex)99.3% / 98.0%99.0% / 98.6%
Costo, sin límite de solicitudes (Claude Code en USD / Codex en tokens de entrada)−32% / −55%
Tiempo, sin límite de solicitudes+24% / +17%

Con un presupuesto ajustado, el mapa encuentra mucho más del código afectado, con aproximadamente un 24% más de tokens. Sin límite, ambos agentes llegan igualmente. El mapa hace la ejecución más barata, y los agentes exploran más ampliamente, lo que lleva más tiempo. Son muestras pequeñas sobre tareas escritas por los autores de LayerMap. El informe tiene la configuración, las tareas publicadas y las limitaciones.

En qué se diferencia LayerMap

Otras herramientas dan a los agentes parte de esto. LayerMap combina la precisión del compilador con trazados de cadena completa en un único mapa local:

Grafos de código Tree-sitter (codegraph, GitNexus, …)Servidores de lenguaje e IDEs (la herramienta LSP de Claude Code, Serena, JetBrains)Búsqueda por embeddings (Claude Context, Augment)LayerMap
Cómo se enlazan las llamadasCoincidencia por nombres, imports y reglas de frameworks, a menudo con puntuaciones de confianzaLa resolución propia del compiladorNo se enlazan; se recupera código similarResuelto por el compilador o verificador de tipos de cada lenguaje
Llamadores rastreados hasta rutas y handlersEn varias herramientas, con profundidad variableUn nivel por solicitud (JetBrains: 5 por defecto)—Hasta 8 niveles en una sola llamada
Mantenido como mapaSí, con vigilancia de archivosNo, se responde en vivo desde un servidor en ejecuciónUn índice de fragmentos de códigoSí, actualizado en cada llamada
Se ejecuta en tu máquinaSí; algunos envían telemetría anónimaSíNormalmente con embeddings en la nubeSí, y no envía nada

Otra herramienta encaja mejor si necesitas:

  • más lenguajes, ya que los grafos de tree-sitter cubren 30 o más;
  • Windows;
  • renombrar y refactorizar, desde servidores de lenguaje;
  • búsqueda por significado, desde búsqueda por embeddings;
  • búsqueda en muchos repositorios, con Sourcegraph.

Instalación

Claude Code

/plugin marketplace add coffeecoproject/layermap
/plugin install layermap@layermap

Codex

codex plugin marketplace add coffeecoproject/layermap
codex plugin add layermap@layermap

DeepSeek Harness

npx layermap setup dsh

Esto añade LayerMap a cada perfil de dsh. Cada sesión mapea el proyecto en el que se inició dsh, y npx layermap remove dsh lo deshace.

En cada agente, inicia una nueva sesión en un repositorio Git y pregunta como de costumbre. LayerMap le dice al agente cuándo el mapa ayuda. En el primer lanzamiento, npx descarga el paquete fijado layermap desde npm.

Claude Code pregunta una vez antes de que cada herramienta de mapa se ejecute en un proyecto. Elige "no preguntar de nuevo", o ejecuta npx layermap allow claude para permitir las herramientas de solo lectura del plugin en todas partes.

Sin plugins: ejecuta npx layermap setup claude o npx layermap setup codex. La configuración hace tres cosas:

  • registra el servidor;
  • permite que sus herramientas de solo lectura se ejecuten sin aviso;
  • añade una frase marcada al archivo de instrucciones del agente.

Usa --scope project para configurarlo para todo un equipo, y npx layermap remove … para deshacerlo. Para cualquier otro cliente MCP, ejecuta npx -y layermap mcp como servidor stdio en el repositorio.

Requisitos:

  • Node.js 22.22 o posterior.
  • macOS o Linux (x64 o arm64).
  • Un repositorio Git.
  • Para proyectos Java, un JDK 21 o posterior.

Cómo funciona

La primera llamada en un repositorio construye su mapa: segundos para un proyecto pequeño, unos minutos para uno grande. Las llamadas posteriores reanalizan solo lo que cambió, de modo que el mapa siempre coincide con el árbol de trabajo.

Los mapas permanecen en tu caché de usuario (~/Library/Caches/layermap, ~/.cache/layermap o LAYERMAP_CACHE), nunca en el repositorio. LayerMap se ejecuta completamente en tu máquina y no envía nada a ningún lugar (privacidad, seguridad).

HerramientaUso
project_explore_mapUn directorio, un archivo, o los llamadores y callees de una declaración (direction INCOMING o OUTGOING, depth hasta 8).
project_search_mapEncontrar declaraciones por palabras en sus nombres, rutas o documentación.
project_find_referencesCada uso de una declaración, compilado desde el código fuente actual.

Lo mismo desde la línea de comandos:

npx layermap explore src/api/users.ts --name createUser --direction INCOMING --depth 8
npx layermap search "invoice total"
npx layermap refs src/billing/tax.ts calculateTax

Preguntas frecuentes

¿Cuánto tarda el primer mapa? En un Mac reciente:

  • Miniflux (400 archivos Go): unos 3 s.
  • El servidor de Polar (1,900 archivos Python): alrededor de un minuto.
  • Conductor (1,500 archivos Java y 1,300 archivos TypeScript): menos de dos minutos.

¿Qué no puede ver? Llamadas que el compilador no puede resolver estáticamente: inyección de dependencias, enrutamiento desconocido de frameworks, reflexión y nombres calculados. Las herramientas indican dónde se detiene un trazado, y una relación faltante no prueba su ausencia.

¿Windows? Todavía no.

¿Cómo lo elimino?

  • Claude Code: /plugin uninstall layermap@layermap.
  • Codex: codex plugin remove layermap@layermap.
  • Luego elimina el directorio de caché.

Desarrollo

Necesitas pnpm, Go 1.24 y un JDK 21+. Una cadena de herramientas faltante deja su lenguaje sin analizar.

Ejecuta pnpm install. En la primera instalación, pnpm pregunta qué dependencias pueden ejecutar scripts de compilación; permite solo esbuild, ya que el paquete SQLite incluye binarios precompilados:

pnpm approve-builds esbuild '!@photostructure/sqlite'

Luego ejecuta pnpm test, pnpm typecheck o pnpm lint.

pnpm package construye el paquete npm.

Licencia

Apache-2.0. Consulta LICENSE y NOTICE.