Extraction GitHub (DSH)

Extrait une URL GitHub (dépôt, issue, pull request, commit, fichier, release) en artefacts locaux complets ET explique en langage simple ce que le projet cherche à faire, avant de présenter les détails. À utiliser lorsqu’un lien github.com est donné pour « extraire », « récupérer », « sauvegarder », « lire en entier » ou « expliquer », surtout si l’utilisateur dit que le résultat n’était pas clair ou si l’URL contient un fragment #nombre.

Qu'est-ce que Extraction GitHub (DSH) ?

Cette compétence est conçue pour les agents IA (comme Claude Code, Cursor, Codex) qui doivent traiter des liens GitHub. Son objectif n'est pas de déverser des fichiers bruts ou des diffs, mais de fournir une explication intelligible du projet et de la modification. Elle commence par comprendre le contexte général du dépôt (description, README) avant de plonger dans le détail de l'URL (issue, PR, commit, etc.). L'agent doit ensuite organiser sa sortie selon un ordre strict : d'abord une explication en language simple (150-300 mots) du problème résolu et de la solution, puis les preuves (liste des fichiers modifiés, diffs, messages de commit). La compétence insiste sur la vérification croisée des données issues de l'API GitHub, du fichier .diff, et des métadonnées, et elle gère les échecs courants (HTML tronqué, 404, 403, redirections). Elle respecte des limites de sécurité strictes : elle n'exécute jamais de code, ne clone pas de dépôt, et demande toujours la permission avant toute action irréversible ou nécessitant des identifiants.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/dji-sq/DSH-skill/tree/HEAD/github-extract

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

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 Extraction GitHub (DSH) ?

Le problème que cette compétence résout

Un utilisateur envoie un lien GitHub. En général, il ne veut pas un tas de fichiers, mais comprendre trois choses :

  1. À quoi sert ce projet ?
  2. Que cherche à résoudre cette modification ?
  3. Pourquoi cette approche a-t-elle été choisie ?

Les fichiers, les diffs, les métadonnées ne sont que des preuves. Livrer les preuves comme conclusion, ce n'est pas extraire — le lecteur se retrouve avec un tableau sans pouvoir expliquer la raison d'être du dépôt.

Critère de complétude (en une phrase) : Une personne qui n'a jamais entendu parler de ce dépôt doit être capable, après avoir lu les 300 premiers mots, de reformuler dans ses propres mots « ce qu'il résout, ce qui a changé, et pourquoi ce changement ». Si ce n'est pas le cas, l'extraction n'est pas terminée.

Étape 0 : Lire d'abord le « projet », puis la « page »

Avant de récupérer une PR / issue, il faut d'abord comprendre le contenant. Sauter cette étape, c'est écrire dans le vide.

Question à répondreOù la lire
Quel est ce projet ?description du dépôt, topics, début du README
Quel vide comble-t-il / que remplace-t-il ?Colonne « Pourquoi » de chaque package dans le README
Qui l'utilise, dans quel contexte ?Section Install / Usage / Develop du README
Où se situe cette modification ?Branche de base de la PR, rôle du package modifié dans la liste

Les monorepos / collections de plugins sont particulièrement importants : il faut d'abord dresser une correspondance « nom du package → responsabilité en une phrase », sinon le lecteur ne peut pas situer la modification. Si le README utilise beaucoup de jargon (ex. "lifecycle hooks", "ctx.web seam"), traduisez-le d'abord en langage simple, avant d'entrer dans le vif du sujet.

Étape 1 : Identifier le type d'URL

Forme de l'URLTypeSource de données principale
github.com/{o}/{r}dépôt/readme + git/trees?recursive=1
…/issues/{n}issueissues/{n}
…/pull/{n}PRpulls/{n} + pulls/{n}/files + pull/{n}.diff
…/commit/{sha}commitcommits/{sha}
…/blob/{ref}/{path}fichiercontents/{path}?ref={ref} (base64)

#1 est un fragment, pas un chemin. Les issues et les PR partagent le même espace de numérotation : si /issues/1 redirige (302) vers /pull/1, alors c'est une PR, et il faut le dire explicitement.

