[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CSVVGEG33K7KHP15N73H7J":3,"skill-same:01M6CSVVGEG33K7KHP15N73H7J":183},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":31,"publishedAt":52,"linkOnly":53,"markdownContent":54,"markdownBody":55,"frontMatter":56,"refName":118,"commitSha":119,"skillDirectory":120,"forksCount":14,"repositoryHtmlUrl":121,"repositoryHomepageUrl":6,"ownerHtmlUrl":122,"ownerBlogUrl":6,"ownerDescription":123,"updatedAt":124,"install":125,"resources":138},"01M6CSVVGEG33K7KHP15N73H7J","volontariapp-skill-evolution",null,"Boucle d'auto-apprentissage des skills Volontariapp : savoir quelles skills sont désynchronisées du code (tous repos confondus), les mettre à jour, consigner une leçon apprise (correction de l'utilisateur, piège découvert), créer une skill quand un sujet n'est couvert par aucune, et garder le bundle conforme OKF v0.2. À utiliser quand le hook de fin de boucle le demande, après une correction de l'utilisateur, ou pour toute modification de .agents\u002Fskills\u002F.","Volontariapp\u002Fmeta","Volontariapp","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F263673138?v=4","01M6CSQNQ3J4SKRWA512JQF5K7","VolontariApp","01M6CSQNV8T2M4PR5A22DKHY5T",0,"MIT","https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvolontariapp-skill-evolution\u002FSKILL.md",[18,23,28],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",{"categoryNo":29,"categoryName":30,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000033","数据分析师",[32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],"evolution","volontariapp skill evolution","skill evolution","du","de","cli","team","apprise","commit","code","multi-repo","auto","MCP","knowledge","open","settings.json","hooks","auto-learning","google cloud","mesh","2026-11-10 10:12:30",false,"---\nname: volontariapp-skill-evolution\ndescription: \"Boucle d'auto-apprentissage des skills Volontariapp : savoir quelles skills sont désynchronisées du code (tous repos confondus), les mettre à jour, consigner une leçon apprise (correction de l'utilisateur, piège découvert), créer une skill quand un sujet n'est couvert par aucune, et garder le bundle conforme OKF v0.2. À utiliser quand le hook de fin de boucle le demande, après une correction de l'utilisateur, ou pour toute modification de .agents\u002Fskills\u002F.\"\ntype: Agent Skill\ntitle: Évolution des skills (auto-apprentissage)\ntags: [skills, okf, auto-learning, hooks, multi-repo]\nstatus: stable\npaths:\n  - .claude\u002Fsettings.json\n  - \".claude\u002Fhooks\u002F**\"\n  - .husky\u002Fpre-commit\n  - AGENTS.md\n  - CLAUDE.md\n  - GEMINI.md\n  - \".cursor\u002Frules\u002F**\"\n  - .agents\u002Fmesh-mcp.toml\n  - \"*\u002F.githooks\u002Fpre-commit\"\n  - \"*\u002F.husky\u002Fpre-commit\"\n  - scripts\u002Finstall-skill-hooks.sh\n  - scripts\u002Fcli\u002Fcommands\u002Fsetup.mjs\nmesh_keys:\n  - skill-evolution\n  - evolve.py\n  - okf\ngenerated:\n  by: claude-code\u002Fclaude-opus-5-5\n  at: \"2026-10-06T08:20:00Z\"\nsources:\n  - id: okf-spec\n    author: \"team:google-cloud-data-analytics\"\n    title: \"Introducing the Open Knowledge Format (Google Cloud, 2026-06-12)\"\n  - id: evolve\n    resource: .agents\u002Fskills\u002Fvolontariapp-skill-evolution\u002Fscripts\u002Fevolve.py\n    title: \"evolve.py, moteur de la boucle\"\n  - id: stop-hook\n    resource: .claude\u002Fhooks\u002Fstop-skill-evolution.sh\n    title: Hook Stop Claude Code\n  - id: mesh-toml\n    resource: .agents\u002Fmesh-mcp.toml\n    title: \"mesh-mcp.toml, table [engines.policy.skills] générée\"\n  - id: check-symbols\n    resource: .agents\u002Fskills\u002Fvolontariapp-skill-evolution\u002Fscripts\u002Fcheck_symbols.py\n    title: check_symbols.py\nverified:\n  - by: claude-code\u002Fagent\n    at: \"2026-11-05T12:58:05Z\"\n    digest: 93660a4e1e417e72\n  - by: claude-code\u002Fagent\n    at: \"2026-11-05T13:01:27Z\"\n    digest: 170e0c52cec533aa\n  - by: claude-code\u002Fagent\n    at: \"2026-11-05T13:16:28Z\"\n    digest: c9e38910e9a284ec\n  - by: claude-code\u002Fagent\n    at: \"2026-11-05T14:52:23Z\"\n    digest: c9e38910e9a284ec\n  - by: claude-code\u002Fagent\n    at: \"2026-11-08T12:02:26Z\"\n    digest: 7b598620562b46a8\n---\n\n# Évolution des skills (auto-apprentissage)\n\nLes skills sont la mémoire de travail des agents sur l'écosystème Volontariapp. Elles ne valent que si elles disent vrai : cette skill les garde alignées sur le code, et les enrichit de ce que l'agent apprend.\n\n## Le principe\n\nChaque `SKILL.md` déclare dans son frontmatter :\n- `paths` : les fichiers décrits (motifs glob **relatifs à `meta`**, par exemple `ms-user\u002Fsrc\u002F**` ou `npm-packages\u002Fpackages\u002Fmessaging\u002Fsrc\u002Fjobs\u002F**`) ;\n- `verified` : quand elle a été vérifiée pour la dernière fois contre ce code (famille *trust* d'OKF)[^okf-spec].\n\n`evolve.py` compare les deux : tout fichier couvert modifié après la dernière vérification (commit ou modification locale) rend la skill **à mettre à jour**, avec la liste exacte des fichiers, la façon dont ils ont changé et les références qui les citent[^evolve].\n\n## Multi-repo\n\n`meta` ignore les repos clonés sous lui (`ms-*`, `api-gateway`, `npm-packages`, `proto-registry`, runners...). `evolve.py` détecte chaque sous-dossier qui a son propre `.git` et interroge git **dans le repo propriétaire** du fichier : les commits apparaissent sous la forme `ms-user@abc1234`, et les commandes de relecture du plan sont `git -C \u003Crepo> diff -- \u003Cchemin relatif au repo>`[^evolve]. Les sous-modules (`deploy\u002Fsubmodules\u002F*`) sont ignorés.\n\n## La boucle (automatique)\n\nÀ la fin de chaque boucle de l'agent, le hook `Stop`[^stop-hook] lance `evolve.py hook`. S'il y a quelque chose à faire, il bloque l'arrêt **une fois** et donne le plan. L'agent doit alors :\n\n1. **Relire** les fichiers listés (la commande `git -C ...` exacte est fournie).\n2. **Mettre à jour** `SKILL.md` et les références qui citent ces fichiers : règles, commandes, chemins, pièges. Ajouter un script dans `scripts\u002F` si une vérification revient souvent.\n3. **Enregistrer la vérification** : `evolve.py sync \u003Cskill> --message \"\u003Cce qui a changé>\"`, même si rien n'était à modifier.\n4. **Consigner une leçon** si l'utilisateur a corrigé l'agent ou si un piège non évident a été découvert : `evolve.py learn`.\n5. **Créer une skill** si un sujet n'est couvert par aucune : `evolve.py new`, puis la remplir.\n\nDétail : [Workflow de la boucle](\u002Fvolontariapp-skill-evolution\u002Freferences\u002Fworkflow.md).\n\n## Commandes\n\n```bash\nE=\".agents\u002Fskills\u002Fvolontariapp-skill-evolution\u002Fscripts\u002Fevolve.py\"\npython3 $E status                 # état de chaque skill\npython3 $E plan                   # plan d'action précis\npython3 $E validate               # conformité OKF (exit 1 si erreur)\npython3 $E sync volontariapp-implement-async-job-flow --message \"nouveau handler worker-user\"\npython3 $E learn --skill volontariapp-shared-npm-package-change --kind pitfall \\\n  --title \"Snapshot non publié\" \\\n  --insight \"Un yarn up vers une version snapshot échoue tant que la CI de la PR npm-packages n'a pas fini.\" \\\n  --source npm-packages\u002F.github\u002Fworkflows\n#   --source : fichier existant (chemin relatif à meta) ou URL, jamais du texte libre ; `learn` refuse sinon\npython3 $E new volontariapp-saga-rollback --title \"Rollback de saga\" --description \"...\" \\\n  --paths \"post-processors-runner\u002F*\u002Fsrc\u002Fpost-processors\u002F*-failed.post-processor.ts\" --mesh-keys rollback creation_failed\npython3 $E owners ms-user\u002Fsrc\u002Fmain.ts\n```\n\n## Recommandation des skills par mesh-mcp\n\nChaque `SKILL.md` déclare `mesh_keys` : les sujets (fragment de `scope`\u002F`target`, ou nom d'outil comme `analyze_grpc`) pour lesquels mesh-mcp affiche « Project skill for this area » en tête de réponse. `evolve.py index` (donc aussi `sync`, `learn`, `new`) régénère la table `[engines.policy.skills]` de `.agents\u002Fmesh-mcp.toml` entre les marqueurs `skills-mesh`[^mesh-toml] ; ne jamais éditer ces lignes à la main.\n\n- La clé la plus longue contenue dans le sujet gagne ; une clé égale à un nom d'outil gagne toujours : à réserver aux outils dont toutes les réponses concernent la même skill.\n- Sans `mesh_keys`, des clés sont dérivées du préfixe littéral de `paths` (4 caractères minimum) et `validate` affiche un avertissement.\n- Une même clé déclarée par deux skills fait échouer `validate`.\n- `new --mesh-keys k1 k2` les pose à la création.\n\n## Vérifier qu'une skill ne cite pas d'API inventée\n\n```bash\npython3 .agents\u002Fskills\u002Fvolontariapp-skill-evolution\u002Fscripts\u002Fcheck_symbols.py [skill...]\n```\n\nListe les identifiants de code entre backticks introuvables dans les sources des repos[^check-symbols]. Un symbole introuvable est soit une cible à présenter explicitement comme non implémentée, soit une erreur. À lancer après toute écriture de skill à partir d'un README : plusieurs README décrivent des API qui n'existent pas.\n\n## Règles\n\n- **Même contexte pour tous les agents** : `AGENTS.md` (racine de `meta`) est la source unique ; son index des skills est régénéré par `evolve.py index`. Les skills du plugin matt-pocock sont des liens dans `.agents\u002Fskills\u002F` : listées, jamais modifiées. Détail : [Configuration multi-agents](\u002Fvolontariapp-skill-evolution\u002Freferences\u002Fmulti-agent-layout.md).\n- **Rédiger pour un agent** : appliquer la skill `writing-for-agents` du plugin avant de créer ou modifier une skill.\n- **Une connaissance = un fichier.** `SKILL.md` reste court (quand l'utiliser, règles, liens) ; le détail va dans `references\u002F`, chaque fichier étant un concept OKF avec au minimum un `type`.\n- **Chaque règle factuelle est sourcée** : entrée `sources` (chemin relatif à `meta` ou URL) et note `[^id]` dans le texte. Une source locale qui disparaît fait échouer `validate`.\n- **Ne jamais écraser `generated`** : une vérification ajoute une entrée à `verified` (les 5 dernières sont gardées).\n- **`index.md` et `log.md` sont réservés** : générés par `evolve.py`, jamais de frontmatter.\n- **Noms de skills** : `volontariapp-\u003Csujet>` en minuscules et tirets (contrainte Claude Code), égal au champ `name`.\n- **Pas d'emoji ni de tiret cadratin** dans les skills (règle du projet).\n\nConventions détaillées : [Conventions OKF du dépôt](\u002Fvolontariapp-skill-evolution\u002Freferences\u002Fokf-conventions.md).\n\n[^okf-spec]: Introducing the Open Knowledge Format (Google Cloud, 2026-06-12)\n[^evolve]: evolve.py, moteur de la boucle\n[^stop-hook]: Hook Stop Claude Code\n[^mesh-toml]: mesh-mcp.toml, table [engines.policy.skills] générée\n[^check-symbols]: check_symbols.py\n","# Évolution des skills (auto-apprentissage)\n\nLes skills sont la mémoire de travail des agents sur l'écosystème Volontariapp. Elles ne valent que si elles disent vrai : cette skill les garde alignées sur le code, et les enrichit de ce que l'agent apprend.\n\n## Le principe\n\nChaque `SKILL.md` déclare dans son frontmatter :\n- `paths` : les fichiers décrits (motifs glob **relatifs à `meta`**, par exemple `ms-user\u002Fsrc\u002F**` ou `npm-packages\u002Fpackages\u002Fmessaging\u002Fsrc\u002Fjobs\u002F**`) ;\n- `verified` : quand elle a été vérifiée pour la dernière fois contre ce code (famille *trust* d'OKF)[^okf-spec].\n\n`evolve.py` compare les deux : tout fichier couvert modifié après la dernière vérification (commit ou modification locale) rend la skill **à mettre à jour**, avec la liste exacte des fichiers, la façon dont ils ont changé et les références qui les citent[^evolve].\n\n## Multi-repo\n\n`meta` ignore les repos clonés sous lui (`ms-*`, `api-gateway`, `npm-packages`, `proto-registry`, runners...). `evolve.py` détecte chaque sous-dossier qui a son propre `.git` et interroge git **dans le repo propriétaire** du fichier : les commits apparaissent sous la forme `ms-user@abc1234`, et les commandes de relecture du plan sont `git -C \u003Crepo> diff -- \u003Cchemin relatif au repo>`[^evolve]. Les sous-modules (`deploy\u002Fsubmodules\u002F*`) sont ignorés.\n\n## La boucle (automatique)\n\nÀ la fin de chaque boucle de l'agent, le hook `Stop`[^stop-hook] lance `evolve.py hook`. S'il y a quelque chose à faire, il bloque l'arrêt **une fois** et donne le plan. L'agent doit alors :\n\n1. **Relire** les fichiers listés (la commande `git -C ...` exacte est fournie).\n2. **Mettre à jour** `SKILL.md` et les références qui citent ces fichiers : règles, commandes, chemins, pièges. Ajouter un script dans `scripts\u002F` si une vérification revient souvent.\n3. **Enregistrer la vérification** : `evolve.py sync \u003Cskill> --message \"\u003Cce qui a changé>\"`, même si rien n'était à modifier.\n4. **Consigner une leçon** si l'utilisateur a corrigé l'agent ou si un piège non évident a été découvert : `evolve.py learn`.\n5. **Créer une skill** si un sujet n'est couvert par aucune : `evolve.py new`, puis la remplir.\n\nDétail : [Workflow de la boucle](\u002Fvolontariapp-skill-evolution\u002Freferences\u002Fworkflow.md).\n\n## Commandes\n\n```bash\nE=\".agents\u002Fskills\u002Fvolontariapp-skill-evolution\u002Fscripts\u002Fevolve.py\"\npython3 $E status                 # état de chaque skill\npython3 $E plan                   # plan d'action précis\npython3 $E validate               # conformité OKF (exit 1 si erreur)\npython3 $E sync volontariapp-implement-async-job-flow --message \"nouveau handler worker-user\"\npython3 $E learn --skill volontariapp-shared-npm-package-change --kind pitfall \\\n  --title \"Snapshot non publié\" \\\n  --insight \"Un yarn up vers une version snapshot échoue tant que la CI de la PR npm-packages n'a pas fini.\" \\\n  --source npm-packages\u002F.github\u002Fworkflows\n#   --source : fichier existant (chemin relatif à meta) ou URL, jamais du texte libre ; `learn` refuse sinon\npython3 $E new volontariapp-saga-rollback --title \"Rollback de saga\" --description \"...\" \\\n  --paths \"post-processors-runner\u002F*\u002Fsrc\u002Fpost-processors\u002F*-failed.post-processor.ts\" --mesh-keys rollback creation_failed\npython3 $E owners ms-user\u002Fsrc\u002Fmain.ts\n```\n\n## Recommandation des skills par mesh-mcp\n\nChaque `SKILL.md` déclare `mesh_keys` : les sujets (fragment de `scope`\u002F`target`, ou nom d'outil comme `analyze_grpc`) pour lesquels mesh-mcp affiche « Project skill for this area » en tête de réponse. `evolve.py index` (donc aussi `sync`, `learn`, `new`) régénère la table `[engines.policy.skills]` de `.agents\u002Fmesh-mcp.toml` entre les marqueurs `skills-mesh`[^mesh-toml] ; ne jamais éditer ces lignes à la main.\n\n- La clé la plus longue contenue dans le sujet gagne ; une clé égale à un nom d'outil gagne toujours : à réserver aux outils dont toutes les réponses concernent la même skill.\n- Sans `mesh_keys`, des clés sont dérivées du préfixe littéral de `paths` (4 caractères minimum) et `validate` affiche un avertissement.\n- Une même clé déclarée par deux skills fait échouer `validate`.\n- `new --mesh-keys k1 k2` les pose à la création.\n\n## Vérifier qu'une skill ne cite pas d'API inventée\n\n```bash\npython3 .agents\u002Fskills\u002Fvolontariapp-skill-evolution\u002Fscripts\u002Fcheck_symbols.py [skill...]\n```\n\nListe les identifiants de code entre backticks introuvables dans les sources des repos[^check-symbols]. Un symbole introuvable est soit une cible à présenter explicitement comme non implémentée, soit une erreur. À lancer après toute écriture de skill à partir d'un README : plusieurs README décrivent des API qui n'existent pas.\n\n## Règles\n\n- **Même contexte pour tous les agents** : `AGENTS.md` (racine de `meta`) est la source unique ; son index des skills est régénéré par `evolve.py index`. Les skills du plugin matt-pocock sont des liens dans `.agents\u002Fskills\u002F` : listées, jamais modifiées. Détail : [Configuration multi-agents](\u002Fvolontariapp-skill-evolution\u002Freferences\u002Fmulti-agent-layout.md).\n- **Rédiger pour un agent** : appliquer la skill `writing-for-agents` du plugin avant de créer ou modifier une skill.\n- **Une connaissance = un fichier.** `SKILL.md` reste court (quand l'utiliser, règles, liens) ; le détail va dans `references\u002F`, chaque fichier étant un concept OKF avec au minimum un `type`.\n- **Chaque règle factuelle est sourcée** : entrée `sources` (chemin relatif à `meta` ou URL) et note `[^id]` dans le texte. Une source locale qui disparaît fait échouer `validate`.\n- **Ne jamais écraser `generated`** : une vérification ajoute une entrée à `verified` (les 5 dernières sont gardées).\n- **`index.md` et `log.md` sont réservés** : générés par `evolve.py`, jamais de frontmatter.\n- **Noms de skills** : `volontariapp-\u003Csujet>` en minuscules et tirets (contrainte Claude Code), égal au champ `name`.\n- **Pas d'emoji ni de tiret cadratin** dans les skills (règle du projet).\n\nConventions détaillées : [Conventions OKF du dépôt](\u002Fvolontariapp-skill-evolution\u002Freferences\u002Fokf-conventions.md).\n\n[^okf-spec]: Introducing the Open Knowledge Format (Google Cloud, 2026-06-12)\n[^evolve]: evolve.py, moteur de la boucle\n[^stop-hook]: Hook Stop Claude Code\n[^mesh-toml]: mesh-mcp.toml, table [engines.policy.skills] générée\n[^check-symbols]: check_symbols.py\n",{"name":5,"tags":57,"type":60,"paths":61,"title":74,"status":75,"sources":76,"verified":96,"generated":112,"mesh_keys":115,"description":7},[58,59,49,48,42],"skills","okf","Agent Skill",[62,63,64,65,66,67,68,69,70,71,72,73],".claude\u002Fsettings.json",".claude\u002Fhooks\u002F**",".husky\u002Fpre-commit","AGENTS.md","CLAUDE.md","GEMINI.md",".cursor\u002Frules\u002F**",".agents\u002Fmesh-mcp.toml","*\u002F.githooks\u002Fpre-commit","*\u002F.husky\u002Fpre-commit","scripts\u002Finstall-skill-hooks.sh","scripts\u002Fcli\u002Fcommands\u002Fsetup.mjs","Évolution des skills (auto-apprentissage)","stable",[77,81,85,89,92],{"id":78,"title":79,"author":80},"okf-spec","Introducing the Open Knowledge Format (Google Cloud, 2026-06-12)","team:google-cloud-data-analytics",{"id":82,"title":83,"resource":84},"evolve","evolve.py, moteur de la boucle",".agents\u002Fskills\u002Fvolontariapp-skill-evolution\u002Fscripts\u002Fevolve.py",{"id":86,"title":87,"resource":88},"stop-hook","Hook Stop Claude Code",".claude\u002Fhooks\u002Fstop-skill-evolution.sh",{"id":90,"title":91,"resource":69},"mesh-toml","mesh-mcp.toml, table [engines.policy.skills] générée",{"id":93,"title":94,"resource":95},"check-symbols","check_symbols.py",".agents\u002Fskills\u002Fvolontariapp-skill-evolution\u002Fscripts\u002Fcheck_symbols.py",[97,101,104,107,109],{"at":98,"by":99,"digest":100},"2026-11-05T12:58:05Z","claude-code\u002Fagent","93660a4e1e417e72",{"at":102,"by":99,"digest":103},"2026-11-05T13:01:27Z","170e0c52cec533aa",{"at":105,"by":99,"digest":106},"2026-11-05T13:16:28Z","c9e38910e9a284ec",{"at":108,"by":99,"digest":106},"2026-11-05T14:52:23Z",{"at":110,"by":99,"digest":111},"2026-11-08T12:02:26Z","7b598620562b46a8",{"at":113,"by":114},"2026-10-06T08:20:00Z","claude-code\u002Fclaude-opus-5-5",[116,117,59],"skill-evolution","evolve.py","main","6b8f03b57018fa66da4666071dc17c1577ff45e8",".agents\u002Fskills\u002Fvolontariapp-skill-evolution","https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta","https:\u002F\u002Fgithub.com\u002FVolontariapp","Volontariapp — Application Web\u002FMobile scalabelle construite sur une architecture microservices événementielle (Event-Driven Architecture), implémentant le Trans","2026-11-10 23:40:22",{"source":8,"skillName":5,"commands":126,"prompt":136,"zipAvailable":137},[127,130,133],{"tool":128,"command":129},"npx","npx skills add Volontariapp\u002Fmeta --skill volontariapp-skill-evolution",{"tool":131,"command":132},"bunx","bunx skills add Volontariapp\u002Fmeta --skill volontariapp-skill-evolution",{"tool":134,"command":135},"pnpm","pnpm dlx skills add Volontariapp\u002Fmeta --skill volontariapp-skill-evolution","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvolontariapp-skill-evolution\u002FSKILL.md",true,[139,145,149,153,157,161,165,171,175,179],{"path":140,"resourceType":141,"resourceTypeDesc":142,"sizeBytes":143,"sourceHtmlUrl":144},"index.md","REFERENCE","参考文档",1968,"https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvolontariapp-skill-evolution\u002Findex.md",{"path":146,"resourceType":141,"resourceTypeDesc":142,"sizeBytes":147,"sourceHtmlUrl":148},"log.md",5519,"https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvolontariapp-skill-evolution\u002Flog.md",{"path":150,"resourceType":141,"resourceTypeDesc":142,"sizeBytes":151,"sourceHtmlUrl":152},"references\u002Flessons.md",6149,"https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvolontariapp-skill-evolution\u002Freferences\u002Flessons.md",{"path":154,"resourceType":141,"resourceTypeDesc":142,"sizeBytes":155,"sourceHtmlUrl":156},"references\u002Fmulti-agent-layout.md",5493,"https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvolontariapp-skill-evolution\u002Freferences\u002Fmulti-agent-layout.md",{"path":158,"resourceType":141,"resourceTypeDesc":142,"sizeBytes":159,"sourceHtmlUrl":160},"references\u002Fokf-conventions.md",3659,"https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvolontariapp-skill-evolution\u002Freferences\u002Fokf-conventions.md",{"path":162,"resourceType":141,"resourceTypeDesc":142,"sizeBytes":163,"sourceHtmlUrl":164},"references\u002Fworkflow.md",6030,"https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvolontariapp-skill-evolution\u002Freferences\u002Fworkflow.md",{"path":166,"resourceType":167,"resourceTypeDesc":168,"sizeBytes":169,"sourceHtmlUrl":170},"scripts\u002Fcheck_symbols.py","SCRIPT","脚本",3023,"https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvolontariapp-skill-evolution\u002Fscripts\u002Fcheck_symbols.py",{"path":172,"resourceType":167,"resourceTypeDesc":168,"sizeBytes":173,"sourceHtmlUrl":174},"scripts\u002Fevolve.py",48161,"https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvolontariapp-skill-evolution\u002Fscripts\u002Fevolve.py",{"path":176,"resourceType":167,"resourceTypeDesc":168,"sizeBytes":177,"sourceHtmlUrl":178},"scripts\u002Fokf.py",9844,"https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvolontariapp-skill-evolution\u002Fscripts\u002Fokf.py",{"path":180,"resourceType":167,"resourceTypeDesc":168,"sizeBytes":181,"sourceHtmlUrl":182},"tests\u002Ftest_evolve.py",14723,"https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvolontariapp-skill-evolution\u002Ftests\u002Ftest_evolve.py",[184,208,234,256,281,301],{"skillNo":185,"name":186,"nameZh":6,"description":187,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":188,"categories":189,"keywords":190,"publishedAt":52},"01M6CSW3Y5ZHVBF5BX7S5BAVS0","volontariapp-user-account-deletion","Suppression de compte en deux temps (PENDING_DELETION): requestDeletionWithUserDeleted, finalizeDeletion, fan-out de user.deleted vers les domaines et gather ws. A utiliser pour tout changement de domain-user touchant la suppression, le statut ou le cycle de vie d'un user.","https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvolontariapp-user-account-deletion\u002FSKILL.md",[],[191,192,193,194,195,196,197,198,36,41,199,200,201,202,203,204,205,206,207],"volontariapp user account deletion","user","account deletion","deletion","cycle","gather","sonnet","pending","claude-code","reference","npm","user-account-deletion","src","en","domain","npm-packages","packages",{"skillNo":209,"name":210,"nameZh":6,"description":211,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":212,"categories":213,"keywords":217,"publishedAt":52},"01M6CSVC1ZW30DDFZ8VMEYAAK6","volontariapp-proto-contract-evolution","Modifier un contrat Protobuf de proto-registry (champ, message, enum, RPC) sans casser la compatibilité wire, puis suivre la cascade proto-registry, PR automatique dans npm-packages, publication, consommateurs. À utiliser avant toute édition d'un .proto.","https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvolontariapp-proto-contract-evolution\u002FSKILL.md",[214],{"categoryNo":215,"categoryName":216,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000037","律师与法务",[32,218,219,220,41,221,222,207,223,224,225,226,227,201,228,229,230,231,232,233],"volontariapp proto contract evolution","grpc","lint","workflows","analyze","rpc","ci","pr","protobuf","message","registry","sans","sync","yaml","playbook","github",{"skillNo":235,"name":236,"nameZh":6,"description":237,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":238,"categories":239,"keywords":241,"publishedAt":52},"01M6CSV99ET2Z9W4W4DAK4CMQP","volontariapp-meta-scripts","Utiliser et faire evoluer la CLI Node de meta (setup, doctor, migrate, certs, repos, bump) et le manifeste repos.json, source unique des repos et unites du workspace.","https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvolontariapp-meta-scripts\u002FSKILL.md",[240],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[242,243,244,41,245,199,246,247,248,249,250,251,252,37,253,254,255],"Meta","volontariapp meta scripts","repos","migrate","setup","meta-scripts","json","node","workspace","shell","bump","doctor","draft","install",{"skillNo":257,"name":258,"nameZh":6,"description":259,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":260,"categories":261,"keywords":265,"publishedAt":52},"01M6CSTPHNTGE0WF5CPE8W7ZYQ","volontariapp-implement-async-event-flow","Guide pas-à-pas pour concevoir et implémenter un flux asynchrone complet (messaging -> outbox -> post-processors -> ws-service -> client).","https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvolontariapp-implement-async-event-flow\u002FSKILL.md",[262],{"categoryNo":263,"categoryName":264,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[266,267,268,269,270,271,203,272,273,228,274,275,206,276,277,207,278,279,41,280],"async","implement","volontariapp implement async event flow","flow","event","messaging","mapping","flux","streams","flows","shared","outbox","processor","architecture","runner",{"skillNo":282,"name":283,"nameZh":6,"description":284,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":285,"categories":286,"keywords":290,"publishedAt":52},"01M6CSRQHS0T9955M8CTA5BYJQ","research","Investigate a question against high-trust primary sources and capture the findings as a Markdown file in the repo. Use when the user wants a topic researched, docs or API facts gathered, or reading legwork delegated to a background agent.","https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta\u002Fblob\u002Fmain\u002F.agents\u002Fplugins\u002Fmatt-pocock\u002Fskills\u002Fresearch\u002FSKILL.md",[287],{"categoryNo":288,"categoryName":289,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",[283,291,192,292,293,294,295,296,297,298,299,300],"api","file","repo","markdown","docs","capture","use","question","trust","investigate",{"skillNo":302,"name":303,"nameZh":6,"description":304,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":305,"categories":306,"keywords":310,"publishedAt":52},"01M6CSRMZ82M1YK96Z4SW1STTD","prototype","Build a throwaway prototype to answer a design question. Use when the user wants to sanity-check whether a state model or logic feels right, or explore what a UI should look like.","https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta\u002Fblob\u002Fmain\u002F.agents\u002Fplugins\u002Fmatt-pocock\u002Fskills\u002Fprototype\u002FSKILL.md",[307],{"categoryNo":308,"categoryName":309,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000032","设计师",[303,311,192,312,297,313,298,314,315,316,317,318],"check","ui","look","design","explore","model","build","state"]