Communitygithub.com

Touch Map

Utilisez lorsque l'intention du changement est déjà fixée et que l'agent doit cartographier ce qu'un changement de comportement touche avant tout plan d'implémentation ou tout code. Utilisez pour les nouvelles fonctionnalités, les corrections de bugs et les refontes qui déplacent une limite. Ne pas utiliser pour les fautes de frappe, les commentaires, le formatage, les diffs de fichiers de verrouillage, la documentation sans code, ou pendant que l'utilisateur décide encore ce qu'il veut.

Qu'est-ce que Touch Map ?

Touch Map est une compétence d'agent AI conçue pour les environnements de développement comme Claude Code, Cursor et Codex. Elle intervient après que l'utilisateur a défini clairement l'intention du changement (comme une nouvelle fonctionnalité, une correction de bug ou une refonte de limite), mais avant toute écriture de code ou planification d'implémentation. Son objectif est de construire une **carte mentale** des parties, fichiers et dépendances que le changement doit toucher, en s'appuyant sur un atlas de domaine persistant (`<repo>/.agent/domain-map.json`) qui stocke les relations entre domaines du projet. La compétence suit des procédures strictes : confirmer l'intention, charger ou créer l'atlas, zoomer sur les modules pertinents, choisir le chemin d'implémentation le plus simple (en respectant des règles hiérarchiques), mettre à jour l'atlas si nécessaire, et enfin afficher une carte structurée en six sections. Elle est particulièrement utile pour éviter le travail inutile, les modifications dispersées et les changements non coordonnés. Elle ne produit **pas de code**, n'appelle **pas** une autre compétence et s'arrête après l'affichage de la carte.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait Touch Map ?

Construisez une carte mentale de ce que ce changement doit toucher pour aboutir. N'écrivez pas de plan d'implémentation. N'écrivez pas de code. Ne chargez pas la compétence suivante dans un pipeline. Une compétence de workflow ultérieure séquence cette carte avec d'autres compétences.

La carte est le produit : les parties et fichiers nécessaires pour mener à bien le changement.

Quand l'utiliser

Chargez après que l'utilisateur a décidé quoi est le changement, et tout comment qu'il a déjà choisi.

  • Exécuter pour : une nouvelle fonctionnalité, une correction de bug, une refonte qui déplace une limite.
  • Ignorer : fautes de frappe, commentaires, formatage, fichiers de verrouillage uniquement, documentation sans code.
  • Si l'intention est encore ouverte (« implémenter X » sans comportement choisi) : arrêtez. Demandez jusqu'à ce que le changement soit fixé. Ensuite, cartographiez. Ne cartographiez pas une fonctionnalité qui n'est pas encore choisie.

Barrières strictes

  1. Pas de code et pas de compétence suivante. Cette compétence cartographie. Elle ne planifie pas de blocs. Elle n'implémente pas.
  2. Affichez la carte et arrêtez. N'attendez pas d'approbation. L'utilisateur interrompt si la carte est erronée.
  3. Ne lisez pas coupling.json. C'est une vérification ultérieure et distincte.
  4. Ne parcourez pas tout le dépôt pour des utilitaires. Enregistrez la réutilisation que l'agent a réellement vue dans les domaines ciblés. Une compétence ultérieure gère la recherche complète.

Atlas persistant

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

Commité avec le dépôt. Grain de domaine uniquement. Les noms de fonctions n'ont pas leur place ici.

{
  "version": 1,
  "domains": [
    {
      "id": "auth",
      "owns": ["packages/auth", "packages/auth-ui"],
      "talksTo": ["users", "sessions"]
    }
  ]
}
  • id — nom court, un mot ou en kebab-case.
  • owns — chemins de paquets ou de dossiers.
  • talksTo — autres identifiants de domaine.

Écrivez ce fichier uniquement lorsqu'un fait au niveau du domaine a changé : un domaine ajouté, supprimé ou renommé ; les chemins owns ; ou un lien talksTo. Ajouter une fonction à l'intérieur d'un domaine existant ne doit pas modifier ce fichier.

Procédures

Procédure 1 : Confirmer l'intention fixée

  1. Si le changement est déjà clair (bug nommé, fonction nommée, comportement nommé), continuez.
  2. Si l'utilisateur choisit encore ce qu'il veut, arrêtez de cartographier. Demandez jusqu'à ce que l'intention soit fixée. Revenez ensuite ici.