Étape 2 : Récupérer le texte complet via l'API, ne pas lutter contre le HTML

  • Le HTML d'une page ne donne que la barre de navigation et un contenu tronqué. Pour le corps du texte, utilisez toujours api.github.com.
  • Pour le patch, utilisez patch-diff.githubusercontent.com/raw/{o}/{r}/pull/{n}.diff (github.com/.../pull/n.diff fait une redirection inter-domaines, il faut se connecter directement à l'URL finale).
  • raw.githubusercontent.com est souvent indisponible. Utilisez plutôt le décodage local du base64 de contents.
  • Si la commande git / curl locale émet une erreur TLS SEC_E_NO_CREDENTIALS, ne réparez pas le shell, utilisez web_fetch du harness. Ne considérez pas un « échec de clone » comme un blocage de la tâche.

Étape 3 : Vérification croisée

additions/deletions/changed_files ↔ liste des files ↔ les hunk du .diff ; le SHA de la tête de la PR ↔ la référence du patch ; merged ne peut pas être déduit uniquement de state=closed. En cas d'incohérence, continuez à chercher (souvent dû à la pagination ou à un ancien patch). Ne rédigez pas un résultat contradictoire.

Étape 4 : Organiser en un résultat « lisible »

L'ordre est impératif : l'explication d'abord, les preuves ensuite. Le lecteur ne doit pas avoir à parcourir 200 lignes de tableau pour comprendre de quoi il s'agit.

  1. Ce que c'est (150–300 mots, en langage simple) — La raison d'être du projet, le vide qu'il comble. Le premier terme technique doit être expliqué en une phrase : hookkit = transformer le fait d'« écrire un plugin pour accrocher des hooks de cycle de vie » en « écrire un fichier YAML ».
  2. Ce que cette modification cherche à résoudre — Écrivez sous forme de comparaison « avant → après », n'utilisez pas une liste de fichiers comme explication.
  3. Pourquoi cette approche — Extrayez de la description de la PR / du message de commit les compromis et la chaîne de causalité (pourquoi ne pas utiliser un déclencheur push, pourquoi considérer le registre comme un état).
  4. Liste des modifications — Tableau : fichier / état / ajouts-suppressions / rôle en une phrase.
  5. Texte original — Description de la PR, message de commit, cités textuellement, sans réécriture.
  6. Contenu complet — Texte intégral de chaque fichier, sans « …le reste est omis ».
  7. Pratiques transférables — Ne gardez que ce que le lecteur pourra vraiment réutiliser la prochaine fois.
  8. Vérification et couverture — Placez en annexe : résultat de git apply --check, comparaison des SHA de blob, ce qui n'a pas été récupéré.

Règles d'écriture

  • Conclusion d'abord : la première phrase de chaque paragraphe est la conclusion, le reste est l'argumentation.
  • Les tableaux ne portent pas la charge de l'explication. Tout ce qui est « qu'est-ce que c'est » ou « pourquoi » doit être écrit en phrases complètes.
  • N'utilisez pas un nom de fichier comme description fonctionnelle : « a modifié publish.yml » ❌ ; « a ajouté un workflow de publication manuelle, ne publie que sur bouton, par défaut simulation uniquement » ✅.
  • Les chiffres doivent pouvoir être tracés jusqu'à leur source, mais ne placez pas les journaux de vérification au début.
  • Écrivez dans la langue de l'utilisateur.
  • Anti-patrons : accumulation de grands tableaux, copier-coller de diffs fichier par fichier comme corps du texte, commencer par les métadonnées, jargon non expliqué.

Étape 5 : Auto-vérification

  • En lisant uniquement les 300 premiers mots (hors titres), peut-on répondre à « quoi / qu'est-ce qui a changé / pourquoi ce changement » ? Sinon, réécrivez.
  • Y a-t-il des termes non expliqués ?
  • Avez-vous présenté « les fichiers A, B, C ont changé » comme une explication de la modification ?
  • Le patch passe-t-il le git apply --check ? Si non, mentionnez explicitement « non vérifié ».

Modes d'échec

SymptômeCauseTraitement
Le texte se coupe en plein milieuRécupération du HTMLUtilisez l'API
404 sur raw.githubusercontentListe blanche réseauDécodez le base64 de contents
403 limite de débitBoucle non authentifiéePar lots, ralentissez, signalez honnêtement les lacunes
cross-origin redirect not followedRedirection .diffConnectez-vous directement à patch-diff…
Le nombre de fichiers ne correspond pas à changed_filesPaginationRécupérez avec ?per_page=100
L'utilisateur dit « je n'ai pas compris »Seulement des preuves, pas d'explicationRevenez aux sections 1–3 de l'étape 4 et réécrivez

Limites

Priorité : instruction explicite de l'utilisateur > contraintes de cette section > comportement par défaut prudent.

Par défaut, extraction uniquement du contenu, pas de clone / build / install / exécution de tests. Pour un dépôt privé, demandez un token à l'utilisateur, n'en inventez pas. Si le dépôt est archivé, mentionnez-le — le contenu reste extractible, mais l'état influence l'interprétation.

Situations où il faut s'arrêter et demander (et non élargir ses droits)

  • L'utilisateur dit « installe-le / exécute-le » mais l'objet est le dépôt de quelqu'un d'autre, ou cela modifie l'environnement global : confirmez d'abord le périmètre et le mode de retour en arrière.
  • L'instruction est ambiguë (ex. « traite ce dépôt ») : proposez un plan par défaut + une phrase de confirmation, ne devinez pas.
  • L'action est irréversible ou peut modifier l'environnement de l'utilisateur (pnpm install, packages globaux, modification de profil, soumission de PR, push, suppression de fichiers) : demandez toujours d'abord.
  • Des identifiants sont nécessaires (dépôt privé, token, clé SSH) : demandez une fois ; si obtenu, utilisez-le ; sinon, ne sortez que les éléments vérifiables publiquement, et indiquez ce qui manque.

Cas où l'on peut assouplir les règles

  • Le dépôt est celui de l'utilisateur, et il a explicitement dit « fais ce que tu veux / installe directement / ne demande pas » ;
  • Ou l'action est effectuée dans un répertoire temporaire, sans toucher au dépôt d'origine ni à l'état global (dans ce cas, l'assouplissement porte uniquement sur « l'écriture », pas sur « l'exécution de code non fiable »).

En cas d'assouplissement, ajoutez à la fin du résultat une phrase comme « J'ai exécuté X selon votre autorisation », pour que le dépassement soit visible et réversible.

Individual skills in this repo

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

Skills associés