Blockchain skill
Skill hec-ovi/blockchain-skill
Operate a non-custodial blockchain wallet on-chain (EVM and Bitcoin), no exchange or MetaMask. Create or import a wallet, balances, send native/ERC-20/BTC, swap tokens, compile/deploy/call Solidity. Trigger on wallet, crypto, ETH, BTC, ERC-20, token, send, transfer, swap, trade, Solidity, contract, on-chain, testnet, mainnet, sepolia.From its SKILL.md
npx -y skills add hec-ovi/blockchain-skillAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
7.1 KB, ~1.9k tokens by cl100k_base, as published. Nobody here has run it
agent-wallet
Instructions only. Every action is the agent-wallet CLI: one process, JSON envelope {ok, data, error, meta} on stdout, then exit. On ok:false follow error.hint. Keys stay local (keystore v3). No custodial middleman.
Start here
Node >= 22.18. Skill packs ship dist/agent-wallet.mjs (no npm install).
Resolve CLI once (first hit wins; reuse it):
command -v agent-wallet
test -x .noob/skills/agent-wallet/agent-wallet && echo .noob/skills/agent-wallet/agent-wallet
test -f .noob/skills/agent-wallet/dist/agent-wallet.mjs && echo "node .noob/skills/agent-wallet/dist/agent-wallet.mjs"
test -x ./agent-wallet && echo ./agent-wallet
Init once per session:
agent-wallet init
Read data.ready, data.nextActions, data.notes. Do not hand-probe the install.
Passphrase (signing verbs). Do this once, then stop touching it:
- If cwd
.envalready hasAGENT_WALLET_PASSPHRASE, use it (CLI auto-loads.env). Do not invent another. - Else create
.envonce withAGENT_WALLET_PASSPHRASE=<random >=8 chars>andAGENT_WALLET_HOME=./.agent-wallet-data(or keep default home). Never print the passphrase in chat. - On
PASSPHRASE_WRONG: stop. Do not brute-force, dump keystore JSON, or reverse-engineer the bundle.
Fund testnets by receiving from an external wallet or a public testnet drip site. This toolkit does not drip gas.
When to use which
| Intent | Verb |
|---|---|
| Session ready? | init |
| New / restore wallet | wallet-create / wallet-import |
| Receive address | wallet-addresses |
| Export key / backup secrets | wallet-export (prefer --out) |
| Balance / fees / tx / UTXOs | balance / fees / tx / utxos |
| Pay someone (native, ERC-20, BTC) | send |
| Same-chain token A → B | swap-quote then swap (sell WETH not bare ETH; wrap first if needed) |
| ETH ↔ WETH | wrap / unwrap |
| Unknown contract | contract-learn then call/write |
| Deploy | contract-compile then contract-deploy |
| Chain meta / RPC alive | chain-resolve / chain-check |
send = transfer to an address. swap = convert tokens for yourself. Never default to mainnet silently; ask which network; state it in answers.
Amounts: never invent vague sizes ("tiny", "a bit"). Use an explicit number the user gave, or pick a concrete value and state it (e.g. 0.00001 ETH display, or raw base units for swap). Leave gas headroom on the balance.
Use this CLI only for wallet/chain ops. Do not quote swaps via random web APIs (0x, Uniswap web, curl to aggregators). swap-quote / swap on the CLI are the path.
Commands
Examples use agent-wallet; substitute your resolved CLI. Chain = name (sepolia, base, ethereum) or id. One mnemonic → same EVM address on every EVM chain.
Wallet
agent-wallet wallet-create --name main
agent-wallet wallet-import --name main --mnemonic "..."
agent-wallet wallet-list
agent-wallet wallet-addresses --name main --family evm
agent-wallet wallet-addresses --name main --family btc --network signet
# secrets: prefer file (0600); only when the user asks
agent-wallet wallet-export --name main --family evm --out ./wallet-export.json
agent-wallet wallet-export --name main --family evm --include-mnemonic --out ./wallet-full.json
Mnemonic is shown ONCE at create; tell the user to back it up; the keystore cannot recover it without the passphrase. wallet-export returns address + private key (and optional mnemonic). Prefer --out <file> so secrets go to a mode-0600 file; hand the user that file or its contents only if they asked. Never export unprompted.
Read
agent-wallet balance <chain> <address> [--token 0x..]
agent-wallet fees <chain>
agent-wallet utxos <btc-network> <address>
agent-wallet tx <chain> <hash>
agent-wallet chain-resolve <chain>
agent-wallet chain-check <chain>
balance needs the address, not a wallet name. Resolve via wallet-addresses first if needed.
Send
agent-wallet send <chain> --to 0x.. --amount 0.01 --wallet main --wait
agent-wallet send <chain> --to 0x.. --amount 10 --token 0xTOKEN --wallet main --wait
agent-wallet send signet --to tb1p.. --amount-raw all --wallet main
--amount = display units (ETH/token/BTC). --amount-raw = wei/token-raw/sats (all = BTC sweep). EVM --wait waits for receipt; BTC returns txid (poll tx).
Swap / wrap (base units for swap sell amount)
agent-wallet wrap <chain> --amount 0.0001 --wallet main --wait
agent-wallet unwrap <chain> --amount 0.0001 --wallet main --wait
agent-wallet swap-quote <chain> --sell 0xWETH --buy 0xTOKEN --amount <raw> --from 0xYOU
agent-wallet swap <chain> --sell 0xWETH --buy 0xTOKEN --amount <raw> --wallet main --wait
Quote first with an exact raw amount. Do not sell bare native: wrap then sell WETH. Prefer CoW where liquid; Uniswap works on Sepolia when pools exist; Kyber on mainnets. Optional --adapter cow|kyber|uniswap, --slippage 50 (bps). Re-quote if stale.
Contracts
agent-wallet contract-learn <chain> <address>
agent-wallet contract-compile --source ./X.sol --name X
agent-wallet contract-deploy <chain> --source ./X.sol --name X --args "a,b" --wallet main
agent-wallet contract-call <chain> <addr> --fn name --args a,b --abi ./abi.json
agent-wallet contract-write <chain> <addr> --fn name --args a,b --abi ./abi.json --wallet main --wait
Never call an unknown contract before contract-learn; check verified. Use deploy/learn ABI for call/write. View → call; state change → write.
Safety
Gate is deterministic code before sign/broadcast. It cannot be talked out of a decision. Prompt text is not enforcement.
- Mainnet and testnets are allowed by default. To lock mainnets:
{"gate":{"allowMainnet":false}}in~/.agent-wallet/config.json(optionalallowedChains, caps). - Gated: send, swap, wrap, unwrap, contract-deploy, contract-write. Reads and quotes are not.
- Keys:
keystore/<name>.jsonWeb3 v3 scrypt; passphrase never logged.
Anti-patterns
- Never skip
agent-wallet initon first use in a session. - Never re-bootstrap (curl/clone) when
dist/agent-wallet.mjsis already in the skill pack. - Never default to mainnet silently; ask the network first.
- Never put the passphrase in chat; use env or
.env. - Never invent a new passphrase after
wallet-create; one.envfor the session/workspace. - Never brute-force after
PASSPHRASE_WRONG; nevercatkeystore files to recover secrets. - Never
balancewith a wallet name; always an address. - Never
swapwhen the user asked to transfer to someone; usesend(--tokenif ERC-20). - Never
sendwhen they asked to convert A→B for themselves; useswap. - On
GATE_DENIED, fixconfig.json(mainnet was locked by the user) or use an allowed chain. - Never execute a stale swap quote; re-quote.
- Never call an unknown contract before
contract-learn.
What ships with it: 187 files
596.2 KB alongside SKILL.md, 94 of them executable
.agents/
.claude-plugin/
- marketplace.json1.1 KB
bin/
- agent-walletruns624 B
- agent-wallet.tsruns140 B
- entry.tsruns523 B
- init.shruns1.9 KB
docs/
- ARCHITECTURE.md9.1 KB
- INDEX.md2.3 KB
- PENDING.md4.8 KB
- RESEARCH.md11.8 KB
layers/
- agentio/CONTRACT.md2.2 KB
- agentio/schema/init-output.json1.0 KB
- agentio/src/cli.tsruns19.3 KB
- agentio/src/init.tsruns4.0 KB
- agentio/tests/cli.test.tsruns3.4 KB
- agentio/tests/contract-cli.e2e.test.tsruns4.9 KB
- agentio/tests/init.test.tsruns2.4 KB
- agentio/tests/wallet-cli.e2e.test.tsruns2.5 KB
- chains/CONTRACT.md2.1 KB
- chains/fixtures/chains-mini.json661 B
- chains/schema/chain-check-output.json795 B
- chains/schema/chain-info-output.json2.6 KB
- chains/src/api.tsruns840 B
- chains/src/btc.tsruns2.2 KB
- chains/src/contract.tsruns1.2 KB
- chains/src/evm.tsruns1.9 KB
- chains/src/registry.tsruns7.5 KB
- chains/tests/chains.live.test.tsruns659 B
- chains/tests/chains.test.tsruns6.2 KB
- contracts/CONTRACT.md2.4 KB
- contracts/fixtures/Counter.sol535 B
- contracts/schema/call-output.json352 B
- contracts/schema/compiled-output.json870 B
- contracts/schema/deploy-output.json1.1 KB
- contracts/schema/verify-output.json763 B
- contracts/schema/write-output.json808 B
- agent-walletruns297 B
- CHANGELOG.md3.5 KB
- .env.example273 B
- .gitignore596 B
147 more files not listed here. See all 187 in the repository.