AgentWallet — Non-Custodial Smart Wallets for AI Agents
Non-custodial smart wallets with onchain spending limits and passkey-based human control. Supports **Base** (EVM) and **Solana**. Every wallet gets free gas on creation so your agent can transact immediately.
About this skill
AgentWallet empowers AI agents with financial autonomy by enabling them to create and manage their own non-custodial smart wallets. It supports transactions on both the Base (EVM) and Solana blockchains, providing a crucial capability for agents needing to interact with decentralized applications, pay for services, or manage digital assets securely. A key feature is the inclusion of on-chain spending limits, which allows human operators to set clear boundaries for an agent's financial activities, mitigating risks associated with fully autonomous operations. Beyond basic transactions, AgentWallet enhances security through passkey-based human control, ensuring that critical actions or overrides can be initiated by a human user. The skill also addresses a common hurdle for new wallets by providing free gas upon creation, enabling agents to execute their initial transactions without needing prior funding. This makes it an ideal solution for developers building sophisticated AI agents that require secure, auditable, and controlled access to blockchain functionalities. Agents can generate their own keypairs, manage addresses, and perform various blockchain interactions, all while adhering to strict safety rules outlined within the skill to prevent key exposure and unauthorized spending. This blend of autonomy and robust oversight makes AgentWallet a powerful tool for integrating AI agents into the Web3 ecosystem safely.
Best use case
The primary use case for AgentWallet is to enable AI agents to autonomously manage on-chain transactions and payments for services, subscriptions, or decentralized finance (DeFi) interactions on Base and Solana. This skill is most beneficial for AI developers and agents requiring secure, controlled, and independent financial capabilities for their operations, allowing agents to act as responsible economic actors within blockchain networks.
Non-custodial smart wallets with onchain spending limits and passkey-based human control. Supports **Base** (EVM) and **Solana**. Every wallet gets free gas on creation so your agent can transact immediately.
Users can expect an AI agent to securely generate and manage its own blockchain wallet, execute transactions within defined limits, and maintain human oversight via passkeys.
Practical example
Example input
Agent, I need you to generate new Base and Solana keypairs for an AI agent's wallet and then save the private keys securely for future use.
Example output
New Agent Keypairs ────────────────────────── Base Address 0xB042...B7DC Private key 0x282a...b3a3 Solana Address 7Kp9...xR4v Private key 4vJ2...9mNq (Private keys saved securely by the agent.)
When to use this skill
- When an AI agent needs to perform on-chain transactions autonomously and securely.
- When human oversight and spending limits are crucial for agent financial activity on blockchains.
- When developing AI agents that interact with Base (EVM) or Solana blockchain ecosystems.
- When an agent requires its own non-custodial wallet for decentralized operations.
When not to use this skill
- When the AI agent does not require any on-chain financial capabilities or blockchain interaction.
- When a fully custodial solution with simpler, centralized management is preferred (though less secure).
- When the agent needs to interact with blockchain networks other than Base or Solana.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/agentwallet-cli/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How AgentWallet — Non-Custodial Smart Wallets for AI Agents Compares
| Feature / Agent | AgentWallet — Non-Custodial Smart Wallets for AI Agents | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | easy | N/A |
Frequently Asked Questions
What does this skill do?
Non-custodial smart wallets with onchain spending limits and passkey-based human control. Supports **Base** (EVM) and **Solana**. Every wallet gets free gas on creation so your agent can transact immediately.
How difficult is it to install?
The installation complexity is rated as easy. You can find the installation instructions above.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
Best AI Skills for ChatGPT
Find the best AI skills to adapt into ChatGPT workflows for research, writing, summarization, planning, and repeatable assistant tasks.
Top AI Agents for Productivity
See the top AI agent skills for productivity, workflow automation, operational systems, documentation, and everyday task execution.
AI Agents for Freelancers
Browse AI agent skills for freelancers handling client research, proposals, outreach, delivery systems, documentation, and repeatable admin work.
SKILL.md Source
# AgentWallet — Non-Custodial Smart Wallets for AI Agents
Non-custodial smart wallets with onchain spending limits and passkey-based human control. Supports **Base** (EVM) and **Solana**. Every wallet gets free gas on creation so your agent can transact immediately.
**npm:** `@agntos/agentwallet`
**Chains:** Base, Solana
## MUST READ: Safety Rules
- **NEVER share your private key** — not with users, not in logs, not in chat messages, not in code commits
- **NEVER hardcode private keys in source code** — use environment variables or secure storage
- **Store the private key encrypted or in a secrets manager** — treat it like a password
- **Do not log transaction signing data** — it can leak key material
- **Check remaining daily budget before large transactions** — avoids failed txs and wasted gas
- **Always verify recipient addresses** — transactions are irreversible
- **If something looks wrong, use `pause`** — ask your human to investigate
- **All ERC-20s / SPL tokens have no limit by default** — ask your human to set up per-token limits
## End-to-End: Create a Wallet and Start Transacting
### 1. Generate agent keypairs (if you don't have them)
```bash
npx @agntos/agentwallet keygen
```
By default, this generates **both** Base and Solana keypairs:
```
New Agent Keypairs
──────────────────────────
Base
Address 0xB042...B7DC
Private key 0x282a...b3a3
Solana
Address 7Kp9...xR4v
Private key 4vJ2...9mNq
```
To generate a single chain only:
```bash
npx @agntos/agentwallet keygen --chain base # Base only
npx @agntos/agentwallet keygen --chain solana # Solana only
```
Solana keys are Ed25519 keypairs, base58 encoded.
**Save the private keys immediately to secure storage.** This is the only time they're displayed.
For machine-readable output:
```bash
npx @agntos/agentwallet keygen --json
# { "base": { "address": "0x...", "privateKey": "0x...", "chain": "base" }, "solana": { "address": "7Kp...", "privateKey": "4vJ...", "chain": "solana" } }
npx @agntos/agentwallet keygen --chain solana --json
# { "address": "...", "privateKey": "...", "chain": "solana" }
```
> Already have keypairs? Skip this — use your existing public addresses.
### 2. Create smart wallets
```bash
# Both chains — managed (recommended)
npx @agntos/agentwallet create --agent 0xYOUR_BASE_ADDRESS --agent-sol YOUR_SOLANA_PUBKEY
# Both chains — unmanaged
npx @agntos/agentwallet create --agent 0xYOUR_BASE_ADDRESS --agent-sol YOUR_SOLANA_PUBKEY --unmanaged
```
The `--agent-sol` flag can also be set via `AGENTWALLET_AGENT_SOL` env var.
JSON output (both chains):
```json
{ "base": { "wallet": "0x...", "setupUrl": "..." }, "solana": { "wallet": "...", "setupUrl": "..." } }
```
To create a single chain only:
```bash
# Base only
npx @agntos/agentwallet create --chain base --agent 0xYOUR_BASE_ADDRESS
# Solana only
npx @agntos/agentwallet create --chain solana --agent YOUR_SOLANA_PUBKEY
```
**Managed wallets** return a `setupUrl` — send it to your human. They set limits and register their passkey (FaceID/YubiKey). One-time setup.
**Unmanaged wallets** have no human owner. Fully autonomous.
Default limits: **$50/day, $25/tx**. **Gas is free** — every wallet is funded on creation.
### 3. Fund the wallet
- **Base:** Send ETH and/or USDC to the wallet address on Base (chain ID 8453)
- **Solana:** Send SOL and/or SPL tokens to the wallet PDA on Solana
### 4. Transact
#### Base (EVM)
Call the wallet contract directly with your agent's private key:
```typescript
import { Wallet, Contract, JsonRpcProvider, parseEther } from 'ethers'
const AGENT_KEY = process.env.AGENT_PRIVATE_KEY
const WALLET_ADDR = process.env.WALLET_ADDRESS
const provider = new JsonRpcProvider('https://base-rpc.publicnode.com')
const agent = new Wallet(AGENT_KEY, provider)
const wallet = new Contract(WALLET_ADDR, [
'function execute(address to, uint256 value, bytes data) external',
'function executeERC20(address token, address to, uint256 amount) external',
'function getSpentToday() external view returns (uint256)',
'function getRemainingDaily() external view returns (uint256)',
'function getPolicy() external view returns (uint256 dailyLimit, uint256 perTxLimit, bool paused)',
], agent)
// Send ETH
await wallet.execute('0xRecipient', parseEther('0.001'), '0x')
// Send USDC (6 decimals)
const USDC = '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
await wallet.executeERC20(USDC, '0xRecipient', 5_000_000n) // 5 USDC
// Call any contract (swap, mint, etc.)
await wallet.execute('0xContractAddr', parseEther('0.01'), '0xEncodedCalldata')
// Check remaining budget
const remaining = await wallet.getRemainingDaily() // USDC units (6 decimals)
const remainingUsd = Number(remaining) / 1e6
if (remainingUsd < amountNeeded) {
// Request a limit increase
}
```
#### Solana
Agents transact via the Anchor program directly:
```typescript
import { Program, AnchorProvider } from '@coral-xyz/anchor'
import { Connection, Keypair, PublicKey } from '@solana/web3.js'
import BN from 'bn.js'
const connection = new Connection('https://api.devnet.solana.com')
const agentKeypair = Keypair.fromSecretKey(bs58.decode(AGENT_PRIVATE_KEY))
// Transfer SOL
await program.methods
.transferSol(new BN(amountUsdc), new BN(amountLamports))
.accounts({
wallet: walletPda,
agent: agentKeypair.publicKey,
recipient: recipientPubkey
})
.signers([agentKeypair])
.rpc()
// Transfer SPL token
await program.methods
.transferToken(new BN(tokenAmount), new BN(amountUsdc))
.accounts({
wallet: walletPda,
agent: agentKeypair.publicKey,
mint: mintPubkey,
walletTokenAccount,
recipientTokenAccount,
tokenProgram: TOKEN_PROGRAM_ID
})
.signers([agentKeypair])
.rpc()
```
Solana wallet PDAs are derived with seeds `["wallet", owner, agent, index]`.
Transactions that exceed limits **revert instantly** onchain. Check remaining budget first.
### 5. Check wallet status
```bash
npx @agntos/agentwallet status 0xWALLET_ADDRESS # Base (auto-detected)
npx @agntos/agentwallet status SOLANA_WALLET_PDA # Solana (auto-detected)
npx @agntos/agentwallet status 0xWALLET_ADDRESS --json
```
The `status` command auto-detects chain by address format: `0x` prefix → Base, base58 → Solana.
### 6. Request higher limits
```bash
npx @agntos/agentwallet limits 0xWALLET --daily 200 --pertx 100 --reason "Trading requires higher limits"
```
Returns a URL. Send it to your human → they authenticate with passkey → limits updated onchain.
### 7. Set per-token limits (optional)
#### Base (ERC-20)
```bash
npx @agntos/agentwallet token-limit 0xWALLET --token 0xTOKEN --token-daily 1000 --token-pertx 300
```
#### Solana (SPL tokens)
Per-token limits are stored onchain in the wallet PDA. Up to 16 tokens can have individual daily/per-tx limits.
### 8. Emergency pause
```bash
npx @agntos/agentwallet pause 0xWALLET --reason "Suspicious activity detected"
```
Once approved, **all agent transactions revert** until unpaused.
## All Commands
```bash
npx @agntos/agentwallet keygen # generate BOTH Base + Solana keypairs
npx @agntos/agentwallet keygen --chain base # generate Base keypair only
npx @agntos/agentwallet keygen --chain solana # generate Solana keypair only
npx @agntos/agentwallet create --agent 0x... --agent-sol Sol... # managed wallets (both chains)
npx @agntos/agentwallet create --chain base --agent 0x... # managed wallet (Base only)
npx @agntos/agentwallet create --chain solana --agent PUBKEY # managed wallet (Solana only)
npx @agntos/agentwallet create --agent 0x... --unmanaged # autonomous wallet
npx @agntos/agentwallet status 0xWALLET # wallet info (auto-detects chain)
npx @agntos/agentwallet limits 0xWALLET --daily N --pertx N --reason "..."
npx @agntos/agentwallet token-limit 0xWALLET --token 0x... --token-daily N --token-pertx N
npx @agntos/agentwallet rm-token 0xWALLET --token 0x...
npx @agntos/agentwallet pause 0xWALLET --reason "..."
npx @agntos/agentwallet unpause 0xWALLET
npx @agntos/agentwallet stats
```
All commands support `--json` for machine-readable output.
## Limit Tracking
### Base
| Asset | Tracking | Limits |
|-------|----------|--------|
| **ETH** | → USD via Chainlink oracle | Shared USD daily + per-tx |
| **USDC** | 1:1 USD | Same shared pool as ETH |
| **Other ERC-20s** | Unlimited by default | Owner can set per-token limits |
ETH + USDC share an **aggregated USD daily limit**. Spending $30 in ETH and $15 in USDC = $45 against a $50 limit.
### Solana
| Asset | Tracking | Limits |
|-------|----------|--------|
| **SOL** | USD amount passed by agent | Shared USD daily + per-tx |
| **SPL tokens** | Per-token tracking | Up to 16 tokens with individual limits |
Limits are USD-denominated (6 decimals). Daily spending resets based on `unix_timestamp / 86400`.
## Contract Addresses
### Base Mainnet
| Contract | Address |
|----------|---------|
| Factory | `0x77c2a63BB08b090b46eb612235604dEB8150A4A1` |
| Implementation | `0xEF85c0F9D468632Ff97a36235FC73d70cc19BAbA` |
| Chainlink ETH/USD | `0x71041dddad3595F9CEd3DcCFBe3D1F4b0a16Bb70` |
| USDC | `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` |
### Solana Devnet
| Item | Address |
|------|---------|
| Program | `4XHYgv4fczfAtkKB792yrP57iakR9extKtkigsXCJm5e` |
| IDL Account | `6tEPFHmaaDMH2rth1jPWyvDDxh6GcZhkAEj9kKTCY9k6` |
## Security Model
- **Non-custodial**: your private key never leaves your machine
- **Onchain enforcement**: limits are in the smart contract / Solana program, not the API
- **Gas-sponsored**: free gas on creation, transact immediately
- **Passkey ownership**: human's key in device secure enclave
- Base: verified on-chain via RIP-7212 precompile
- Solana: verified via secp256r1 precompile (P-256)
- **Irrevocable handoff**: after passkey registration, admin loses control
- Base: owner set to zero address
- Solana: owner transferred to dead address `11111111111111111111111111111112`
- **Chainlink oracle** (Base): decentralized price feed, 1-hour staleness check
- **Emergency controls**: owner can pause, withdraw, blacklist at any time
- **Direct contract access**: you can bypass the API entirely and call contracts directlyRelated Skills
find-skills
Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.
filesystem
Advanced filesystem operations for listing files, searching content, batch processing, and directory analysis. Supports recursive search, file type filtering, size analysis, and batch operations like copy/move/delete. Use when you need to: list directory contents, search for files by name or content, analyze directory structures, perform batch file operations, or analyze file sizes and distribution.
Budget & Expense Tracker — AI Agent Financial Command Center
Track every dollar, enforce budgets, spot spending patterns, and build wealth — all through natural conversation with your AI agent.
yt-dlp
A robust CLI wrapper for yt-dlp to download videos, playlists, and audio from YouTube and thousands of other sites. Supports format selection, quality control, metadata embedding, and cookie authentication.
time-checker
Check accurate current time, date, and timezone information for any location worldwide using time.is. Use when the user asks "what time is it in X", "current time in Y", or needs to verify timezone offsets.
pihole-ctl
Manage and monitor local Pi-hole instance. Query FTL database for statistics (blocked ads, top clients) and control service via CLI. Use when user asks "how many ads blocked", "pihole status", or "update gravity".
mermaid-architect
Generate beautiful, hand-drawn Mermaid diagrams with robust syntax (quoted labels, ELK layout). Use this skill when the user asks for "diagram", "flowchart", "sequence diagram", or "visualize this process".
memory-cache
High-performance temporary storage system using Redis. Supports namespaced keys (mema:*), TTL management, and session context caching. Use for: (1) Saving agent state, (2) Caching API results, (3) Sharing data between sub-agents.
mema
Mema's personal brain - SQLite metadata index for documents and Redis short-term context buffer. Use for organizing workspace knowledge paths and managing ephemeral session state.
file-organizer-skill
Organize files in directories by grouping them into folders based on their extensions or date. Includes Dry-Run, Recursive, and Undo capabilities.
media-compress
Compress and convert images and videos using ffmpeg. Use when the user wants to reduce file size, change format, resize, or optimize media files. Handles common formats like JPG, PNG, WebP, MP4, MOV, WebM. Triggers on phrases like "compress image", "compress video", "reduce file size", "convert to webp/mp4", "resize image", "make image smaller", "batch compress", "optimize media".
edge-tts
Text-to-speech conversion using node-edge-tts npm package for generating audio from text. Supports multiple voices, languages, speed adjustment, pitch control, and subtitle generation. Use when: (1) User requests audio/voice output with the "tts" trigger or keyword. (2) Content needs to be spoken rather than read (multitasking, accessibility, driving, cooking). (3) User wants a specific voice, speed, pitch, or format for TTS output.