Synthèse automatique
Guide un contributeur pour mettre à jour les données de fonctionnalités d'un portefeuille existant dans le projet Walletbeat, en remplissant les champs nuls avec des informations exactes.
Points forts
- Automatise la vérification des fichiers existants et la création de fichiers contributeur
- Garantit la cohérence avec le schéma du projet via un template de référence
- Inclut des instructions claires pour les affiliations et la mise à jour des métadonnées
- Réduit les erreurs en lisant les fichiers pertinents en parallèle
Limites
- Nécessite une connaissance préalable du projet Walletbeat
- Ne couvre pas la création de nouveaux portefeuilles (utiliser /wallet-create)
- Dépend de la qualité des tests manuels ou de l'inspection du code source
Quand un contributeur souhaite améliorer les données d'un portefeuille existant (logiciel, matériel ou embarqué) dans Walletbeat.
Pour ajouter un tout nouveau portefeuille au projet, où il faut d'abord utiliser la compétence /wallet-create.
Analyse de sécurité
SûrThe skill guides a contributor through adding/updating wallet feature data by editing project data files using TypeScript imports and predefined schemas; no destructive, network, or obfuscated actions are involved.
Aucun point d'attention détecté
Comment cette analyse est faiteExemples
/wallet-update MetaMask/wallet-update Ledger Nano X/wallet-update Coinbase Walletname: wallet-update description: > Use when a contributor wants to populate or update feature data for a wallet that already exists in the walletbeat project. Guides through filling in null feature fields with proper values, types, and refs. To add a brand-new wallet first, use /wallet-create instead. argument-hint: '[wallet-name]'
You are helping a contributor populate or update feature data for a wallet in the Walletbeat project. The wallet they want to work on is: $ARGUMENTS (if blank, ask them which wallet before proceeding).
You have explicit permission to create and edit files inside data/contributors/ and data/ (including all subdirectories).
Your first actions
Before doing anything else:
- If
$ARGUMENTSis blank, ask: "Which wallet would you like to add feature data for?" - Identify the wallet type (software / hardware / embedded) if not obvious from the name.
- Check that the wallet file already exists:
- Software:
data/software-wallets/[wallet-name].ts - Hardware:
data/hardware-wallets/[wallet-name].ts - Embedded:
data/embedded-wallets/[wallet-name].ts - If it does not exist, let the contributor know and suggest using
/wallet-createfirst to register the wallet.
- Software:
- Ask: "What wallet data would you like to add or update?" (e.g., a specific feature, all null fields, a particular group of fields)
- Ask: "What is your preferred display name or nickname?" and "Do you already have a contributor file in
data/contributors/?"- If yes — confirm it exists. You only need to ensure they appear in the
contributors: []array of the wallet file. - If no — also ask for their affiliation (company / role, if any) and a URL to their profile. You will create the contributor file in Step A below.
- If yes — confirm it exists. You only need to ensure they appear in the
- Read the following files in parallel (skip files that don't exist):
- The existing wallet file
- The completed reference example:
data/software-wallets/completed.tmpl.ts - The contributor guide:
resources/docs/contribute/wallet-data.md - The example contributor file:
data/contributors/example.ts(only if they need a new contributor file)
After reading these files, greet the contributor, summarize which wallet and fields you'll be working on, and begin.
Step A — Contributor file
Handle this before touching any feature data.
If the contributor already has a file
Confirm it exists and note the exported constant name. Make sure they appear in the wallet file's contributors: [] array. If not, add them.
If the contributor does not have a file yet
Create data/contributors/[their-nickname].ts using data/contributors/example.ts as the template.
Key rules:
- Affiliation must always be disclosed. If they work for or have equity in the wallet's company, set
affiliationaccordingly. If they have no affiliation, setaffiliation: []. - Import the entity constant if they have an affiliation (it must already exist in
data/entities/).
Example for an affiliated contributor:
import type { Contributor } from '@/schema/wallet'
import { myWalletCorp } from '@/data/entities/my-wallet-corp'
export const chainMonkey: Contributor = {
name: 'Chain Monkey',
affiliation: [
{
developer: myWalletCorp,
hasEquity: true,
role: 'EMPLOYEE', // or 'FOUNDER', 'ADVISOR', 'CONTRACTOR'
},
],
}
Example for an unaffiliated contributor:
import type { Contributor } from '@/schema/wallet'
export const chainMonkey: Contributor = {
name: 'Chain Monkey',
affiliation: [],
}
Once the contributor file exists (confirmed or newly created), make sure they appear in the wallet file's contributors: [] array. Also update lastUpdated to today's date.
Step B — Populate feature fields
The goal is to replace every null field (or the specific fields the contributor identified) with real data gathered by testing the wallet and/or inspecting its source code.
General workflow for each field
For every null field:
- Explain what the field measures (use TSDoc from the type definition — Ctrl+Click on the field name in the editor to navigate to the type)
- Describe how to test or verify it
- Show the completed example value from
data/software-wallets/completed.tmpl.tsif applicable - Let the contributor fill it in with a
ref
The type system — read this section carefully
null = unknown. Never use undefined. A null field means "we don't know yet." Leave fields as null rather than guessing.
VariantFeature<T> — Nearly every field is wrapped in this. It means you can either:
- Use a single value for all variants:
multiAddress: featureSupported - Use a per-variant object if the behavior differs:
multiAddress: { [Variant.BROWSER]: featureSupported, [Variant.MOBILE]: notSupported }
Support / featureSupported / notSupported / supported({...}):
import { featureSupported, notSupported, supported } from '@/schema/features/support'
// Feature is supported, no extra data needed:
multiAddress: featureSupported
// Feature is not supported:
multiAddress: notSupported
// Feature is supported AND you need to provide additional structured data:
chainConfigurability: supported({
ref: refTodo,
l1: notSupported,
nonL1: supported({ rpcEndpointConfiguration: RpcEndpointConfiguration.YES_BEFORE_ANY_REQUEST }),
customChainRpcEndpoint: featureSupported,
})
WithRef<T> — Adds a ref field for sourcing. Always fill ref with evidence:
// Single URL (shorthand):
ref: 'https://github.com/example/wallet/blob/main/src/config.ts'
// Single reference object with label and explanation:
ref: {
url: 'https://example.com/docs/chain-config',
label: 'Chain configuration docs',
explanation: 'This page documents how to configure RPC endpoints.',
}
// Multiple references (array):
ref: [
{ url: 'https://...', label: '...', explanation: '...' },
{ url: 'https://...', label: '...' },
]
// Placeholder — acceptable for initial PRs:
ref: refTodo
// Not necessary — use when the fact is self-evident:
ref: refNotNecessary
MustRef<T> — Like WithRef but you must provide a real ref. refTodo and refNotNecessary will not compile. Used for fields like publicSecurityAudits where the URL to the audit report is the primary piece of evidence.
Nullable<T> — Any subfield can be null if unknown. If any subfield is null, Walletbeat treats the entire field as unrated.
Type inference tip: If TypeScript complains about the supported({...}) call, explicitly annotate the type parameter:
supported<WithRef<ChainConfigurability>>({ ... })
Field-by-field guidance
Walk through each null field in the wallet file (or only the fields the contributor asked about). For each one, provide:
- What it measures (from the TSDoc comment at the type definition)
- How to test it (describe the testing method: try the wallet UI, inspect network traffic, read source code)
- Completed Passing wallet example (show the corresponding value from
data/software-wallets/completed.tmpl.tsif applicable) - Ref expectations (does it need
WithRef? IsrefTodookay? Does it needMustRef?)
Final step — Verify everything
Once all desired fields are filled in, run:
pnpm fix # Auto-fix formatting
pnpm check:all # Must pass before opening a PR
Help the contributor fix any remaining TypeScript or lint errors before they open their pull request.
Key rules to remind the contributor throughout
null= unknown — never useundefined; always prefernullover guessing.- Every non-obvious value needs a
ref— a URL pointing to source code, docs, or a public statement. refTodois a valid placeholder for initial PRs; improve refs before the PR is merged if possible.refNotNecessaryis only for self-evident facts (e.g., Safe Wallet supports Safe multisigs).MustReffields require a real URL —refTodowon't compile there.- Run
pnpm fixbefore every commit to auto-fix formatting. - Run
pnpm check:allbefore opening the PR — it must pass. - Affiliation must be disclosed — if the contributor is affiliated with the wallet's company, they must set the
affiliationfield in their contributor file. - Ctrl+Click on any field in your editor to jump to its type definition — this is the fastest way to understand what a field expects.
- Look at
completed.tmpl.tsfor any field you're confused about — it's the most completely filled-in wallet example.
Du fichier au premier essai
Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.
Consulter la source et ses fichiers annexesCe téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.
1. Télécharger le fichier
Télécharger SKILL.mdDepuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/wallet-update-mmk3nh5o/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.
Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.
mkdir -p '.skill-downloads/wallet-update-mmk3nh5o' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/wallet-update-mmk3nh5o/download' --output '.skill-downloads/wallet-update-mmk3nh5o/SKILL.md.part' && mv '.skill-downloads/wallet-update-mmk3nh5o/SKILL.md.part' '.skill-downloads/wallet-update-mmk3nh5o/SKILL.md'2. Vérifier les prérequis
Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.
Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.
Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.
3. Charger la skill
Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.
Claude Code
test -f '.skill-downloads/wallet-update-mmk3nh5o/SKILL.md' && test -s '.skill-downloads/wallet-update-mmk3nh5o/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/wallet-update' && cp -R '.skill-downloads/wallet-update-mmk3nh5o' '.claude/skills/wallet-update'OpenSkills
OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.
Installation officielle d’OpenSkillsopenskills install './.skill-downloads/wallet-update-mmk3nh5o'openskills read 'wallet-update-mmk3nh5o'La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.
Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.
openskills syncMode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.
4. Faire un premier essai
Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :
Lis .skill-downloads/wallet-update-mmk3nh5o/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.
Bonnes pratiques React Hook Form
Developpement
Maîtrisez React Hook Form : évitez les anti-patterns, gérez les abonnements, et traitez correctement reset, dirty state et entrées contrôlées.
Migration Emotion vers Mantine
Developpement
Migrer les styled-components Emotion vers des composants Mantine avec style props et modules CSS. Pour convertir .styled.tsx ou supprimer les imports @emotion.
Détecteur de dérive de périmètre
Developpement
Analyse les diffs git par rapport à une intention pour détecter la dérive de périmètre, fichiers non liés et PR trop larges, puis suggère de garder, diviser ou justifier.