Sui Agent Wallet
v1.0.3Provide an AI agent with a secure Sui wallet to manage accounts, sign transactions, switch networks, and interact with Sui DApps via a Chrome extension and l...
Like a lobster shell, security has layers — review code before you run it.
License
SKILL.md
Sui Agent Wallet Skill
Give your AI agent its own Sui wallet to interact with DApps and sign transactions.
GitHub: https://github.com/EasonC13-agent/sui-skills/tree/main/sui-agent-wallet
Architecture
Chrome Extension ◄──WebSocket──► Local Server ◄──API──► Agent
│ │
▼ ▼
DApp Page Key Management
(Wallet Standard) (Seed Phrase)
Installation
cd <your-workspace>/skills/sui-agent-wallet
# Install server dependencies
cd server && bun install
# Start the server
bun run index.ts
Load Chrome Extension:
- Open
chrome://extensions/ - Enable "Developer mode"
- Click "Load unpacked"
- Select the
extension/folder
First Launch
The server automatically generates a 12-word seed phrase and stores it in macOS Keychain:
═══════════════════════════════════════════════════════════
🔐 NEW WALLET CREATED
═══════════════════════════════════════════════════════════
Seed phrase stored securely in macOS Keychain.
To view your seed phrase for backup:
curl http://localhost:3847/mnemonic
Or use macOS Keychain Access app:
Service: sui-agent-wallet
Account: mnemonic
═══════════════════════════════════════════════════════════
Secure Storage
| Location | Contents |
|---|---|
| macOS Keychain | Seed phrase (encrypted) |
~/.sui-agent-wallet/wallet.json | Account addresses, network settings (no sensitive data) |
View Keychain entry:
# Command line
security find-generic-password -s "sui-agent-wallet" -a "mnemonic" -w
# Or open Keychain Access app
# Search for "sui-agent-wallet"
Agent API
Wallet Info
# Get current address
curl http://localhost:3847/address
# Get balance
curl http://localhost:3847/balance
# Get seed phrase (for backup)
curl http://localhost:3847/mnemonic
Account Management
# List all accounts
curl http://localhost:3847/accounts
# Create new account
curl -X POST http://localhost:3847/accounts
# Create account at specific index
curl -X POST http://localhost:3847/accounts \
-H "Content-Type: application/json" \
-d '{"index": 2}'
# Switch account
curl -X POST http://localhost:3847/accounts/switch \
-H "Content-Type: application/json" \
-d '{"index": 1}'
Network Management
# Get current network
curl http://localhost:3847/network
# Switch network (mainnet | testnet | devnet | localnet)
curl -X POST http://localhost:3847/network \
-H "Content-Type: application/json" \
-d '{"network": "testnet"}'
Get Test Coins (Faucet)
Testnet:
- Official Faucet: https://faucet.testnet.sui.io/
- Discord: Join Sui Discord, post your wallet address in
#testnet-faucet - CLI:
sui client faucet --address <YOUR_ADDRESS>
Devnet:
- Official Faucet: https://faucet.devnet.sui.io/
- Discord: Post your wallet address in
#devnet-faucet - CLI:
sui client faucet --address <YOUR_ADDRESS>
Note: Mainnet requires real SUI tokens and cannot use faucets.
Transaction Signing
# View pending transactions
curl http://localhost:3847/pending
# View transaction details
curl http://localhost:3847/tx/<request-id>
# Approve transaction
curl -X POST http://localhost:3847/approve/<request-id>
# Reject transaction
curl -X POST http://localhost:3847/reject/<request-id>
Import/Export
# Import seed phrase (WARNING: overwrites existing wallet!)
curl -X POST http://localhost:3847/import \
-H "Content-Type: application/json" \
-d '{"mnemonic": "your twelve word seed phrase here ..."}'
CLI Integration (Direct Signing)
Sign unsigned transactions generated by Sui CLI:
# 1. Generate unsigned transaction (using Agent Wallet address)
AGENT_ADDR=$(curl -s localhost:3847/address | jq -r .address)
TX_BYTES=$(sui client publish --serialize-unsigned-transaction \
--sender $AGENT_ADDR --gas-budget 100000000 | tail -1)
# 2. Sign and execute with Agent Wallet
curl -X POST http://localhost:3847/sign-and-execute \
-H "Content-Type: application/json" \
-d "{\"txBytes\": \"$TX_BYTES\"}"
# Or sign only without executing
curl -X POST http://localhost:3847/sign-raw \
-H "Content-Type: application/json" \
-d "{\"txBytes\": \"$TX_BYTES\"}"
Supported CLI commands:
sui client publish --serialize-unsigned-transactionsui client call --serialize-unsigned-transactionsui client transfer-sui --serialize-unsigned-transaction
Transaction Parsing
When a signing request comes in, the agent sees:
{
"id": "req_123",
"method": "signTransaction",
"origin": "http://localhost:5173",
"payload": {
"transaction": "{\"commands\":[{\"MoveCall\":{...}}]}",
"chain": "sui:devnet"
}
}
Security Checklist
Before signing, verify:
- Is the target contract trustworthy?
- Is the amount reasonable?
- Are there suspicious coin transfers?
- Is the gas budget normal?
Test DApp
Built-in Counter DApp for testing:
# Start frontend
cd test-dapp/frontend && pnpm dev
# Open http://localhost:5173
# 1. Connect Wallet → Select "Sui Agent Wallet"
# 2. Click "+1" → Sends a signing request
# 3. Agent uses /pending to view, /approve to sign
Technical Details
BIP44 Derivation Path
m/44'/784'/{accountIndex}'/0'/0'
- 784 = Sui's coin type
- Each accountIndex corresponds to one address
Wallet Standard Features
Implemented Sui Wallet Standard features:
standard:connectstandard:disconnectstandard:eventssui:signTransactionsui:signAndExecuteTransactionsui:signPersonalMessage
Event Notifications
When switching accounts or networks, the server notifies the Extension via WebSocket:
accountChanged- Account changednetworkChanged- Network changed
Related Skills
This skill is part of the Sui development skill suite:
| Skill | Description |
|---|---|
| sui-decompile | Fetch and read on-chain contract source code |
| sui-move | Write and deploy Move smart contracts |
| sui-coverage | Analyze test coverage with security analysis |
| sui-agent-wallet | Build and test DApps frontend |
Workflow:
sui-decompile → sui-move → sui-coverage → sui-agent-wallet
Study Write Test & Audit Build DApps
All skills: https://github.com/EasonC13-agent/sui-skills
Files
20 totalComments
Loading comments…
