.claude/skills/wallet-update/SKILL.md
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.
npx skillsauth add walletbeat/walletbeat wallet-updateInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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).
Before doing anything else:
$ARGUMENTS is blank, ask: "Which wallet would you like to add feature data for?"data/software-wallets/[wallet-name].tsdata/hardware-wallets/[wallet-name].tsdata/embedded-wallets/[wallet-name].ts/wallet-create first to register the wallet.data/contributors/?"
contributors: [] array of the wallet file.data/software-wallets/completed.tmpl.tsresources/docs/contribute/wallet-data.mddata/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.
Handle this before touching any feature data.
Confirm it exists and note the exported constant name. Make sure they appear in the wallet file's contributors: [] array. If not, add them.
Create data/contributors/[their-nickname].ts using data/contributors/example.ts as the template.
Key rules:
affiliation accordingly. If they have no affiliation, set affiliation: [].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.
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.
For every null field:
data/software-wallets/completed.tmpl.ts if applicablerefnull = 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:
multiAddress: featureSupportedmultiAddress: { [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>>({ ... })
Walk through each null field in the wallet file (or only the fields the contributor asked about). For each one, provide:
data/software-wallets/completed.tmpl.ts if applicable)WithRef? Is refTodo okay? Does it need MustRef?)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.
null = unknown — never use undefined; always prefer null over guessing.ref — a URL pointing to source code, docs, or a public statement.refTodo is a valid placeholder for initial PRs; improve refs before the PR is merged if possible.refNotNecessary is only for self-evident facts (e.g., Safe Wallet supports Safe multisigs).MustRef fields require a real URL — refTodo won't compile there.pnpm fix before every commit to auto-fix formatting.pnpm check:all before opening the PR — it must pass.affiliation field in their contributor file.completed.tmpl.ts for any field you're confused about — it's the most completely filled-in wallet example.documentation
Use when a contributor wants to add a brand-new wallet to the walletbeat project. Guides through entity setup, contributor file creation, wallet skeleton, and site registration. For populating feature data on an existing wallet, use /wallet-update instead.
documentation
Fetch GitHub issues, spawn sub-agents to implement fixes and open PRs, then monitor and address PR review comments. Usage: /gh-issues [owner/repo] [--label bug] [--limit 5] [--milestone v1.0] [--assignee @me] [--fork user/repo] [--watch] [--interval 5] [--reviews-only] [--cron] [--dry-run] [--model glm-5] [--notify-channel -1002381931352]
documentation
Maintain the OpenClaw memory wiki vault with deterministic pages, managed blocks, and source-backed updates.
documentation
Feishu knowledge base navigation. Activate when user mentions knowledge base, wiki, or wiki links.