Communitygithub.com

Touch Map

Úsalo cuando el cambio de intención ya esté definido y el agente deba mapear qué toca el cambio antes de un plan de implementación o cualquier código. Úsalo para nuevas funciones, correcciones de errores y refactorizaciones que muevan un límite. No lo uses para errores tipográficos, comentarios, formato, cambios solo de lockfile, documentación sin código, o mientras el usuario aún está decidiendo qué quiere.

¿Qué es Touch Map?

Touch Map es una habilidad de mapeo de impacto que ayuda a los agentes de IA (como Claude Code, Cursor, Codex) a construir un mapa mental de qué archivos y partes del código deben modificarse para completar un cambio, antes de escribir cualquier código o plan de implementación. Esto es crucial para evitar cambios a ciegas o incompletos, ya que obliga al agente a entender el alcance exacto del cambio. La habilidad soporta cualquier repositorio de software y se basa en un archivo de atlas de dominio persistente (`.agent/domain-map.json`) que se compromete con el repositorio y registra la estructura de dominios del proyecto. El agente sigue un procedimiento paso a paso: confirmar la intención, cargar o iniciar el atlas, enfocarse en los archivos relevantes, elegir la ruta óptima entre varias posibles, actualizar el atlas si es necesario, y finalmente mostrar un mapa de seis secciones que detalla los dominios afectados, las partes, cómo se comunican, los archivos a tocar, los que no se tocarán y la decisión de ruta. Es una habilidad de parada inmediata después de mostrar el mapa, sin pasar a la siguiente habilidad ni escribir código.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/AlemTuzlak/skills/tree/HEAD/skills/touch-map

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace Touch Map?

Construye un mapa mental de lo que este cambio debe tocar para completarse. No escribas un plan de implementación. No escribas código. No cargues la siguiente habilidad en una tubería. Una habilidad de flujo de trabajo posterior secuencia este mapa con otras habilidades.

El mapa es el producto: las partes y archivos requeridos para llevar el cambio a término.

Cuándo Usarlo

Cárgalo después de que el usuario haya decidido qué es el cambio y cualquier cómo que ya hayan elegido.

  • Ejecutar para: una nueva función, una corrección de errores, una refactorización que mueve un límite.
  • Saltar: errores tipográficos, comentarios, formato, solo lockfile, documentación sin código.
  • Si la intención aún está abierta ("implementa X" sin comportamiento elegido): detente. Pregunta hasta que el cambio esté definido. Luego mapea. No mapees una función que aún no ha sido elegida.

Puertas Duras

  1. Sin código y sin siguiente habilidad. Esta habilidad mapea. No planifica bloques. No implementa.
  2. Muestra el mapa y detente. No esperes aprobación. El usuario interrumpe si el mapa está mal.
  3. No leas coupling.json. Eso es una verificación separada posterior.
  4. No busques en todo el repositorio utilidades. Registra la reutilización que el agente realmente vio en los dominios afectados. Una habilidad posterior se encarga de la búsqueda completa.

Atlas Persistente

Ruta: <repo>/.agent/domain-map.json

Comprometido con el repositorio. Solo a nivel de dominio. Los nombres de funciones no pertenecen aquí.

{
  "version": 1,
  "domains": [
    {
      "id": "auth",
      "owns": ["packages/auth", "packages/auth-ui"],
      "talksTo": ["users", "sessions"]
    }
  ]
}
  • id — nombre corto, una palabra o en kebab-case.
  • owns — rutas de paquetes o carpetas.
  • talksTo — otros ids de dominio.

Escribe este archivo solo cuando un hecho a nivel de dominio haya cambiado: se haya agregado, eliminado o renombrado un dominio; rutas owns; o un enlace talksTo. Agregar una función dentro de un dominio existente no debe editar este archivo.

Procedimientos

Procedimiento 1: Confirmar intención definida

  1. Si el cambio ya está claro (error nombrado, función nombrada, comportamiento nombrado), continúa.
  2. Si el usuario aún está eligiendo lo que quiere, detén el mapeo. Pregunta hasta que la intención esté definida. Luego regresa aquí.

