volontariapp-skill-evolution
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/skills/.
- License 许可
- MIT
- 最近更新
- 2026-11-10
- Stars
- ★ 0
- Forks
- 0
01 前言 Front Matter
- name
- volontariapp-skill-evolution
- tags
- [ "skills", "okf", "auto-learning", "hooks", "multi-repo" ]
- type
- Agent Skill
- paths
- [ ".claude/settings.json", ".claude/hooks/**", ".husky/pre-commit", "AGENTS.md", "CLAUDE.md", "GEMINI.md", ".cursor/rules/**", ".agents/mesh-mcp.toml", "*/.githooks/pre-commit", "*/.husky/pre-commit", "scripts/install-skill-hooks.sh", "scripts/cli/commands/setup.mjs" ]
- title
- Évolution des skills (auto-apprentissage)
- status
- stable
- sources
- [ { "id": "okf-spec", "title": "Introducing the Open Knowledge Format (Google Cloud, 2026-06-12)", "author": "team:google-cloud-data-analytics" }, { "id": "evolve", "title": "evolve.py, moteur de la boucle", "resource": ".agents/skills/volontariapp-skill-evolution/scripts/evolve.py" }, { "id": "stop-hook", "title": "Hook Stop Claude Code", "resource": ".claude/hooks/stop-skill-evolution.sh" }, { "id": "mesh-toml", "title": "mesh-mcp.toml, table [engines.policy.skills] générée", "resource": ".agents/mesh-mcp.toml" }, { "id": "check-symbols", "title": "check_symbols.py", "resource": ".agents/skills/volontariapp-skill-evolution/scripts/check_symbols.py" } ]
- verified
- [ { "at": "2026-11-05T12:58:05Z", "by": "claude-code/agent", "digest": "93660a4e1e417e72" }, { "at": "2026-11-05T13:01:27Z", "by": "claude-code/agent", "digest": "170e0c52cec533aa" }, { "at": "2026-11-05T13:16:28Z", "by": "claude-code/agent", "digest": "c9e38910e9a284ec" }, { "at": "2026-11-05T14:52:23Z", "by": "claude-code/agent", "digest": "c9e38910e9a284ec" }, { "at": "2026-11-08T12:02:26Z", "by": "claude-code/agent", "digest": "7b598620562b46a8" } ]
- generated
- { "at": "2026-10-06T08:20:00Z", "by": "claude-code/claude-opus-5-5" }
- mesh_keys
- [ "skill-evolution", "evolve.py", "okf" ]
- description
- 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/skills/.
02 资源文件 10
- 参考文档index.md1.9 KB
- 参考文档log.md5.4 KB
- 参考文档references/lessons.md6.0 KB
- 参考文档references/multi-agent-layout.md5.4 KB
- 参考文档references/okf-conventions.md3.6 KB
- 参考文档references/workflow.md5.9 KB
- 脚本scripts/check_symbols.py3.0 KB
- 脚本scripts/evolve.py47.0 KB
- 脚本scripts/okf.py9.6 KB
- 脚本tests/test_evolve.py14.4 KB
03 SKILL.md 正文
Évolution des skills (auto-apprentissage)
Les 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.
Le principe
Chaque SKILL.md déclare dans son frontmatter :
paths: les fichiers décrits (motifs glob relatifs àmeta, par exemplems-user/src/**ounpm-packages/packages/messaging/src/jobs/**) ;verified: quand elle a été vérifiée pour la dernière fois contre ce code (famille trust d'OKF)[^okf-spec].
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].
Multi-repo
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 <repo> diff -- <chemin relatif au repo>[^evolve]. Les sous-modules (deploy/submodules/*) sont ignorés.
La boucle (automatique)
À 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 :
- Relire les fichiers listés (la commande
git -C ...exacte est fournie). - Mettre à jour
SKILL.mdet les références qui citent ces fichiers : règles, commandes, chemins, pièges. Ajouter un script dansscripts/si une vérification revient souvent. - Enregistrer la vérification :
evolve.py sync <skill> --message "<ce qui a changé>", même si rien n'était à modifier. - 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. - Créer une skill si un sujet n'est couvert par aucune :
evolve.py new, puis la remplir.
Détail : Workflow de la boucle.
Commandes
E=".agents/skills/volontariapp-skill-evolution/scripts/evolve.py"
python3 $E status # état de chaque skill
python3 $E plan # plan d'action précis
python3 $E validate # conformité OKF (exit 1 si erreur)
python3 $E sync volontariapp-implement-async-job-flow --message "nouveau handler worker-user"
python3 $E learn --skill volontariapp-shared-npm-package-change --kind pitfall \
--title "Snapshot non publié" \
--insight "Un yarn up vers une version snapshot échoue tant que la CI de la PR npm-packages n'a pas fini." \
--source npm-packages/.github/workflows
# --source : fichier existant (chemin relatif à meta) ou URL, jamais du texte libre ; `learn` refuse sinon
python3 $E new volontariapp-saga-rollback --title "Rollback de saga" --description "..." \
--paths "post-processors-runner/*/src/post-processors/*-failed.post-processor.ts" --mesh-keys rollback creation_failed
python3 $E owners ms-user/src/main.ts
Recommandation des skills par mesh-mcp
Chaque SKILL.md déclare mesh_keys : les sujets (fragment de scope/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/mesh-mcp.toml entre les marqueurs skills-mesh[^mesh-toml] ; ne jamais éditer ces lignes à la main.
- 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.
- Sans
mesh_keys, des clés sont dérivées du préfixe littéral depaths(4 caractères minimum) etvalidateaffiche un avertissement. - Une même clé déclarée par deux skills fait échouer
validate. new --mesh-keys k1 k2les pose à la création.
Vérifier qu'une skill ne cite pas d'API inventée
python3 .agents/skills/volontariapp-skill-evolution/scripts/check_symbols.py [skill...]
Liste 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.
Règles
- Même contexte pour tous les agents :
AGENTS.md(racine demeta) est la source unique ; son index des skills est régénéré parevolve.py index. Les skills du plugin matt-pocock sont des liens dans.agents/skills/: listées, jamais modifiées. Détail : Configuration multi-agents. - Rédiger pour un agent : appliquer la skill
writing-for-agentsdu plugin avant de créer ou modifier une skill. - Une connaissance = un fichier.
SKILL.mdreste court (quand l'utiliser, règles, liens) ; le détail va dansreferences/, chaque fichier étant un concept OKF avec au minimum untype. - Chaque règle factuelle est sourcée : entrée
sources(chemin relatif àmetaou URL) et note[^id]dans le texte. Une source locale qui disparaît fait échouervalidate. - Ne jamais écraser
generated: une vérification ajoute une entrée àverified(les 5 dernières sont gardées). index.mdetlog.mdsont réservés : générés parevolve.py, jamais de frontmatter.- Noms de skills :
volontariapp-<sujet>en minuscules et tirets (contrainte Claude Code), égal au champname. - Pas d'emoji ni de tiret cadratin dans les skills (règle du projet).
Conventions détaillées : Conventions OKF du dépôt.
[^okf-spec]: Introducing the Open Knowledge Format (Google Cloud, 2026-06-12) [^evolve]: evolve.py, moteur de la boucle [^stop-hook]: Hook Stop Claude Code [^mesh-toml]: mesh-mcp.toml, table [engines.policy.skills] générée [^check-symbols]: check_symbols.py
04 同仓库更多 Skills
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.
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.
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.
volontariapp-implement-async-event-flow
Guide pas-à-pas pour concevoir et implémenter un flux asynchrone complet (messaging -> outbox -> post-processors -> ws-service -> client).
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.
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.