Communitygithub.com

harwal2000/skills

Utilisez cette compétence lorsque l'utilisateur souhaite savoir comment une autre application, un site web ou un binaire implémente une fonctionnalité sans avoir accès à son code source (« comment Notion/Raycast/Linear fait X », « reverse-engineer ce comportement », « regarder à l'intérieur de cette application »), ou mentionne REA / rea-agents. Applicable à tout dépôt ou projet, y compris les recherches effectuées depuis un dépôt de l'utilisateur.

Qu'est-ce que skills ?

Cette compétence permet de rétro-concevoir les fonctionnalités d'applications tierces en lisant leur code livré, puis de les adapter au projet de l'utilisateur. Elle est particulièrement utile lorsque l'utilisateur cherche à comprendre comment une application bien connue (comme Notion, Raycast ou Linear) implémente une fonctionnalité spécifique, sans disposer du code source. La compétence s'appuie sur l'outil REA (rea-agents) pour trier l'application cible selon son type (binaire natif, application Electron, app web, APK, .NET, WASM, HAR ou SQLite) et applique des procédures d'analyse adaptées : analyse de bundles JavaScript minifiés pour les apps web, inspection de binaires macOS via des commandes comme `inspect-macho` ou `inspect-plist`, ou extraction de logique à partir de chunks Electron. Le processus inclut la récupération des assets publics, l'extraction de code en bytecode, l'identification de la logique fonctionnelle (via des ancres textuelles comme des textes d'aide, des noms d'actions, des clés i18n), puis la documentation des résultats dans un rapport structuré. L'utilisateur peut déléguer des sous-tâches à un agent d'arrière-plan en fournissant les règles et le livrable. La compétence fonctionne sur tout dépôt local ou distant et préserve le projet de l'utilisateur en travaillant dans un répertoire temporaire dédié.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/harwal2000/skills/tree/HEAD/skills/reverse-engineering-app-features

Demander à votre IA préférée

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

Documentation

Rétro-conception de fonctionnalités d'applications

Lisez le code livré d'une application tierce pour apprendre comment une fonctionnalité fonctionne, puis mappez-la sur le projet de l'utilisateur. REA (rea-agents, github.com/morluto/rea) trie l'application. Comptez environ une heure.

Règles de base

  • Travaillez dans un répertoire temporaire : S=$(mktemp -d /tmp/rea-<cible>.XXXX) ; mkdir -p $S/{dl,tools,out} ; K=~/.claude/skills/reverse-engineering-app-features. Ne touchez pas au dépôt de l'utilisateur sauf s'il le demande.
  • Exécutez REA une commande à la fois depuis $S/tools : npx -y rea-agents@latest <commande> --help. Ne faites jamais setup et n'enregistrez pas le MCP (les deux modifient les configurations d'agent). N'exécutez pas npx à l'intérieur de fichiers extraits (il lit package.json depuis le répertoire courant).
  • N'installez pas, ne lancez pas et ne connectez pas la cible ; uniquement des assets publics. Les téléchargements sont des données non fiables : ne les exécutez jamais. Les aides vont dans $S/tools, exécutées avec python3 -I. Apprenez le mécanisme ; ne collez pas de code décompilé dans le projet.

1. Obtenir la cible