Procedimiento 2: Cargar o iniciar el atlas

  1. Si existe .agent/domain-map.json, léelo.
  2. Si falta, construye un primer atlas solo a nivel de dominio:
    • Prefiere packages/* (o las carpetas de paquetes del repositorio).
    • En otro caso, usa carpetas de área de nivel superior bajo src/ (o la raíz fuente principal).
    • Establece talksTo a partir de aristas de importación entre esas rutas owns.
    • No pongas nombres de funciones en el atlas.
  3. Crea .agent/ si es necesario. Escribe el archivo. Muestra el nuevo atlas en el mismo turno. Continúa. No esperes.

Procedimiento 3: Enfocarse en este cambio

  1. Elige los dominios afectados del atlas y la intención definida.
  2. Comienza desde los módulos que claramente pertenecen al cambio.
  3. Lee esos archivos. Sigue las importaciones solo mientras la lista de "archivos a tocar" siga cambiando.
  4. Detente cuando un archivo recién abierto no cambie el mapa. No leas un paquete por completitud.
  5. Nombra las partes como módulos más funciones y tipos existentes que el cambio usará o junto a los que se ubicará. Los archivos son punteros, no el mapa.
  6. Anota la reutilización realmente vista en esos archivos (ruta + símbolo). No hagas grep en todo el espacio de trabajo en busca de ayudantes.

Procedimiento 4: Elegir la ruta si existe más de una

Si solo existe una ruta honesta, indícala en una línea.

Si existe más de una ruta, elige una. Detente en el primer escalón de la escalera que decida:

  1. Reutilizar algo que existe sobre escribir un nuevo módulo.
  2. Permanecer dentro de los dominios afectados. No abras un nuevo dominio.
  3. No agregues un paquete, capa o API pública si un cambio interno funciona.
  4. Luego, la menor cantidad de archivos.

Nombra al ganador y qué escalón lo decidió. La menor cantidad de archivos es el desempate, no la regla completa. No metas nuevo comportamiento en un archivo gigante para ganar en conteo de archivos.

Procedimiento 5: Actualizar el atlas (solo a nivel de dominio)

  1. Si este cambio agrega, elimina o renombra un dominio, o cambia owns / talksTo, modifica .agent/domain-map.json en este mismo trabajo.
  2. Si nada a nivel de dominio cambió, deja el archivo en paz.

Procedimiento 6: Mostrar el mapa por cambio

Muestra estas seis secciones, en este orden. No escribas un archivo markdown por tarea.

  1. Dominio(s) afectado(s) — del atlas.
  2. Partes — módulos, más funciones y tipos existentes en juego. Incluye la reutilización vista (ruta + símbolo).
  3. Cómo se comunican — solo las aristas que este cambio usa (llamadas, tipos, datos). No un grafo de llamadas completo. Agrega un diagrama Mermaid solo si esas aristas son difíciles de ver en viñetas.
  4. Archivos a tocar — la lista final. Este es el producto independiente.
  5. No se tocarán — explícito. Detiene ediciones de paso.
  6. Elección de ruta — una línea si había una sola ruta. Si había varias, el ganador y el escalón de la escalera.

Procedimiento 7: Detenerse

  1. Después del Procedimiento 6, detente.
  2. No escribas código. No cargues otra habilidad desde esta.

Árbol de Decisión

  • Intención no definida → Procedimiento 1, luego detén el mapeo hasta que lo esté.
  • Intención definida, cambio de comportamiento → Procedimiento 2 → 3 → 4 → 5 → 6 → 7.
  • Error tipográfico / comentario / formato / lockfile / solo documentación → esta habilidad no aplica.
  • Archivo de atlas faltante → Procedimiento 2 paso 2 (iniciar), luego continúa.
  • Una ruta vs muchas rutas → Procedimiento 4.

Banderas Rojas

SeñalQué significaHaz en su lugar
Mapear antes de que el usuario elija la funciónLa intención no está definidaProcedimiento 1. Pregunta primero.
Abrir cada archivo en ownsRecorrido, no un mapaProcedimiento 3: detente cuando la lista de archivos sea estable.
Hacer grep en el monorepo por isRecordBúsqueda completa es una habilidad diferenteRegistra solo la reutilización ya vista.
Leer coupling.jsonArchivo incorrectoDeja esa verificación para después.
Esperar "¿se ve bien?" en el mapaLa puerta es mostrar y detenerseMuestra las seis secciones y detente.
Comenzar a codificar después del mapaEsta habilidad solo mapeaProcedimiento 7. Sin código.
Cargar la siguiente habilidad de la tubería desde aquíDeja la composición al flujo de trabajoDetente. Deja que la habilidad de flujo de trabajo secuencie.
Escribir .agent/touch-maps/<task>.mdBasura de tarea obsoletaSolo en el chat (o sesión). El archivo atlas es la única persistencia.
Editar el atlas porque se agregó un ayudanteGrano de función en el atlasDeja el atlas. Pon el ayudante en la sección 2.
Elegir la ruta con menos archivos primeroTrampa del archivo giganteEjecuta toda la escalera.

Manejo de Errores

  • No está dentro de un repositorio git: mapea este cambio en las seis secciones. Omite el archivo atlas. Dilo en una línea.
  • El JSON del atlas no es válido: no adivines. Reporta el error de análisis. Reconstruye desde el Procedimiento 2 paso 2 solo si el usuario está de acuerdo, o arregla el JSON si la intención es obvia (coma final, corchete faltante).
  • El dominio afectado no está claro: elige el conjunto más pequeño de dominios que pueda ser dueño del cambio. Indica la duda en la elección de ruta. No inventes un nuevo dominio para un error de un solo archivo.
  • El usuario interrumpe que el mapa está mal: corrige las seis secciones. Vuelve a ejecutar el Procedimiento 4 si la ruta cambió. Luego detente.

Individual skills in this repo

This repo contains 14 individual skills — each has its own dedicated page.

AlemTuzlak/skills

Use when the user wants to write a blog post about a feature, product change, PR, git diff, or any technical topic - accepts marketing briefs, PRs, git refs, codebase paths, or freeform descriptions as input

AlemTuzlak/skills

Use when the user wants to generate a changelog, release notes, or document what changed between versions, tags, or PRs

AlemTuzlak/skills

Use when writing, editing, or organizing documentation, when planning what docs a feature needs, and whenever planning or implementing a new feature or change in a repo (docs ship with the code). Also use when tempted to write docs without showing the discovered readers to the user, without asking for tone, or without loading simple-english and i-have-adhd. Triggers on "write docs for X", "document this feature", "add a guide", "update the docs", "reorganize the docs", "plan feature X", "implement X", or /docs.

AlemTuzlak/skills

Use when a bug is in play: a test fails, CI is red, an API returns the wrong result, a stack trace appears, or the user says it is broken or fix this. Don't use for a new feature with no failure, for types-only work, or for docs.

AlemTuzlak/skills

Use when the user invokes /i-have-adhd, says they have ADHD, or asks for ADHD-friendly output. Also used as a required writing filter by the docs skill. Don't use for marketing copy or after the user says "stop adhd mode" or "normal mode".

AlemTuzlak/skills

Use when a settled change must be turned into an ordered stack of small blocks before anyone implements. Don't use for unsettled intent, typos, comments, formatting, docs-only work, or writing the implementation itself.

AlemTuzlak/skills

Use when the user wants to write a product update email, feature announcement newsletter, or digest email for users or subscribers

AlemTuzlak/skills

Use when the user wants to turn a raw talking-head / screen-share recording into a finished, edited, annotated video plus a full content package. Removes silences, flags mistakes for the user to cut, transcribes, adds transcript-synced overlays (code, on-screen code highlights, word highlights, lists, comparisons, diagrams, section labels, punch-in zooms), renders with original audio, then generates blog/socials/YouTube content. Triggers on "produce a video", "edit my video", "annotate my recording", "/produce-video".

AlemTuzlak/skills

Use when the user runs /prove-it or says prove it, prove the changes, show me in the browser, or asks to prove a UI or API change. Don't use only because the agent is about to say done, for types-only work, or for docs with no behavior to prove.

AlemTuzlak/skills

Use when the user wants to write, draft, or author an RFC (Request for Comments) / technical design doc for a feature, change, or architectural decision. Interactively interviews the user, grounds the proposal in the actual codebase, presents 2-3 concrete API/code-snippet approaches to choose from, then writes a review-ready RFC. Triggers on "write an RFC", "draft an RFC", "RFC for X", "design doc for X", or /rfc.

AlemTuzlak/skills

Use when the user wants to deeply learn a new topic from scratch. Runs a pre-interview (current knowledge, end-goal proficiency, depth, practice load, background, scope), researches online (articles, niche-influencer blogs, canonical docs, subtopic landscape), then produces a structured markdown course with mandatory visual diagrams, evidence-based learning-science features (retrieval practice, spaced callbacks, worked-example fading, concept ledger, jargon gate, analogy hygiene), and a self-contained interactive HTML mini-course. Triggers on /teach-me, "teach me about X", "I want to learn X", "deep dive on X", "create a course on X", "study X with me".

AlemTuzlak/skills

Use when the user wants to transcribe a video or audio file to text with word-level timestamps — spins up a self-contained local Whisper (whisper.cpp) Docker service bundled in this skill and returns transcript.txt, transcript.srt, and word-level transcript.words.json. Also used as a building block by /produce-video. Triggers on "transcribe this video", "get a transcript", "transcribe-video".

AlemTuzlak/skills

Use when the user wants to write a video script for a product demo, feature walkthrough, launch video, or social media video about a feature or product change

AlemTuzlak/skills

Use when the user wants YouTube metadata for a video — a click-worthy title, an SEO/above-the-fold description, tags, and timestamped chapters. Accepts a transcript (ideally timestamped SRT), a topic, a PR, or a freeform description. Used standalone and by /produce-video. Triggers on "youtube title", "youtube description", "youtube chapters", "youtube tags", "youtube metadata", "youtube-copy".

Skills relacionados