.claude/skills/wallet-create/SKILL.md
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.
npx skillsauth add walletbeat/walletbeat wallet-createInstall 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 register a new wallet in the Walletbeat project. The wallet they want to add 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?"data/software-wallets/[wallet-name].tsdata/hardware-wallets/[wallet-name].tsdata/embedded-wallets/[wallet-name].ts/wallet-update instead to populate feature data.data/contributors/. Also ask for the wallet's one-sentence blurb — this is the only piece of content only they can provide. If they need a new contributor file, also ask for their affiliation (company / role, if any) and a URL to their profile (GitHub, Twitter, etc.).data/software-wallets/unrated.tmpl.tsdata/hardware-wallets/unrated.tmpl.tsdata/embedded-wallets/unrated.tmpl.tsresources/docs/contribute/wallet-data.mddata/entities/example.tsdata/contributors/example.tsAfter reading these files, greet the contributor warmly, summarize what wallet and type you will be working on, and begin walking through the steps below.
Handle the contributor file before touching any wallet data.
Confirm it exists and note the exported constant name. No further action needed here — just remember to add them to contributors: [] in the wallet file later.
Using the information collected above (name, affiliation, profile URL), create data/contributors/[their-nickname].ts for them. Use 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: [],
}
Briefly explain the layout of /data/:
/data
├── contributors/ ← Add yourself here (first time only)
├── entities/ ← Add the wallet's development company here
├── software-wallets/ ← Wallet data files (or hardware-wallets/, embedded-wallets/)
│ ├── completed.tmpl.ts ← Gold-standard reference example
│ ├── unrated.tmpl.ts ← Template to copy when adding a new wallet
│ └── [wallet-name].ts ← The file you will create
├── software-wallets.ts ← Index — register the new wallet here
└── wallet-contracts/ ← Smart contract data (only for smart account wallets)
Also mention: /public/images/wallets/ for wallet icons, /public/images/entities/ for entity icons.
Walk through substeps C.1 through C.4 in order, one at a time, waiting for the contributor to confirm each before moving on.
Ask the contributor for the wallet developer's company name and legal name.
Then check whether the entity already exists in data/entities/. If so, skip to C.2. If not, create data/entities/[kebab-case-company-name].ts yourself by copying data/entities/example.ts and filling in the known fields:
id, name, legalName, type, jurisdiction, url, repoUrl, privacyPolicy, and social/profile URLs./public/images/entities/[entityId].svg. If only PNG is available, save as .png and set icon: { extension: 'png', width: N, height: N }.Key type fields:
type.walletDeveloper: true — always true for the company behind a wallettype.chainDataProvider: true — only if the company also runs RPC infrastructuretype.transactionBroadcastProvider: true — only if the company runs transaction relay infrastructure& ChainDataProvider, etc.) to the TypeScript type when setting these to trueCopy the template (data/[type]-wallets/unrated.tmpl.ts) to data/[type]-wallets/[kebab-wallet-name].ts yourself, then fill in metadata:
id: camelCase wallet name (e.g., 'rainbow') — must match the icon filenamedisplayName: The wallet's official display nametableName: Short name for table display (often same as displayName)blurb: Use the blurb collected in step 4, wrapped in paragraph(\...`)`unratedTemplate / unratedHardwareTemplate / unratedEmbeddedTemplate to the camelCase wallet name (e.g., rainbow, ledgerNano, privySdk).contributors: [yourContributorConstant]iconExtension: 'svg' (or 'png' if no SVG available)lastUpdated: Today's date as 'YYYY-MM-DD'urls: Fill in actual wallet URLs; remove social fields that don't applyvariants to only include the variants the wallet actually has:
Variant.BROWSER, Variant.MOBILE, Variant.DESKTOP (remove inapplicable ones)Variant.HARDWARE (already set in template)Variant.EMBEDDED (already set in template)/public/images/wallets/[id].svg. If only PNG: save as .png and set iconExtension: 'png' in metadata.All features fields should remain null for now — those are populated separately using /wallet-update.
Edit the index file yourself to register the wallet:
data/software-wallets.tsdata/hardware-wallets.tsdata/embedded-wallets.tsAdd the import and add the wallet to the exported object:
import { myWallet } from './software-wallets/my-wallet'
// ...
export const softwareWallets = {
// ... existing wallets ...
myWallet,
}
Once Steps C.1–C.3 are complete, run:
pnpm lint # Fix formatting
pnpm check:all # Check for errors
Help the contributor interpret and fix any TypeScript or lint errors. Common issues:
Variant or other enumsOnce pnpm check:all passes, run:
pnpm dev
Then ask the contributor to browse to http://localhost:4321/ and confirm the wallet appears in the table. Once confirmed, the wallet is registered.
The wallet is now visible on the site with all fields unrated. To fill in the actual feature data, use:
/wallet-update [wallet-name]
This separate skill guides through each null field — what it measures, how to test it, and how to fill in the value with a proper ref.
documentation
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.
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.