/solana-dev
Use when user asks to "build a Solana dapp", "write an Anchor program", "create a token", "debug Solana errors", "set up wallet connection", "test my Solana program", "fuzz my Solana program", "deploy to devnet", "send a v1 transaction", "support larger transactions", "fix
$ npx -y skills add solana-foundation/solana-dev-skill --skill solana-dev --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/solana-dev
Context preview
The summary Claude sees to decide when to auto-load this skill.
Use when user asks to "build a Solana dapp", "write an Anchor program", "create a token", "debug Solana errors", "set up wallet connection", "test my Solana program", "fuzz my Solana program", "deploy to devnet", "send a v1 transaction", "support larger transactions", "fix
SKILL.md
solana-dev.SKILL.mdname: solana-dev
description: 'Use when user asks to "build a Solana dapp", "write an Anchor program", "create a token", "debug Solana errors", "set up wallet connection", "test my Solana program", "fuzz my Solana program", "deploy to devnet", "send a v1 transaction", "support larger transactions", "fix maxSupportedTransactionVersion", or "explain Solana concepts" (rent, accounts, PDAs, CPIs). Also for program architecture — state layout, reducing compute units, throughput bottlenecks, instruction naming — and quick on-chain lookups via public RPC + curl (balance, transaction, token account). End-to-end playbook: wallet connection, Anchor/Pinocchio programs, Codama clients, Surfpool/LiteSVM/Mollusk testing, security review, and the v1 transaction format (SIMD-0385, 4096-byte transactions). Prefers @solana/kit plugin clients (createClient + .use(); kit 8 for v1), @solana/kit-plugin-wallet + @solana/react for wallets, web3.js v3 (RC) as the legacy migration target, and Surfpool for local networks.'
license: MIT
compatibility: Requires Node.js 20.18+, Rust toolchain, Solana CLI, Anchor CLI
metadata:
author: Solana Foundation
version: "2.4.0"
Solana Development Skill (Kit-first)
What this Skill is for
Use this Skill when the user asks for:
- Solana dApp UI work (React / Next.js)
- Wallet connection + signing flows
- Transaction building / sending / confirmation UX
- Transaction v1 / larger transactions (SIMD-0385) — sending, reading, indexing
- On-chain program development (Anchor or Pinocchio)
- Program architecture — state layout, PDA seed conventions, naming, parallelization, cranks, vault topology
- Client SDK generation (typed program clients)
- Local testing (Surfpool, LiteSVM, Mollusk) and fuzz testing (Trident, cargo-fuzz)
- Security hardening and audit-style reviews
- Confidential transfers (Token-2022 ZK extension)
- **Toolchain setup, version mismatches, GLIBC errors, dependency conflicts**
- **Upgrading Anchor/Solana CLI versions, migration between versions**
- **Migrating web3.js v1 code to web3.js v3 or Kit**
Default stack decisions (opinionated)
1) **SDK: @solana/kit (v7+) first**
- Build clients with `createClient()` from `@solana/kit`, then `.use(...)` plugins:
createClient()
.use(signer(mySigner))
.use(solanaRpc({ rpcUrl }));
// or solanaLocalRpc / solanaDevnetRpc / solanaMainnetRpc from @solana/kit-plugin-rpc- Default to `signer()` / `signerFromFile()` / `generatedSigner()` from
`@solana/kit-plugin-signer` — they set both `payer` and `identity` to the same keypair (the common case). For fresh local/devnet signers, install the RPC/LiteSVM plugin after `generatedSigner()`, then fund with `airdropSigner(...)`. Reach for the role-specific variants (`payer()` + `identity()`) only when fees and authority must come from different keypairs.
- Use `@solana-program/*` program plugins (e.g., `tokenProgram()`) for fluent instruction APIs.
- Prefer Kit types (`Address`, `Signer`, transaction message APIs, codecs).
- **Transaction v1** (4096-byte transactions, SIMD-0385) is the one exception to the plugin-client default: `rpcTransactionPlanner` throws on `version: 1` today, so v1 needs `@solana/kit` 8 and the manual `pipe()` path. See [transactions-v1.md](references/transactions-v1.md).
2) **UI: Kit plugin client + @solana/react**
- Wallet connection via `walletSigner()` from `@solana/kit-plugin-wallet` (Wallet Standard discovery; the connected wallet fills the payer/identity roles), with React hooks from `@solana/kit-plugin-wallet/react`.
- Client bindings via `@solana/react` v7 (`ClientProvider`, typed `useClient<AppClient>`, data hooks, SWR/TanStack adapters). Its legacy Wallet Standard hooks are being deprecated — don't use them.
- Do **not** use `@solana/client` / `@solana/react-hooks` (framework-kit) or `@solana/wallet-adapter-*` for new work.
3) **Legacy compatibility: web3.js v3 (RC)**
- web3.js v3 (`@solana/web3.js@rc`) is the classic class-based API rebuilt on Kit internals. It is still a release candidate — treat it as the migration target for v1 codebases, not a default recommendation for new work.
- Migrating a v1 codebase: use the official migration skill from the solana-web3.js repo rather than hand-migrating — see [kit-web3-interop.md](references/kit-web3-interop.md) for routing.
- Do not introduce `@solana/web3-compat` in new work — it is superseded.
- Do not let legacy class types leak across the entire app; contain them to adapter modules.
4) **Programs**
- Default: Anchor 1.1.x (fast iteration, IDL generation, mature tooling).
- Performance/footprint: Pinocchio (0.11+) when you need CU optimization, minimal binary size,
zero dependencies, or fine-grained control over parsing/allocations.
5) **Testing (Surfpool-centered)**
- Unit tests: LiteSVM (in-process, Rust/TS) or Mollusk (Rust instruction harness).
- Integration tests: **Surfpool** — mainnet forking with lazy account cloning, 26 `surfnet_*` cheatcodes (time travel, account/token state, oracle scenarios, CU profiling), embeddable in-process via the `@solana/surfpool` SDK, and the default `anchor test` runner in Anchor 1.0+.
- In TypeScript, boot the surfnet through the Kit plugin: `await createClient().use(surfpool())` from `@solana/surfpool/kit` installs a pre-funded payer, the RPC stack, and a typed `client.cheatcodes` — see [surfpool/kit-plugin.md](references/surfpool/kit-plugin.md).
- Use solana-test-validator only when you need full validator runtime fidelity not emulated by Surfpool.
Agent safety guardrails
Transaction review (W009)
- **Never sign or send transactions without explicit user approval.** Always display the transaction summary (recipient, amount, token, fee payer, cluster) and wait for confirmation before proceeding.
- **Never ask for or store private keys, seed phrases, or keypair files.** Use wallet-standard signing flows where the wallet holds the keys.
- **Default to devnet/localnet.** Never target mainnet unless the
Read more
name: solana-dev description: 'Use when user asks to "build a Solana dapp", "write an Anchor program", "create a token", "debug Solana errors", "set up wallet connection", "test my Solana program", "fuzz my Solana program", "deploy to devnet", "send a v1 transaction", "support larger transactions", "fix maxSupportedTransactionVersion", or "explain Solana concepts" (rent, accounts, PDAs, CPIs). Also for program architecture — state layout, reducing compute units, throughput bottlenecks, instruction naming — and quick on-chain lookups via public RPC + curl (balance, transaction, token account). End-to-end playbook: wallet connection, Anchor/Pinocchio programs, Codama clients, Surfpool/LiteSVM/Mollusk testing, security review, and the v1 transaction format (SIMD-0385, 4096-byte transactions). Prefers @solana/kit plugin clients (createClient + .use(); kit 8 for v1), @solana/kit-plugin-wallet + @solana/react for wallets, web3.js v3 (RC) as the legacy migration target, and Surfpool for local networks.' license: MIT compatibility: Requires Node.js 20.18+, Rust toolchain, Solana CLI, Anchor CLI metadata: author: Solana Foundation version: "2.4.0"
Solana Development Skill (Kit-first)
What this Skill is for
Use this Skill when the user asks for:
- Solana dApp UI work (React / Next.js)
- Wallet connection + signing flows
- Transaction building / sending / confirmation UX
- Transaction v1 / larger transactions (SIMD-0385) — sending, reading, indexing
- On-chain program development (Anchor or Pinocchio)
- Program architecture — state layout, PDA seed conventions, naming, parallelization, cranks, vault topology
- Client SDK generation (typed program clients)
- Local testing (Surfpool, LiteSVM, Mollusk) and fuzz testing (Trident, cargo-fuzz)
- Security hardening and audit-style reviews
- Confidential transfers (Token-2022 ZK extension)
- **Toolchain setup, version mismatches, GLIBC errors, dependency conflicts**
- **Upgrading Anchor/Solana CLI versions, migration between versions**
- **Migrating web3.js v1 code to web3.js v3 or Kit**
Default stack decisions (opinionated)
1) **SDK: @solana/kit (v7+) first**
- Build clients with `createClient()` from `@solana/kit`, then `.use(...)` plugins:
createClient()
.use(signer(mySigner))
.use(solanaRpc({ rpcUrl }));
// or solanaLocalRpc / solanaDevnetRpc / solanaMainnetRpc from @solana/kit-plugin-rpc- Default to `signer()` / `signerFromFile()` / `generatedSigner()` from
`@solana/kit-plugin-signer` — they set both `payer` and `identity` to the same keypair (the common case). For fresh local/devnet signers, install the RPC/LiteSVM plugin after `generatedSigner()`, then fund with `airdropSigner(...)`. Reach for the role-specific variants (`payer()` + `identity()`) only when fees and authority must come from different keypairs.
- Use `@solana-program/*` program plugins (e.g., `tokenProgram()`) for fluent instruction APIs.
- Prefer Kit types (`Address`, `Signer`, transaction message APIs, codecs).
- **Transaction v1** (4096-byte transactions, SIMD-0385) is the one exception to the plugin-client default: `rpcTransactionPlanner` throws on `version: 1` today, so v1 needs `@solana/kit` 8 and the manual `pipe()` path. See [transactions-v1.md](references/transactions-v1.md).
2) **UI: Kit plugin client + @solana/react**
- Wallet connection via `walletSigner()` from `@solana/kit-plugin-wallet` (Wallet Standard discovery; the connected wallet fills the payer/identity roles), with React hooks from `@solana/kit-plugin-wallet/react`.
- Client bindings via `@solana/react` v7 (`ClientProvider`, typed `useClient<AppClient>`, data hooks, SWR/TanStack adapters). Its legacy Wallet Standard hooks are being deprecated — don't use them.
- Do **not** use `@solana/client` / `@solana/react-hooks` (framework-kit) or `@solana/wallet-adapter-*` for new work.
3) **Legacy compatibility: web3.js v3 (RC)**
- web3.js v3 (`@solana/web3.js@rc`) is the classic class-based API rebuilt on Kit internals. It is still a release candidate — treat it as the migration target for v1 codebases, not a default recommendation for new work.
- Migrating a v1 codebase: use the official migration skill from the solana-web3.js repo rather than hand-migrating — see [kit-web3-interop.md](references/kit-web3-interop.md) for routing.
- Do not introduce `@solana/web3-compat` in new work — it is superseded.
- Do not let legacy class types leak across the entire app; contain them to adapter modules.
4) **Programs**
- Default: Anchor 1.1.x (fast iteration, IDL generation, mature tooling).
- Performance/footprint: Pinocchio (0.11+) when you need CU optimization, minimal binary size,
zero dependencies, or fine-grained control over parsing/allocations.
5) **Testing (Surfpool-centered)**
- Unit tests: LiteSVM (in-process, Rust/TS) or Mollusk (Rust instruction harness).
- Integration tests: **Surfpool** — mainnet forking with lazy account cloning, 26 `surfnet_*` cheatcodes (time travel, account/token state, oracle scenarios, CU profiling), embeddable in-process via the `@solana/surfpool` SDK, and the default `anchor test` runner in Anchor 1.0+.
- In TypeScript, boot the surfnet through the Kit plugin: `await createClient().use(surfpool())` from `@solana/surfpool/kit` installs a pre-funded payer, the RPC stack, and a typed `client.cheatcodes` — see [surfpool/kit-plugin.md](references/surfpool/kit-plugin.md).
- Use solana-test-validator only when you need full validator runtime fidelity not emulated by Surfpool.
Agent safety guardrails
Transaction review (W009)
- **Never sign or send transactions without explicit user approval.** Always display the transaction summary (recipient, amount, token, fee payer, cluster) and wait for confirmation before proceeding.
- **Never ask for or store private keys, seed phrases, or keypair files.** Use wallet-standard signing flows where the wallet holds the keys.
- **Default to devnet/localnet.** Never target mainnet unless the
A comprehensive Agent Skill for modern Solana development (July 2026 best practices).
Repo: solana-foundation/solana-dev-skill

