Creates anonymous Starknet wallets via the Typhoon privacy flow and performs onchain reads, writes, preflight simulations, and allowance checks on Starknet contracts.
How this skill is triggered — by the user, by Claude, or both
Slash command
/starknet-agentic-skills:starknet-anonymous-walletThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill provides **agent-facing scripts** for:
agents/openai.yamlpackage.jsonprotocols.jsonreferences/argentx-class-hashes.mdscripts/_keys.jsscripts/_rpc.jsscripts/_tokens.jsscripts/avnu-swap.jsscripts/create-account.jsscripts/invoke-contract.jsscripts/loot-survivor.jsscripts/parse-smart.jsscripts/read-smart.jsscripts/resolve-smart.jsscripts/synonyms.jsscripts/test-parse.jsscripts/vesu-pool.jsscripts/watch-events-smart.jsskill.jsonThis skill provides agent-facing scripts for:
references/ (ABI discovery, Typhoon account flow, preflight/fee simulation notes)scripts/create-account.js, scripts/parse-smart.js, scripts/resolve-smart.jsscripts/read-smart.js, scripts/invoke-contract.js, scripts/avnu-swap.jsscripts/read-smart.js (call ERC20 allowance(owner, spender))npm install starknet@^8.9.1 typhoon-sdk@^1.1.13 @andersmyrmel/vard@^1.2.0 @avnu/avnu-sdk compromise@^14.14.5 ws@^8.19.0
These scripts talk to Starknet via JSON-RPC. Configure one of:
STARKNET_RPC_URL in your environment (recommended), ORrpcUrl in the JSON input for scripts that support it.If neither is provided, scripts fall back to the public Lava mainnet RPC:
https://rpc.starknet.lava.build:443import { RpcProvider, Account, Contract } from 'starknet';
const provider = new RpcProvider({
nodeUrl: process.env.STARKNET_RPC_URL || 'https://rpc.starknet.lava.build:443'
});
// signer can be a private key string or Starknet Signer instance
const account = new Account({
provider,
address: process.env.ACCOUNT_ADDRESS,
signer: process.env.PRIVATE_KEY
});
const contract = new Contract({
abi,
address: contractAddress,
providerOrAccount: account
});
// read
const balance = await contract.call('balance_of', [account.address]);
// write (sign -> send -> wait)
const tx = await contract.invoke('transfer', [to, amount], { waitForTransaction: false });
const receipt = await provider.waitForTransaction(tx.transaction_hash);
Common calls:
provider.getBlock('latest')provider.callContract({ contractAddress, entrypoint, calldata })provider.getClassAt(contractAddress)RPC_UNAVAILABLE → Verify STARKNET_RPC_URL, check network reachability, retry with backoff.INVALID_ADDRESS → Validate 0x... address format and expected network/account.INSUFFICIENT_FUNDS → Check STRK/token balances before write calls; reduce amount or top up.CONTRACT_CALL_FAILURE → Run read/simulate first, log contract/method/calldata, retry only for transient RPC errors.EXEC:node scripts/parse-smart.js '{"prompt":"STRING"}'
OUT (success):
{
"success": true,
"security": {"safe": true},
"tokens": ["ETH","STRK"],
"tokenMap": {"STRK":{"address":"0x...","decimals":18}},
"protocols": ["Ekubo","AVNU"],
"abis": {"Ekubo":["swap"],"AVNU":["swap"]},
"addresses": {"Ekubo":"0x...","AVNU":"0x01"}
}
OUT (no account):
{
"success": true,
"canProceed": false,
"needsAccount": true,
"operationType": "NO_ACCOUNT",
"noAccountGuide": {"steps": [...]},
"nextStep": "CREATE_ACCOUNT_REQUIRED"
}
OUT (account creation intent):
{
"success": true,
"canProceed": false,
"operationType": "CREATE_ACCOUNT_INTENT",
"hasAccount": true|false,
"noAccountGuide": {"steps": [...]},
"nextStep": "ACCOUNT_ALREADY_EXISTS|CREATE_ACCOUNT_REQUIRED"
}
LLM builds:
{
"parsed": {
"operations": [{"action":"swap","protocol":"AVNU","tokenIn":"ETH","tokenOut":"STRK","amount":10}],
"operationType": "WRITE|READ|EVENT_WATCH|CONDITIONAL",
"tokenMap": {...},
"abis": {...},
"addresses": {...}
}
}
EXEC:node scripts/resolve-smart.js '{"parsed":{...}}'
OUT (authorization required):
{
"canProceed": true,
"nextStep": "USER_AUTHORIZATION",
"authorizationDetails": {"prompt":"Authorize? (yes/no)"},
"executionPlan": {"requiresAuthorization": true}
}
RULE:
nextStep == "USER_AUTHORIZATION", ask the user for explicit confirmation.AVNU SDK sequence for WRITE/CONDITIONAL (boilerplate):
RpcProvider + Account).Typical AVNU SDK calls in this skill:
fetchTokens(...)getQuotes(...)executeSwap(...){
"watchers": [{
"action": "swap",
"protocol": "AVNU",
"tokenIn": "STRK",
"tokenOut": "ETH",
"amount": 10,
"condition": {
"eventName": "Swapped",
"protocol": "Ekubo",
"timeConstraint": {"amount":5,"unit":"minutes"}
}
}]
}
TimeConstraint → creates cron job with TTL auto-cleanup.
npx claudepluginhub keep-starknet-strange/starknet-agentic --plugin starknet-agentic-skillsCreates and manages Starknet wallets for AI agents with native Account Abstraction. Transfers tokens, checks balances, manages session keys, deploys accounts, and invokes smart contracts. Includes gasless paymaster support and AVNU swap integration.
Manages OKX Agentic Wallet operations: authentication, balances, token transfers, contract calls, and Gas Station (Solana stablecoin-gas).
Builds unsigned DeFi transactions from natural language intents across EVM chains like Ethereum, Arbitrum, Base, Optimism, Polygon. Supports send, swap, stake, lend on Aave, Uniswap, Lido, etc.