Del caos multiagente
a un harness de agentes y skills predecibles.

Recupera tokens (¡y dinero!), ahorra tiempo y vuelve determinísticos a tus Markdowns. Detecta colisiones, huérfanos, duplicados semánticos y skills obesas.
El arnés que diseñaste, por fin visible y verificable: análisis determinístico y semántico (LLM) sobre un mismo grafo.

Demo en vivo
~/.claude/skills
13 nodes · 15 links · 3 collisions · 1 orphan
Skill
Agent
MCP
Markdown
Command
Orphan
oauth-flow deploy ship release reviewer planner mcp:github mcp:fs fs/read git/log legacy.md read-pdf CLAUDE.md
Primeros pasos

tutorial en 5 líneas

Instala, crea una carpeta vacía y abre tu agente (Claude Code, Codex, etc). Deja que tu agente te guíe por todo el flujo, en vivo en tu consola y navegador.

bash
npm i -g @skill-map/cli mkdir try-skill-map && cd try-skill-map sm tutorial# instala la skill del tutorial claude# abre Claude Code aquí

Después, dentro de Claude, escribe:

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

Features

Determinístico. 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 Analyzer BUILT-IN Action Formatter BUILT-IN Hook BUILT-IN
tipo de plugin

Provider

Define un agente (Claude, Codex, etc)

Declara los tipos de archivo que un agente expone (skill / agent / command para Claude), dónde vive su contenido en disco, el schema de frontmatter de cada tipo y cómo la UI lo dibuja (etiqueta, color, ícono). El provider de Claude viene built-in; escribe uno para Codex, Copilot, o tu propio runner.

// claude/provider.ts (kinds live in claude/kinds/<name>/)
// id and kind come from the folder, you never write them.
export default {
  version: '0.1.0',
  description: 'Claude Code agents, commands, and skills',
  presentation: { label: 'Claude', color: '#cc785c' },
  detect: { markers: ['.claude'] },
  read: { extensions: ['.md'], parser: 'frontmatter-yaml' },
  classify: (path, fm) => /* 'agent' | 'command' | 'skill' | null */,
};
tipo de plugin

Extractor

Extrae datos de un nodo

Cada archivo es un nodo; un Extractor lo convierte en datos. Links a otros nodos, atributos que enriquecen el nodo, o señales que guardas en tu propio KV. Código puro, determinístico, corre en milisegundos dentro de `sm scan`, sin LLM, sin costo.

// claude/extractors/slash/index.ts
export default {
  version: '0.1.0',
  description: 'Link /command invocations to their target',
  scope: 'body',
  extract(ctx) {
    for (const [, cmd] of ctx.body.matchAll(SLASH_RE))
      ctx.emitLink({
        source: ctx.node.path, target: cmd,
        kind: 'invokes', confidence: 0.8,
      });
  },
};
tipo de plugin

Analyzer

Encuentra problemas en el grafo

Mira el grafo completo y detecta problemas: colisiones de trigger, huérfanos, dependencias muertas, referencias rotas. Escribe un analyzer, ejecútalo en cualquier proyecto, o publícalo para que otros lo usen.

// example/analyzers/trigger-collisions/index.ts
export default {
  version: '0.1.0',
  description: 'Flags two nodes that share one trigger',
  evaluate(ctx) {
    return [...byTrigger(ctx.nodes)]
      .filter(([, ns]) => ns.length > 1)
      .map(([trigger, ns]) => ({
        severity: 'warn',
        nodeIds: ns.map((n) => n.path),
        message: `"${trigger}" claimed by ${ns.length} nodes`,
      }));
  },
};
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.

// core/actions/rename-trigger/index.ts
export default {
  version: '0.1.0',
  description: 'Rename a node trigger',
  mode: 'deterministic',
  invoke(input, ctx) {
    return {
      report: { ok: true, trigger: input.trigger },
      writes: [{ kind: 'sidecar', path: ctx.nodeAbsolutePath,
        changes: { annotations: { trigger: input.trigger } } }],
    };
  },
};
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.

// core/formatters/mermaid/index.ts
export default {
  version: '0.1.0',
  description: 'Render the graph as Mermaid',
  format(ctx) {
    return 'graph LR\n' + ctx.links
      .map((l) => `  ${l.source} --> ${l.target}`).join('\n');
  },
};
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 diez eventos a los que te puedes suscribir.

// integrations/hooks/slack-on-failure/index.ts
export default {
  version: '0.1.0',
  description: 'Post to Slack when a job fails',
  triggers: ['job.failed'],
  on(ctx) {
    slack.post('#alerts', ctx.jobResult);
  },
};

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: prepara el proyecto, escanea tus skills, abre el explorador en el navegador y observa cambios en vivo.

    $ sm
  2. 02

    Detecta los problemas.

    Skills obesas que se comen tus tokens, colisiones de trigger, huérfanos, referencias rotas, 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 markdown: 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

Mira el arnés que diseñaste, en todos tus proyectos.

Múltiples proyectos, múltiples agentes, copias divergentes de la misma skill en tu harness. Un solo scan pone toda la colmena en el mismo grafo, y el diseño que pensaste y el que publicaste por fin coinciden.

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.

Para quien construye herramientas

Construye sobre el grafo.

Cada operación tiene un verbo CLI, una salida JSON y un hook de plugin. Conecta skill-map a tu CI, tu dashboard o tu flujo LLM, sin forkear el kernel.

Deja de leer carpetas.
Empieza a leer grafos.

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

Ver en GitHub

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