원클릭으로
nunchuk-wallet-creation
Create Nunchuk Bitcoin wallets, add keys, and finalize them. Use when the user wants to create a wallet.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Create Nunchuk Bitcoin wallets, add keys, and finalize them. Use when the user wants to create a wallet.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Inspect and manage a wallet's coins (UTXOs) - list and filter coins, lock and unlock them, and organize them with tags and collections including automatic rules (add untagged coins, add by tag, auto-lock). Use when the user wants to label, organize, protect, or audit individual coins, or set up automatic coin classification.
Create, preview, sign, inspect, list, and broadcast Bitcoin transactions, including fee control (manual fee rate, fee levels, subtract fee, send all, anti-fee sniping) and coin selection (spend specific coins, spend from a tag or collection, change-coin tags). Use when the user wants to send funds, preview or adjust fees, choose which coins to spend, sign a transaction, broadcast it, or inspect wallet transaction history.
Install Nunchuk CLI, authenticate, switch between mainnet and testnet, change Electrum server, set the default fee level, and inspect saved config. Use when a command needs login, network, or Electrum setup, or when the user asks to check current auth or config.
Inspect and manage existing Nunchuk wallets, including balances, receive addresses, backup/export, recovery, rename, delete, wallet replacement, and dummy-transaction approval. Use when the user wants to work with a wallet that has already been created.
Enable, inspect, disable, and update Nunchuk Platform key policies for wallets. Use when the user asks about Platform key, spending limits, signing delay, auto-broadcast, or policy updates.
Use Coldcard with Nunchuk, add a Coldcard key, review or create HSM policies, create or authorize HSM users, validate or start HSM mode, and sign PSBTs with Coldcard. Use when the user wants to use Coldcard with Nunchuk, add a Coldcard key to a wallet, or asks about HSM mode.
| name | nunchuk-wallet-creation |
| description | Create Nunchuk Bitcoin wallets, add keys, and finalize them. Use when the user wants to create a wallet. |
Progress:
If the user specifically asks about invitations, use nunchuk-invitations.
If the user specifically asks about Platform key behavior or policy updates, also use nunchuk-platform-key.
If the user specifically asks about wallet backup or recovery material, also use nunchuk-wallet-management.
If the user asks to create a wallet:
nunchuk sandbox list first.2-of-3, 2-of-4, etcNATIVE_SEGWIT. Use TAPROOT when the user asks for Taproot."My Wallet".Create a plain multisig sandbox:
nunchuk sandbox create --name "My Wallet" --m 2 --n 3 --address-type NATIVE_SEGWIT
Create a Taproot multisig sandbox:
nunchuk sandbox create --name "My Taproot Wallet" --m 2 --n 3 --address-type TAPROOT
Join:
nunchuk sandbox join <sandbox-id>
Join from URL:
nunchuk sandbox join https://nunchuk.io/wallet/join/<sandbox-id>
If the user asks which Miniscript path is satisfiable, what a signing path means, or how a branch will sign, also use nunchuk-wallet-transactions.
Read references/bip-0379.md when you need more Miniscript background, extra fragment patterns, or terminology.
Miniscript sandboxes support NATIVE_SEGWIT and TAPROOT.
For non-trivial NATIVE_SEGWIT / P2WSH policies, use the bundled helper:
scripts/miniscript.js compile 'thresh(2,pk(key_0_0),pk(key_1_0),pk(key_2_0))'
scripts/miniscript.js analyze 'multi(2,key_0_0,key_1_0,key_2_0)'
Use compile for policies and analyze for templates. It prints cost analysis and script structure. Do not use it for Taproot/Tapscript fragments such as multi_a(...).
Before creating a wallet, verify the final template:
scripts/miniscript.js analyze "<native-segwit-template>"
nunchuk miniscript inspect --miniscript "<native-segwit-template>"
nunchuk miniscript validate --miniscript "multi_a(2,key_0_0,key_1_0,key_2_0)" --address-type TAPROOT
Create a Miniscript sandbox:
nunchuk sandbox create --name "My Wallet" \
--miniscript-template "multi(2,key_0_0,key_1_0,key_2_0)" \
--address-type NATIVE_SEGWIT
Create a Taproot Miniscript sandbox:
nunchuk sandbox create --name "My Taproot Miniscript Wallet" \
--miniscript-template "multi_a(2,key_0_0,key_1_0,key_2_0)" \
--address-type TAPROOT
Generate a software key on this device and add it by fingerprint to a multisig slot:
nunchuk key generate --name "My key"
nunchuk sandbox add-key <sandbox-id> --slot 0 --fingerprint <xfp>
Reuse an existing software key on this device:
nunchuk key list
nunchuk sandbox add-key <sandbox-id> --slot 0 --fingerprint <xfp>
Add a local software key to a Miniscript slot:
nunchuk key list
nunchuk sandbox add-key <sandbox-id> --slot key_0_0 --fingerprint <xfp>
Add key with structured fields:
nunchuk sandbox add-key <sandbox-id> --slot 0 \
--fingerprint "1a2b3c4d" \
--xpub "xpub..." \
--path "m/48h/0h/0h/2h"
Add key with a descriptor:
nunchuk sandbox add-key <sandbox-id> --slot key_1_0 \
--descriptor "[1a2b3c4d/48h/0h/0h/2h]xpub..."
For Miniscript, --slot uses signer names from the template such as key_0_0 or key_3_0.
Check sandbox state:
nunchuk sandbox get <sandbox-id>
Enable platform key for multisig:
nunchuk sandbox platform-key enable <sandbox-id>
Enable platform key for Miniscript:
nunchuk sandbox platform-key enable <sandbox-id> --slot key_3_0
For Platform key behavior and policy examples, also use nunchuk-platform-key.
Set a global Platform key policy:
# Auto-broadcast, max 1000 USD per day.
nunchuk sandbox platform-key set-policy <sandbox-id> \
--auto-broadcast --limit-amount 1000 --limit-currency USD --limit-interval DAILY
Set a per-key Platform key policy:
# Only for signer 1a2b3c4d, with auto-broadcast, a 1h delay, and unlimited spending.
nunchuk sandbox platform-key set-policy <sandbox-id> \
--signer 1a2b3c4d --auto-broadcast --signing-delay 1h
Finalize:
nunchuk sandbox finalize <sandbox-id>
nunchuk wallet address get <wallet-id>
nunchuk wallet export <wallet-id> > wallet-backup.txt
For Taproot multisig, optionally configure the Value Key Set during finalize. This is the selected
m signer set used for key-path signing to improve privacy and fees. Use comma-separated signer
slot indexes or 8-hex fingerprints:
nunchuk sandbox finalize <sandbox-id> --value-key-set 0,1
Important sync states:
ADDED means a slot is known filled remotely, but this device has not synced the full signer descriptor yet.sandbox get can sync encrypted sandbox state for other participants.nunchuk sandbox get <sandbox-id> and retry after the other devices sync.sandbox get shows status: ACTIVE, run nunchuk sandbox finalize <sandbox-id> to create the local wallet record.Create a plain 2-of-3 multisig wallet:
nunchuk sandbox create --name "My Wallet" --m 2 --n 3 --address-type NATIVE_SEGWIT
Create a wallet and use a software key stored on this device:
nunchuk sandbox create --name "My Wallet" --m 2 --n 3 --address-type NATIVE_SEGWIT
nunchuk key generate
nunchuk sandbox add-key <sandbox-id> --slot 0 --fingerprint <xfp>
Create a 2-of-3 wallet with a 100 USD daily Platform key spending limit:
nunchuk sandbox create --name "My Wallet" --m 2 --n 3 --address-type NATIVE_SEGWIT
nunchuk sandbox platform-key enable <sandbox-id>
nunchuk sandbox platform-key set-policy <sandbox-id> \
--limit-amount 100 --limit-currency USD --limit-interval DAILY
Create a 2-of-3 wallet with a 100 USD daily spending limit and auto-broadcast:
nunchuk sandbox create --name "My Wallet" --m 2 --n 3 --address-type NATIVE_SEGWIT
nunchuk sandbox platform-key enable <sandbox-id>
nunchuk sandbox platform-key set-policy <sandbox-id> \
--auto-broadcast \
--limit-amount 100 --limit-currency USD --limit-interval DAILY
Create a 2-of-3 wallet with a 24-hour Platform key signing delay, unlimited spending:
nunchuk sandbox create --name "My Wallet" --m 2 --n 3 --address-type NATIVE_SEGWIT
nunchuk sandbox platform-key enable <sandbox-id>
nunchuk sandbox platform-key set-policy <sandbox-id> \
--signing-delay 24h
Create a Miniscript wallet using one of the templates from Miniscript template examples below:
nunchuk sandbox create --name "My Wallet" \
--miniscript-template "multi(2,key_0_0,key_1_0,key_2_0)" \
--address-type NATIVE_SEGWIT
Create a Taproot Miniscript wallet:
nunchuk sandbox create --name "My Taproot Miniscript Wallet" \
--miniscript-template "multi_a(2,key_0_0,key_1_0,key_2_0)" \
--address-type TAPROOT
Create a Miniscript 2-of-3 wallet with a 100 USD daily Platform key spending limit:
nunchuk sandbox create --name "My Wallet" \
--miniscript-template "or_d(multi(2,key_0_0,key_1_0,key_2_0),and_v(v:pk(key_3_0),after(1735689600)))" \
--address-type NATIVE_SEGWIT
nunchuk sandbox platform-key enable <sandbox-id> --slot key_3_0
nunchuk sandbox platform-key set-policy <sandbox-id> \
--limit-amount 100 --limit-currency USD --limit-interval DAILY
Simple 2-of-3:
multi(2,key_0_0,key_1_0,key_2_0)
Meaning:
key_0_0, key_1_0, and key_2_0 can spend at any time.2-of-3 with an absolute block-height recovery key:
or_d(multi(2,key_0_0,key_1_0,key_2_0),and_v(v:pk(key_3_0),after(840000)))
Meaning:
2-of-3 at any time.key_3_0 spend alone once chain height reaches block 840000.840000 is a block height, not seconds.2-of-3 with an absolute timestamp recovery key:
or_d(multi(2,key_0_0,key_1_0,key_2_0),and_v(v:pk(key_3_0),after(1735689600)))
Meaning:
2-of-3 at any time.key_3_0 spend alone once chain time reaches UNIX timestamp 1735689600.1735689600 is 2025-01-01 00:00:00 UTC.2-of-3 with a relative block-delay recovery key:
or_d(multi(2,key_0_0,key_1_0,key_2_0),and_v(v:pk(key_3_0),older(144)))
Meaning:
2-of-3 at any time.key_3_0 spend alone after the UTXO being spent has aged by 144 blocks.144 blocks is about 24 hours.2-of-3 with a relative time-delay recovery key:
or_d(multi(2,key_0_0,key_1_0,key_2_0),and_v(v:pk(key_3_0),older(4194473)))
Meaning:
2-of-3 at any time.key_3_0 spend alone after a time-based BIP68 delay.4194473 is not seconds. It is a raw sequence value:
4194304 sets the BIP68 time-based flag169 means 169 units of 512 seconds169 * 512 = 86528 seconds, which is about 24 hours 1 minute 28 seconds3-of-4 that becomes 2-of-4 after 2 years and 1-of-4 after 5 years:
thresh(3,pk(key_0_0),s:pk(key_1_0),s:pk(key_2_0),s:pk(key_3_0),sln:after(1842652800),sln:after(1937260800))
Meaning:
2028-05-23 00:00:00 UTC, any 3 of the 4 keys can spend.1842652800, any 2 of the 4 keys can spend.1937260800, any 1 of the 4 keys can spend.3-of-4 that becomes 2-of-4 six months after funds arrive and 1-of-4 after one year:
thresh(3,pk(key_0_0),s:pk(key_1_0),s:pk(key_2_0),s:pk(key_3_0),sln:older(4225186),sln:older(4255898))
Meaning:
older(...) values are raw BIP68 sequence values, not seconds.or_d(...or_i(...)) branch script can model that, but it is more verbose.2-of-3 with a hash-preimage branch:
or_d(multi(2,key_0_0,key_1_0,key_2_0),and_v(v:pk(key_3_0),sha256(2222222222222222222222222222222222222222222222222222222222222222)))
Meaning:
2-of-3 at any time.key_3_0 spend alone only if the spender also reveals the 32-byte preimage whose SHA256 matches the given hash.after(n) is an absolute timelock:
1 through 2147483647 (2^31 - 1)n < 500000000, Bitcoin interprets it as a block heightn >= 500000000, Bitcoin interprets it as a UNIX timestamp in secondsn >= 2147483648, the value is invalid because it exceeds the 2^31 - 1 limit, even if it looks like a future UNIX timestampExamples:
after(840000) means the path is valid once chain height reaches block 840000; it does not mean 840000 secondsafter(1735689600) means the path is valid once chain time reaches 2025-01-01 00:00:00 UTCafter(2147483647) is the latest valid timestamp lock and means 2038-01-19 03:14:07 UTCafter(2208988800) is invalid because 2208988800 means 2040-01-01 00:00:00 UTC2038-01-19 03:14:07 UTC, use a height lock instead: get the current height with nunchuk network tip, estimate the target height, and use after(<target-height>)144 blocks per dayolder(n) is a relative timelock enforced through input sequence:
OP_CHECKSEQUENCEVERIFYn < 4194304, the BIP68 time-based flag is not set, so the value is block-basedn >= 4194304, the value is a raw BIP68 time-based sequence encoding, not plain secondsExamples:
older(144) means the UTXO must be at least 144 blocks old before that path can be used; at roughly 10 minutes per block, that is about 24 hoursolder(4194473) means:
4194304, leaving 169169 as 169 units of 512 seconds169 * 512 = 86528 seconds, about 24 hours 1 minute 28 secondsolder(86400) does not mean one day; for time-based relative locks the number must already be BIP68-encodedFor static signing-path inspection or satisfiability checks, use nunchuk-wallet-transactions.
NATIVE_SEGWIT by default.NATIVE_SEGWIT, NESTED_SEGWIT, LEGACY, and TAPROOT.NATIVE_SEGWIT and TAPROOT; use Tapscript fragments such as multi_a(...) for Taproot.--json for raw machine-readable output.sandbox create command over exploratory checks.nunchuk key list and sandbox add-key --fingerprint <xfp> instead of generating a new one.nunchuk key generate and add it with sandbox add-key --fingerprint <xfp>.wallet export <wallet-id> if the user wants a wallet backup.sandbox delete as destructive and only run it when the user clearly asked to remove the sandbox.xprv values are critical secrets. Anyone with them can control the funds, and losing them may make the funds unrecoverable.h or '; prefer h.key generate stores the software key on the current device for the current user and network.sandbox add-key --fingerprint <xfp> is the simplest way to use a locally stored software key.nunchuk-cli >= 0.1.2.