Creates anonymous Starknet wallets via Typhoon, loads accounts, and handles contract interactions including ABI discovery, reads, writes, preflights, simulations, and allowance checks for privacy-focused agents.
npx claudepluginhub keep-starknet-strange/starknet-agentic --plugin starknet-agentic-skillsThis skill is limited to using the following tools:
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.jsonCreates and manages Starknet wallets for AI agents: transfer tokens, check balances, manage session keys, deploy accounts, invoke contracts with native Account Abstraction.
Provides expertise in ERC-4337 account abstraction: smart contract wallets, paymasters, bundlers, user operations, social recovery, session keys, gas sponsorship, wallet SDKs.
Executes Alchemy CLI (@alchemy/cli) for live blockchain queries, transaction/NFT/token lookups, simulation, tracing, Solana RPC/DAS, webhooks, and app admin. For agent runtime tasks with local install.
Share bugs, ideas, or general feedback.
This 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.