De ecosistema caótico
a agentes predecibles.

Recupera tokens (¡y dinero!), ahorra tiempo y vuelve determinísticos a tus Markdowns. Detecta colisiones, huérfanos, duplicados semánticos y skills obesas.
Todo sobre el mismo grafo, con análisis estático y semántico (LLM).

Demo en vivo
~/.claude/skills
13 nodes · 15 links · 3 collisions · 1 orphan
Skill
Agent
Hook
Note
Command
Orphan
oauth-flow deploy ship release reviewer planner pre-commit post-merge fs/read git/log legacy.md read-pdf CLAUDE.md

Todo tu ecosistema de agentes,
¡en una única pantalla!

Features

Estático. Semántico. Mismo grafo.

Determinístico y probabilístico, lado a lado

modes

El análisis estático corre en milisegundos; el LLM corre como job. Un mismo grafo analizado desde dos ángulos.

Peso de tokens por nodo

weight

Conteo de bytes y tokens por nodo. Encuentra la skill obesa que se come tu context window.

Ecosistema

Plugins: Seis tipos.
Infinitas extensiones.

Seis maneras de extender esta herramienta. Tu plugin, el de tu empresa, el que publica la comunidad, todos corren contra el mismo kernel.

+ tu plugin KERNEL motor del grafo Provider BUILT-IN Extractor BUILT-IN Rule BUILT-IN Action Hook BUILT-IN Formatter BUILT-IN
tipo de plugin

Provider

Define un agente (Claude, Codex, etc)

Declara los tipos de archivo que un agente expone (skill / agent / hook / note / command para Claude), cómo clasificarlos y cómo la UI dibuja cada tipo (etiqueta, color, ícono). El provider de Claude viene built-in; escribe uno para Cursor, Copilot, o tu propio runner.

export const claude: IProvider = {
  id: 'claude', kind: 'provider',
  globs: ['~/.claude/**/*.md'],
  kinds: { skill, agent, hook, command, note },
  classify: (p) => /* skill | agent | hook | … */,
};
tipo de plugin

Extractor

Extrae datos de un nodo

Cada archivo es un nodo; un Extractor lo convierte en datos. Extrae links a otros nodos, atributos que enriquecen el nodo, o información extra.

export const slash: IExtractor = {
  id: 'slash', kind: 'extractor',
  extract: (ctx) => {
    for (const m of ctx.body.matchAll(SLASH_RE))
      ctx.emitLink({ kind: 'invokes', target: m[1] });
  },
};
tipo de plugin

Rule

Encuentra problemas en el grafo

Mira el grafo completo y detecta problemas: colisiones de trigger, huérfanos, dependencias muertas, referencias rotas. Escribe una rule, ejecútala en cualquier proyecto, o publícala para que otros la usen.

export const triggerCollisions: IRule = {
  id: 'trigger-collisions', kind: 'rule',
  evaluate: (graph) => byTrigger(graph)
    .filter(([, ns]) => ns.length > 1)
    .map(toCollisionIssue),
};
tipo de plugin

Action

Mejora tus agentes y skills automáticamente

Las actions son el único tipo de plugin que toca el disco. En modo determinístico, código directo: renombra un trigger, ajusta frontmatter. En probabilístico, un prompt que ejecuta el LLM: regenera un summary, reescribe un texto.

export const renameTrigger: IAction = {
  id: 'rename-trigger', kind: 'action', mode: 'deterministic',
  run: async (node, { newTrigger }) => {
    node.frontmatter.trigger = newTrigger;
    await node.save();
  },
};
tipo de plugin

Hook

Notifica e integra con otras herramientas

Cuando algo pasa en skill-map (scan terminado, action ejecutada, job fallido), un Hook reacciona. Mándalo a Slack, dispara un webhook, bloquea un spawn antes de que arranque. Hay ocho eventos a los que te puedes suscribir.

export const slackOnFailure: IHook = {
  id: 'slack-on-failure', kind: 'hook',
  triggers: ['job.failed'],
  on: async (event) => slack.post('#alerts', event.error),
};
tipo de plugin

Formatter

Exporta el grafo a otros formatos

El grafo vive en memoria; un Formatter lo saca afuera. ASCII para terminal, Mermaid para tu README, DOT para Graphviz, JSON para tu pipeline. Los built-in cubren lo común; escribe los tuyos para lo que falte.

export const mermaid: IFormatter = {
  id: 'mermaid', kind: 'formatter',
  format: (graph) => 'graph LR\n' +
    graph.edges.map(e => `  ${e.src} --> ${e.dst}`).join('\n'),
};

Un plugin son ~30 líneas de código.

sm plugins list
Cómo funciona

Un comando. Sin archivo de configuración.

  1. 01

    Cualquiera puede usarlo.

    Sin config, sin setup, sin docs que leer antes. Ejecuta `sm` desde cualquier carpeta y escanea tus skills, abre el explorador en el navegador y observa cambios en vivo.

    $ sm
  2. 02

    Detecta los problemas.

    Colisiones de trigger, huérfanos, referencias rotas, skills obesas, duplicados semánticos. El análisis estático corre local en milisegundos; el semántico (LLM) cuando lo pides.

    7 issues3 collisions · 2 orphans2 broken refs
  3. 03

    Arregla con acciones.

    Las acciones son el tipo de plugin que toca el disco. Las determinísticas corren como código (renombrar un trigger, editar frontmatter); las probabilísticas ejecutan un prompt en el LLM (regenerar un summary, reescribir un texto).

    rename-trigger (deterministic)regenerate-summary (LLM)
Casos de uso

Hecho para quien vive en Markdown.

Sin promesas, sin magia. Solo un grafo sobre los archivos que ya tienes.

Para autores

Optimiza antes de publicar.

Skill, agente o nota: todo Markdown vive conectado al resto. skill-map te muestra duplicados, redundancias y oportunidades de optimización antes de publicar.

Para AI Architects & equipos de plataforma

Sabe qué corre en tu arsenal.

Múltiples proyectos, múltiples agentes, copias divergentes de la misma skill. Un solo scan pone toda la colmena en el mismo grafo.

Para quien depura agentes

Rastrea un fallo hasta su origen.

El agente eligió mal una invocación. ¿Qué la disparó? skill-map sigue el camino completo: desde la frase de trigger hasta la skill que ganó el match. Todo esto en tiempo real.

Deja de leer carpetas.
Empieza a leer grafos.

Mira todo tu ecosistema de agentes en un solo vistazo. Sin config, sin servidor, sin LLM obligatorio.

Ver en GitHub

Roadmap.
Más de 100 decisiones documentadas antes del primer commit. Cinco fases hasta 1.0. Sin atajos.