Procédure 2 : Charger ou amorcer l'atlas

  1. Si .agent/domain-map.json existe, lisez-le.
  2. S'il est manquant, construisez un premier atlas uniquement au grain du domaine :
    • Préférez packages/* (ou les dossiers de paquets du dépôt).
    • Sinon, utilisez les dossiers de zone de premier niveau sous src/ (ou la racine source principale).
    • Définissez talksTo à partir des arêtes d'import entre ces chemins owns.
    • Ne mettez pas de noms de fonctions dans l'atlas.
  3. Créez .agent/ si nécessaire. Écrivez le fichier. Affichez le nouvel atlas dans le même tour. Continuez. N'attendez pas.

Procédure 3 : Zoomer sur ce changement

  1. Choisissez le(s) domaine(s) ciblé(s) à partir de l'atlas et de l'intention fixée.
  2. Partez des modules qui appartiennent clairement au changement.
  3. Lisez ces fichiers. Suivez les imports uniquement tant que la liste des « fichiers à toucher » change encore.
  4. Arrêtez lorsqu'un fichier nouvellement ouvert ne modifie pas la carte. Ne lisez pas un paquet en entier par souci d'exhaustivité.
  5. Nommez les parties comme modules plus fonctions et types existants que le changement utilisera ou à côté desquels il se trouvera. Les fichiers sont des pointeurs, pas la carte.
  6. Notez la réutilisation réellement vue dans ces fichiers (chemin + symbole). Ne parcourez pas tout l'espace de travail pour des aides.

Procédure 4 : Choisir le chemin s'il en existe plus d'un

S'il n'existe qu'un seul chemin honnête, énoncez-le en une ligne.

S'il existe plus d'un chemin, choisissez-en un. Arrêtez-vous à la première étape de l'échelle qui décide :

  1. Réutiliser quelque chose qui existe plutôt que d'écrire un nouveau module.
  2. Rester dans le(s) domaine(s) ciblé(s). N'ouvrez pas un nouveau domaine.
  3. N'ajoutez pas de paquet, de couche ou d'API publique si un changement interne fonctionne.
  4. Ensuite, le moins de fichiers.

Nommez le gagnant et quelle étape a décidé. Le moins de fichiers est le départage, pas la règle entière. Ne fourrez pas un nouveau comportement dans un fichier godillot pour gagner sur le nombre de fichiers.

Procédure 5 : Mettre à jour l'atlas (niveau domaine uniquement)

  1. Si ce changement ajoute, supprime ou renomme un domaine, ou modifie owns / talksTo, corrigez .agent/domain-map.json dans ce même travail.
  2. Si rien n'a changé au grain du domaine, laissez le fichier tranquille.

Procédure 6 : Afficher la carte par changement

Affichez ces six sections, dans cet ordre. N'écrivez pas de fichier markdown par tâche.

  1. Domaine(s) ciblé(s) — depuis l'atlas.
  2. Parties — modules, plus fonctions et types existants en jeu. Incluez la réutilisation vue (chemin + symbole).
  3. Comment ils parlent — uniquement les arêtes que ce changement utilise (appels, types, données). Pas un graphe d'appels complet. Ajoutez un diagramme Mermaid uniquement si ces arêtes sont difficiles à voir en listes.
  4. Fichiers à toucher — la liste finale. C'est le produit autonome.
  5. Ne touchera pas — explicite. Empêche les modifications parasites.
  6. Choix du chemin — une ligne s'il n'y avait qu'un seul chemin. S'il y en avait plusieurs, le gagnant et l'étape de l'échelle.

Procédure 7 : Arrêter

  1. Après la procédure 6, arrêtez.
  2. N'écrivez pas de code. Ne chargez pas une autre compétence depuis celle-ci.

Arbre de décision

  • Intention non fixée → Procédure 1, puis arrêtez de cartographier jusqu'à ce qu'elle le soit.
  • Intention fixée, changement de comportement → Procédure 2 → 3 → 4 → 5 → 6 → 7.
  • Faute de frappe / commentaire / format / fichier de verrouillage / documentation uniquement → cette compétence ne s'applique pas.
  • Fichier d'atlas manquant → Procédure 2 étape 2 (amorçage), puis continuez.
  • Un chemin vs plusieurs chemins → Procédure 4.

Drapeaux rouges

SignalCe que ça signifieFaites plutôt
Cartographier avant que l'utilisateur ait choisi la fonctionnalitéL'intention n'est pas fixéeProcédure 1. Interrogez d'abord.
Ouvrir chaque fichier dans ownsTournée, pas une carteProcédure 3 : arrêtez quand la liste de fichiers est stable.
Chercher isRecord dans tout le monorepoLa recherche complète est une autre compétenceEnregistrez uniquement la réutilisation déjà vue.
Lire coupling.jsonMauvais fichierLaissez cette vérification pour plus tard.
Attendre un « ça va ? » sur la carteLa barrière est afficher-et-arrêterAffichez les six sections et arrêtez.
Commencer à coder après la carteCette compétence ne fait que cartographierProcédure 7. Pas de code.
Charger la compétence de pipeline suivante depuis iciLaisse la composition au workflowArrêtez. Laissez la compétence de workflow séquencer.
Écrire .agent/touch-maps/<task>.mdDéchets de tâche obsolètesChat (ou session) uniquement. Le seul fichier persistant est l'atlas.
Modifier l'atlas parce qu'une aide a été ajoutéeGrain de fonction dans l'atlasLaissez l'atlas. Mettez l'aide dans la section 2.
Choisir le chemin avec le moins de fichiers en premierPiège du fichier godillotSuivez l'échelle complète.

Gestion des erreurs

  • Pas à l'intérieur d'un dépôt git : cartographiez ce changement dans les six sections. Ignorez le fichier d'atlas. Dites-le en une ligne.
  • Le JSON de l'atlas est invalide : ne devinez pas. Signalez l'erreur d'analyse. Reconstruisez à partir de la procédure 2 étape 2 uniquement si l'utilisateur est d'accord, ou corrigez le JSON si l'intention est évidente (virgule traînante, crochet manquant).
  • Le domaine ciblé n'est pas clair : choisissez le plus petit ensemble de domaines qui peut posséder le changement. Exprimez le doute dans le choix du chemin. N'inventez pas un nouveau domaine pour un bug d'un seul fichier.
  • L'utilisateur interrompt en disant que la carte est erronée : corrigez les six sections. Relancez la procédure 4 si le chemin a changé. Ensuite, arrêtez.

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 associés