[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CSVM47EX2P3PJS0CB8A1FH":3,"skill-same:01M6CSVM47EX2P3PJS0CB8A1FH":126},{"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":23,"publishedAt":45,"linkOnly":46,"markdownContent":47,"markdownBody":48,"frontMatter":49,"refName":91,"commitSha":92,"skillDirectory":93,"forksCount":14,"repositoryHtmlUrl":94,"repositoryHomepageUrl":6,"ownerHtmlUrl":95,"ownerBlogUrl":6,"ownerDescription":96,"updatedAt":97,"install":98,"resources":111},"01M6CSVM47EX2P3PJS0CB8A1FH","volontariapp-sealed-secrets",null,"Playbook opérationnel pas-à-pas pour générer, sceller et déployer un secret chiffré asymétrique (kubeseal) dans le cluster K3s.","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-sealed-secrets\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],"secrets","volontariapp sealed secrets","2026","keys","de","apps","local","overlays","overlay","cluster","code","file","gitops","kustomize","yaml","kubernetes","playbook","k3s","datadog","kubeseal","sealed-secrets","2026-11-10 10:12:30",false,"---\nname: volontariapp-sealed-secrets\ndescription: \"Playbook opérationnel pas-à-pas pour générer, sceller et déployer un secret chiffré asymétrique (kubeseal) dans le cluster K3s.\"\ntype: Playbook\ntitle: Gestion des Secrets Scellés GitOps (kubeseal)\ntags: [sealed-secrets, kubeseal, security, kubernetes, k3s, gitops, playbook]\nstatus: stable\npaths:\n  - \"deploy\u002Finfrastructure\u002Fsecurity\u002Fsealed-secrets\u002F**\"\n  - \"deploy\u002Fapps\u002Foverlays\u002Fprod\u002F**\"\nmesh_keys:\n  - sealedsecret\n  - kubeseal\ngenerated:\n  by: claude-code\u002Fagent\n  at: \"2026-10-12T12:02:00Z\"\nverified:\n  - by: claude-code\u002Fagent\n    at: \"2026-11-07T14:28:09Z\"\n    digest: f45400d7ad6eba03\n  - by: claude-code\u002Fagent\n    at: \"2026-11-07T15:34:34Z\"\n    digest: 1a720d176fbb1d02\n  - by: claude-code\u002Fagent\n    at: \"2026-11-07T15:49:20Z\"\n    digest: 1a720d176fbb1d02\n  - by: claude-code\u002Fagent\n    at: \"2026-11-07T15:55:38Z\"\n    digest: 1a720d176fbb1d02\n  - by: claude-code\u002Fagent\n    at: \"2026-11-08T12:28:01Z\"\n    digest: c207d1cd393741a6\nsources:\n  - id: datadog-doc\n    kind: local_file\n    resource: deploy\u002Finfrastructure\u002Fsecurity\u002Fsealed-secrets\u002FDATADOG_KEYS.md\n    title: Procédure de chiffrement Datadog\n  - id: datadog-sealed\n    kind: local_file\n    resource: deploy\u002Finfrastructure\u002Fsecurity\u002Fsealed-secrets\u002Fdatadog-keys-sealed.yaml\n    title: SealedSecret exemple (datadog-keys)\n  - id: kustomize-prod\n    kind: local_file\n    resource: deploy\u002Fapps\u002Foverlays\u002Fprod\u002Fkustomization.yaml\n    title: Overlay prod Kustomize\n---\n\n# Gestion des Secrets Scellés GitOps (kubeseal)\n\n## Quand utiliser ce playbook\n\nUtiliser ce playbook pour toute création, modification ou rotation d'un secret sensible en environnement Kubernetes déployé par ArgoCD :\n- Clés d'API externes (Datadog, services tiers)[^datadog-doc].\n- Mots de passe et identifiants de bases de données de production.\n- Tokens JWT, secrets de signature ou certificats TLS privés.\n- Identifiants de registre de conteneurs (`ghcr-sealed-secret.yaml`)[^kustomize-prod].\n\n---\n\n## Règles d'or de sécurité\n\n1. **Zéro secret en clair dans Git** : Aucun fichier contenant un `kind: Secret` standard avec des clés en clair (en texte brut ou en base64) ne doit être commité. Seuls les `kind: SealedSecret` chiffrés asymétriquement sont autorisés[^datadog-sealed].\n2. **Éphémérité stricte du fichier source** : Le fichier temporaire généré lors du dry-run local doit être supprimé immédiatement après l'exécution de `kubeseal`.\n3. **Scellement contextuel strict (Strict Scope)** : Par défaut, un `SealedSecret` est scellé cryptographiquement pour un `name` et un `namespace` précis. Modifier le nom ou le namespace dans le YAML après chiffrement rend le secret indéchiffrable par le contrôleur.\n\n---\n\n## Procédure pas-à-pas\n\n### Étape 1 : Récupération du certificat public du cluster (si nécessaire)\n\nSi l'on opère hors du cluster ou que l'on souhaite chiffrer offline :\n```bash\nkubeseal --fetch-cert \\\n  --controller-name=sealed-secrets \\\n  --controller-namespace=kube-system > pub-cert.pem\n```\n\n---\n\n### Étape 2 : Génération du secret éphémère en local (Dry-Run)\n\nGénérer le secret standard en local sans jamais l'appliquer au cluster :\n\n```bash\nkubectl create secret generic \u003Cnom-du-secret> \\\n  --namespace \u003Cnamespace-cible> \\\n  --from-literal=api-key=\"\u003CVALEUR_SECRETE>\" \\\n  --dry-run=client -o yaml > secret-temp.yaml\n```\n\n> [!CAUTION]\n> Ne jamais faire de `git add` ou de commit à cette étape. `secret-temp.yaml` contient la valeur en clair.\n\n---\n\n### Étape 3 : Chiffrement asymétrique avec `kubeseal`\n\nUtiliser `kubeseal` pour communiquer avec le contrôleur dans `kube-system` (ou utiliser le certificat public local)[^datadog-doc] :\n\n```bash\nkubeseal --controller-name=sealed-secrets \\\n  --controller-namespace=kube-system \\\n  --format=yaml \u003C secret-temp.yaml > \u003Cnom-du-secret>-sealed.yaml\n```\n\n*(Ou hors ligne avec le certificat récupéré à l'Étape 1) :*\n```bash\nkubeseal --cert pub-cert.pem --format=yaml \u003C secret-temp.yaml > \u003Cnom-du-secret>-sealed.yaml\n```\n\nLe fichier `\u003Cnom-du-secret>-sealed.yaml` généré est un manifest `kind: SealedSecret` dont le champ `spec.encryptedData` ne peut être déchiffré que par la clé privée du contrôleur résidant dans le cluster[^datadog-sealed].\n\n---\n\n### Étape 4 : Destruction immédiate du secret en clair\n\nSupprimer immédiatement le fichier temporaire :\n\n```bash\nrm -f secret-temp.yaml\n```\n\n---\n\n### Étape 5 : Intégration dans Kustomize\n\n1. Déplacer le manifest scellé dans le répertoire cible du dépôt `deploy` :\n   - Secrets d'infrastructure globale : `deploy\u002Finfrastructure\u002Fsecurity\u002Fsealed-secrets\u002F`[^datadog-doc].\n   - Secrets applicatifs ou overlays de production : `deploy\u002Fapps\u002Foverlays\u002Fprod\u002F\u003Cservice>\u002F` ou `deploy\u002Fapps\u002Foverlays\u002Fprod\u002F`[^kustomize-prod].\n2. Référencer le fichier scellé dans le `kustomization.yaml` correspondant :\n   ```yaml\n   # deploy\u002Fapps\u002Foverlays\u002Fprod\u002Fkustomization.yaml\n   resources:\n     - ..\u002F..\u002Fbase\n     - ghcr-sealed-secret.yaml\n     - \u003Cnom-du-secret>-sealed.yaml\n   ```\n\n---\n\n### Étape 6 : Validation locale Kustomize et déploiement GitOps\n\n1. Vérifier la validité de l'assemblage Kustomize :\n   ```bash\n   kubectl kustomize deploy\u002Fapps\u002Foverlays\u002Fprod\n   ```\n2. Committer et pousser la Pull Request sur le dépôt `deploy`.\n3. Une fois mergé, ArgoCD synchronise le `SealedSecret`.\n4. Le contrôleur Sealed Secrets dans `kube-system` intercepte la ressource et génère automatiquement le `Secret` Kubernetes standard déchiffré dans le namespace cible.\n5. Vérifier le déchiffrement réussi dans le cluster :\n   ```bash\n   kubectl get sealedsecret \u003Cnom-du-secret> -n \u003Cnamespace-cible>\n   kubectl get secret \u003Cnom-du-secret> -n \u003Cnamespace-cible>\n   ```\n\n---\n\n## Checklist de validation\n\n- [ ] Aucun secret en clair n'a été commité dans Git (`git status` et `gitleaks` vérifiés).\n- [ ] Le fichier temporaire `secret-temp.yaml` a été supprimé immédiatement[^datadog-doc].\n- [ ] Le manifest scellé est bien de type `kind: SealedSecret` (API `bitnami.com\u002Fv1alpha1`)[^datadog-sealed].\n- [ ] Le `name` et le `namespace` du `SealedSecret` correspondent exactement à ceux requis par le consommateur.\n- [ ] Le fichier est déclaré dans la liste `resources` du `kustomization.yaml` approprié[^kustomize-prod].\n- [ ] `kubectl kustomize` s'exécute sans erreur sur l'overlay.\n\n---\n\n## Références\n\n[^datadog-doc]: deploy\u002Finfrastructure\u002Fsecurity\u002Fsealed-secrets\u002FDATADOG_KEYS.md\n[^datadog-sealed]: deploy\u002Finfrastructure\u002Fsecurity\u002Fsealed-secrets\u002Fdatadog-keys-sealed.yaml\n[^kustomize-prod]: deploy\u002Fapps\u002Foverlays\u002Fprod\u002Fkustomization.yaml\n","# Gestion des Secrets Scellés GitOps (kubeseal)\n\n## Quand utiliser ce playbook\n\nUtiliser ce playbook pour toute création, modification ou rotation d'un secret sensible en environnement Kubernetes déployé par ArgoCD :\n- Clés d'API externes (Datadog, services tiers)[^datadog-doc].\n- Mots de passe et identifiants de bases de données de production.\n- Tokens JWT, secrets de signature ou certificats TLS privés.\n- Identifiants de registre de conteneurs (`ghcr-sealed-secret.yaml`)[^kustomize-prod].\n\n---\n\n## Règles d'or de sécurité\n\n1. **Zéro secret en clair dans Git** : Aucun fichier contenant un `kind: Secret` standard avec des clés en clair (en texte brut ou en base64) ne doit être commité. Seuls les `kind: SealedSecret` chiffrés asymétriquement sont autorisés[^datadog-sealed].\n2. **Éphémérité stricte du fichier source** : Le fichier temporaire généré lors du dry-run local doit être supprimé immédiatement après l'exécution de `kubeseal`.\n3. **Scellement contextuel strict (Strict Scope)** : Par défaut, un `SealedSecret` est scellé cryptographiquement pour un `name` et un `namespace` précis. Modifier le nom ou le namespace dans le YAML après chiffrement rend le secret indéchiffrable par le contrôleur.\n\n---\n\n## Procédure pas-à-pas\n\n### Étape 1 : Récupération du certificat public du cluster (si nécessaire)\n\nSi l'on opère hors du cluster ou que l'on souhaite chiffrer offline :\n```bash\nkubeseal --fetch-cert \\\n  --controller-name=sealed-secrets \\\n  --controller-namespace=kube-system > pub-cert.pem\n```\n\n---\n\n### Étape 2 : Génération du secret éphémère en local (Dry-Run)\n\nGénérer le secret standard en local sans jamais l'appliquer au cluster :\n\n```bash\nkubectl create secret generic \u003Cnom-du-secret> \\\n  --namespace \u003Cnamespace-cible> \\\n  --from-literal=api-key=\"\u003CVALEUR_SECRETE>\" \\\n  --dry-run=client -o yaml > secret-temp.yaml\n```\n\n> [!CAUTION]\n> Ne jamais faire de `git add` ou de commit à cette étape. `secret-temp.yaml` contient la valeur en clair.\n\n---\n\n### Étape 3 : Chiffrement asymétrique avec `kubeseal`\n\nUtiliser `kubeseal` pour communiquer avec le contrôleur dans `kube-system` (ou utiliser le certificat public local)[^datadog-doc] :\n\n```bash\nkubeseal --controller-name=sealed-secrets \\\n  --controller-namespace=kube-system \\\n  --format=yaml \u003C secret-temp.yaml > \u003Cnom-du-secret>-sealed.yaml\n```\n\n*(Ou hors ligne avec le certificat récupéré à l'Étape 1) :*\n```bash\nkubeseal --cert pub-cert.pem --format=yaml \u003C secret-temp.yaml > \u003Cnom-du-secret>-sealed.yaml\n```\n\nLe fichier `\u003Cnom-du-secret>-sealed.yaml` généré est un manifest `kind: SealedSecret` dont le champ `spec.encryptedData` ne peut être déchiffré que par la clé privée du contrôleur résidant dans le cluster[^datadog-sealed].\n\n---\n\n### Étape 4 : Destruction immédiate du secret en clair\n\nSupprimer immédiatement le fichier temporaire :\n\n```bash\nrm -f secret-temp.yaml\n```\n\n---\n\n### Étape 5 : Intégration dans Kustomize\n\n1. Déplacer le manifest scellé dans le répertoire cible du dépôt `deploy` :\n   - Secrets d'infrastructure globale : `deploy\u002Finfrastructure\u002Fsecurity\u002Fsealed-secrets\u002F`[^datadog-doc].\n   - Secrets applicatifs ou overlays de production : `deploy\u002Fapps\u002Foverlays\u002Fprod\u002F\u003Cservice>\u002F` ou `deploy\u002Fapps\u002Foverlays\u002Fprod\u002F`[^kustomize-prod].\n2. Référencer le fichier scellé dans le `kustomization.yaml` correspondant :\n   ```yaml\n   # deploy\u002Fapps\u002Foverlays\u002Fprod\u002Fkustomization.yaml\n   resources:\n     - ..\u002F..\u002Fbase\n     - ghcr-sealed-secret.yaml\n     - \u003Cnom-du-secret>-sealed.yaml\n   ```\n\n---\n\n### Étape 6 : Validation locale Kustomize et déploiement GitOps\n\n1. Vérifier la validité de l'assemblage Kustomize :\n   ```bash\n   kubectl kustomize deploy\u002Fapps\u002Foverlays\u002Fprod\n   ```\n2. Committer et pousser la Pull Request sur le dépôt `deploy`.\n3. Une fois mergé, ArgoCD synchronise le `SealedSecret`.\n4. Le contrôleur Sealed Secrets dans `kube-system` intercepte la ressource et génère automatiquement le `Secret` Kubernetes standard déchiffré dans le namespace cible.\n5. Vérifier le déchiffrement réussi dans le cluster :\n   ```bash\n   kubectl get sealedsecret \u003Cnom-du-secret> -n \u003Cnamespace-cible>\n   kubectl get secret \u003Cnom-du-secret> -n \u003Cnamespace-cible>\n   ```\n\n---\n\n## Checklist de validation\n\n- [ ] Aucun secret en clair n'a été commité dans Git (`git status` et `gitleaks` vérifiés).\n- [ ] Le fichier temporaire `secret-temp.yaml` a été supprimé immédiatement[^datadog-doc].\n- [ ] Le manifest scellé est bien de type `kind: SealedSecret` (API `bitnami.com\u002Fv1alpha1`)[^datadog-sealed].\n- [ ] Le `name` et le `namespace` du `SealedSecret` correspondent exactement à ceux requis par le consommateur.\n- [ ] Le fichier est déclaré dans la liste `resources` du `kustomization.yaml` approprié[^kustomize-prod].\n- [ ] `kubectl kustomize` s'exécute sans erreur sur l'overlay.\n\n---\n\n## Références\n\n[^datadog-doc]: deploy\u002Finfrastructure\u002Fsecurity\u002Fsealed-secrets\u002FDATADOG_KEYS.md\n[^datadog-sealed]: deploy\u002Finfrastructure\u002Fsecurity\u002Fsealed-secrets\u002Fdatadog-keys-sealed.yaml\n[^kustomize-prod]: deploy\u002Fapps\u002Foverlays\u002Fprod\u002Fkustomization.yaml\n",{"name":5,"tags":50,"type":52,"paths":53,"title":56,"status":57,"sources":58,"verified":72,"generated":87,"mesh_keys":89,"description":7},[44,43,51,39,41,36,40],"security","Playbook",[54,55],"deploy\u002Finfrastructure\u002Fsecurity\u002Fsealed-secrets\u002F**","deploy\u002Fapps\u002Foverlays\u002Fprod\u002F**","Gestion des Secrets Scellés GitOps (kubeseal)","stable",[59,64,68],{"id":60,"kind":61,"title":62,"resource":63},"datadog-doc","local_file","Procédure de chiffrement Datadog","deploy\u002Finfrastructure\u002Fsecurity\u002Fsealed-secrets\u002FDATADOG_KEYS.md",{"id":65,"kind":61,"title":66,"resource":67},"datadog-sealed","SealedSecret exemple (datadog-keys)","deploy\u002Finfrastructure\u002Fsecurity\u002Fsealed-secrets\u002Fdatadog-keys-sealed.yaml",{"id":69,"kind":61,"title":70,"resource":71},"kustomize-prod","Overlay prod Kustomize","deploy\u002Fapps\u002Foverlays\u002Fprod\u002Fkustomization.yaml",[73,77,80,82,84],{"at":74,"by":75,"digest":76},"2026-11-07T14:28:09Z","claude-code\u002Fagent","f45400d7ad6eba03",{"at":78,"by":75,"digest":79},"2026-11-07T15:34:34Z","1a720d176fbb1d02",{"at":81,"by":75,"digest":79},"2026-11-07T15:49:20Z",{"at":83,"by":75,"digest":79},"2026-11-07T15:55:38Z",{"at":85,"by":75,"digest":86},"2026-11-08T12:28:01Z","c207d1cd393741a6",{"at":88,"by":75},"2026-10-12T12:02:00Z",[90,43],"sealedsecret","main","6b8f03b57018fa66da4666071dc17c1577ff45e8",".agents\u002Fskills\u002Fvolontariapp-sealed-secrets","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":99,"prompt":109,"zipAvailable":110},[100,103,106],{"tool":101,"command":102},"npx","npx skills add Volontariapp\u002Fmeta --skill volontariapp-sealed-secrets",{"tool":104,"command":105},"bunx","bunx skills add Volontariapp\u002Fmeta --skill volontariapp-sealed-secrets",{"tool":107,"command":108},"pnpm","pnpm dlx skills add Volontariapp\u002Fmeta --skill volontariapp-sealed-secrets","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvolontariapp-sealed-secrets\u002FSKILL.md",true,[112,118,122],{"path":113,"resourceType":114,"resourceTypeDesc":115,"sizeBytes":116,"sourceHtmlUrl":117},"index.md","REFERENCE","参考文档",527,"https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvolontariapp-sealed-secrets\u002Findex.md",{"path":119,"resourceType":114,"resourceTypeDesc":115,"sizeBytes":120,"sourceHtmlUrl":121},"log.md",1655,"https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvolontariapp-sealed-secrets\u002Flog.md",{"path":123,"resourceType":114,"resourceTypeDesc":115,"sizeBytes":124,"sourceHtmlUrl":125},"references\u002Flessons.md",2809,"https:\u002F\u002Fgithub.com\u002FVolontariapp\u002Fmeta\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvolontariapp-sealed-secrets\u002Freferences\u002Flessons.md",[127,151,178,203,228,247],{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":133,"publishedAt":45},"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",[],[134,135,136,137,138,139,140,141,28,34,142,143,144,145,146,147,148,149,150],"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":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":162,"publishedAt":45},"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",[157],{"categoryNo":158,"categoryName":159,"taxonomyType":160,"taxonomyTypeDesc":161},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[163,164,165,166,34,167,168,150,169,170,171,172,173,144,174,175,176,38,40,177],"evolution","volontariapp proto contract evolution","grpc","lint","workflows","analyze","rpc","ci","pr","protobuf","message","registry","sans","sync","github",{"skillNo":179,"name":180,"nameZh":6,"description":181,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":182,"categories":183,"keywords":187,"publishedAt":45},"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",[184],{"categoryNo":185,"categoryName":186,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[188,189,190,34,191,142,192,193,194,195,196,197,198,199,200,201,202],"Meta","volontariapp meta scripts","repos","migrate","setup","meta-scripts","json","node","workspace","shell","bump","cli","doctor","draft","install",{"skillNo":204,"name":205,"nameZh":6,"description":206,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":207,"categories":208,"keywords":212,"publishedAt":45},"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",[209],{"categoryNo":210,"categoryName":211,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[213,214,215,216,217,218,146,219,220,174,221,222,149,223,224,150,225,226,34,227],"async","implement","volontariapp implement async event flow","flow","event","messaging","mapping","flux","streams","flows","shared","outbox","processor","architecture","runner",{"skillNo":229,"name":230,"nameZh":6,"description":231,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":232,"categories":233,"keywords":237,"publishedAt":45},"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",[234],{"categoryNo":235,"categoryName":236,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",[230,238,135,35,239,240,241,242,243,244,245,246],"api","repo","markdown","docs","capture","use","question","trust","investigate",{"skillNo":248,"name":249,"nameZh":6,"description":250,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":251,"categories":252,"keywords":256,"publishedAt":45},"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",[253],{"categoryNo":254,"categoryName":255,"taxonomyType":160,"taxonomyTypeDesc":161},"01JBSEEDCAT000000000000032","设计师",[249,257,135,258,243,259,244,260,261,262,263,264],"check","ui","look","design","explore","model","build","state"]