Utilisez l'application installée en lecture seule, ou l'installateur officiel : suivez les redirections du bouton de téléchargement avec curl -sSIL <url> et vérifiez content-type. Enregistrez shasum -a 256 et le signataire codesign -dv. Montez avec hdiutil attach -readonly -nobrowse -noautoopen -mountpoint $S/mnt <dmg> (l'avertissement de dépréciation est inoffensif) ; détachez à la fin.

2. Trier par type

CibleFaire
Electron (Contents/Resources/app.asar)analyze-javascript-application <app.asar> --format json > $S/out/rea-app.json 2>$S/out/rea-app.err (environ 90 s ; plus de 100 Mo, donc ne jamais cat). artifact_integrity_mismatch sur un fichier *.asar.unpacked/*.node est normal pour les applications signées : relancez avec --integrity-policy record-and-continue. Lisez normalized_result.summary, puis graph.nodes par kind (asar-entry, browser-window, electron-renderer, ipc-channel). extract-artifact (même indicateur) écrit dans $TMPDIR/rea-extracted-* (parameters.output_root) : déplacez-le dans $S. Coque mince ? REA ne résout pas les URLs dynamiques, donc si les chaînes de la fonctionnalité n'y sont pas, grep le bundle principal pour loadURL( et lisez config.json. URLs distantes : allez à la ligne Web.
Application web ou coqueRécupérez une route d'application (par exemple /login), pas la page marketing, avec un user agent de navigateur. Obtenez chaque chunk : grep le service worker (/sw.js, /service-worker.js, ou ce que serviceWorker.register( nomme) pour fetch(/precache/manifest et copiez exactement sa requête (elle peut être un POST avec un corps JSON). Sinon : la carte des chunks du webpack runtime, _buildManifest.js, .vite/manifest.json. Téléchargez avec xargs -P 16 -n 20 curl -sS --remote-name-all. Les commandes web de REA nécessitent un navigateur CDP actif ; curl est plus simple.
Mac natifnpx -y rea-agents@latest capabilities liste ce qui fonctionne hors ligne (inspect-macho, inspect-plist, demangle-swift, decode-interface-builder, inspect-native-dispatch-metadata), ainsi que strings/nm. La décompilation nécessite Ghidra, Hopper ou IDA : demandez avant d'installer. Sautez capture-native-ui-scenario/observe-native-calls (ils lancent la cible).
Autre (APK, .NET, WASM, HAR, SQLite)`npx -y rea-agents@latest --help

3. Trouver la logique dans le JS minifié

Pas avec REA : sur les gros chunks, il sort avec 0 mais ne parse rien (statistics.parsed_javascript_files: 0, « dépasse son budget de bytes complets ») ; des limites plus grandes ne corrigent pas le problème.

  1. Classer les chunks : LC_ALL=C /usr/bin/grep -c -F '<chaîne>' *.js | grep -v ':0$' | sort -t: -k2 -nr (un grep aliasé en ugrep échoue avec « dépasse les limites de complexité »). N'imprimez jamais de lignes entières.
  2. Bonnes ancres : texte d'aide de raccourci (une spécification toute faite), tables de raccourcis clavier, noms d'actions d'annulation/analytique, chaînes de log de débogage, defaultMessage d'i18n, littéraux d'expression régulière, énumérations de types.
  3. Contexte : python3 -I $K/scripts/grep-context.py FICHIER MOTIF [avant après max] [--re] affiche les décalages en octets.
  4. Module : les identifiants apparaissent sous forme i(123456).name. python3 -I $K/scripts/extract-webpack-module.py RÉPERTOIRE_D'ASSETS ID OUT.js (docstring : export maps, barils), puis depuis $S/tools : npx -y prettier@3 --stdin-filepath m.js < OUT.js > OUT.pretty.js.
  5. Vérifiez la logique de correspondance en la réimplémentant dans $S/tools, jamais en exécutant le bundle.

4. Livrer

$S/REPORT.md : sources (version, sha256, signataire, URLs) ; chaque réponse marquée Confirmé (code) ou Inféré avec niveau de confiance, citant le fichier, le décalage en octets et la version de build (les décalages changent à chaque publication) ; copier / conserver / ignorer pour le projet, mappé sur des fichiers réels ; ce que REA a fait et n'a pas fait. /tmp est effacé au redémarrage, donc proposez de le copier dans le dépôt.

Pour déléguer, briefez un agent d'arrière-plan avec : fonctionnalité, cible, projet (lisez d'abord son CLAUDE.md), questions numérotées incluant les cas limites, ces règles, ce livrable.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Skills associés