Automated summary
Guides a contributor to populate or update feature data for an existing wallet in the Walletbeat project, filling null fields with accurate values.
Strengths
- Automates checking of existing files and contributor file creation
- Ensures consistency with the project schema using a reference template
- Includes clear instructions for affiliations and metadata updates
- Reduces errors by reading relevant files in parallel
Limitations
- Requires prior familiarity with the Walletbeat project
- Does not cover creation of new wallets (use /wallet-create)
- Relies on the quality of manual testing or source code inspection
When a contributor wants to improve data for an existing software, hardware, or embedded wallet in Walletbeat.
To add a brand-new wallet to the project, which should be done using the /wallet-create skill first.
Security analysis
SafeThe 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.
No concerns found
How this analysis is madeExamples
/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.
From the file to a first result
The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.
View the source and supporting filesThis download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.
1. Download the file
Download SKILL.mdFrom the root of a test project, save the file as .skill-downloads/wallet-update-mmk3nh5o/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.
Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.
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. Check prerequisites
Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.
No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.
The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.
3. Load the skill
After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.
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 must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.
Official OpenSkills installationopenskills install './.skill-downloads/wallet-update-mmk3nh5o'openskills read 'wallet-update-mmk3nh5o'Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.
For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.
openskills syncManual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.
4. Try a first task
Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:
Read .skill-downloads/wallet-update-mmk3nh5o/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.
React Hook Form Best Practices
Development
Master React Hook Form: avoid anti-patterns, manage subscriptions, and handle reset, dirty state, and controlled inputs correctly.
Emotion to Mantine Migration
Development
Migrate Emotion styled-components to Mantine components with style props and CSS modules. Use when converting .styled.tsx files or removing @emotion imports.
Scope Creep Detector
Development
Analyzes git diffs against a stated intent to detect scope creep, unrelated files, broad PRs, and oversized changes, then suggests keep, split, or justify actions.