Ethereum EIP-4337 smart contract wallet designed for AI agents. Use this skill whenever the user wants to manage Ethereum accounts, check balances, send ETH/tokens, swap tokens on Uniswap, manage 2FA security hooks, or do anything with their Elytro wallet. Supports gasless transactions via sponsorship. For token swaps, combines with the Uniswap swap-planner…
Independent GitHub snapshot · Automated classification · Original documentation governs
name: elytro
description: Ethereum EIP-4337 smart contract wallet designed for AI agents. Use this skill whenever the user wants to manage Ethereum accounts, check balances, send ETH/tokens, swap tokens on Uniswap, manage 2FA security hooks, or do anything with their Elytro wallet. Supports gasless transactions via sponsorship. For token swaps, combines with the Uniswap swap-planner skill.
homepage: https://elytro.com
metadata: {"clawdbot":{"emoji":"💎","requires":{"bins":["elytro"],"node":">=24.0.0"},"install":[{"id":"npm","kind":"npm","package":"@elytro/cli","bins":["elytro"],"label":"Install Elytro CLI (npm)"}]}}
Elytro Wallet
Ethereum EIP-4337 smart contract wallet for agents. Supports gasless transactions, 2FA security hooks, and email OTP.
Never guess on-chain data. Always run the appropriate elytro query command to fetch balances, transaction status, token holdings, etc. Do NOT infer or assume values.
Always ask the user before confirming interactive prompts using Inline Buttons. When any command outputs (y/N) or similar, STOP and present the user with Telegram Inline Buttons for confirmation (e.g., "Confirm", "Cancel" or "Approve", "Reject"). Example: elytro tx send shows "Sign and send this transaction? (y/N)" — pause and send an Inline Button message to the user with callback options instead of asking for text input. ALL confirmations must use Inline Buttons, never text input.
Use Inline Buttons for all list displays. Whenever displaying lists (account list, token list, balance details, transaction history, etc.), render each item as a clickable Inline Button with callback_data pointing to that item's action. Example: for account selection, create buttons like [{"text": "myWallet (0x...)", "callback_data": "account_select_myWallet"}] instead of showing plain text and asking the user to type.
Chain IDs are hex or decimal. Common values: Ethereum mainnet=1, Sepolia testnet=0xaa36a7 (=11155111), Base=8453, Arbitrum=42161.
value in tx specs is always in ETH, not wei.
Smart accounts must be deployed before sending transactions. Check elytro account info <account> → "Deployed: Yes" before sending. If not deployed, run elytro account activate <account> first.
Use alias or address interchangeably wherever <account> appears.
Inline Button Convention for Other Agents: All agents reading this skill must adhere to the following callback_data naming scheme for consistency:
This ensures all agents can parse and understand callbacks across the entire Elytro workflow ecosystem.
Default Menu on Ambiguous Intent. When the user opens or mentions the wallet without a specific action (e.g., "打开钱包", "open wallet", "show elytro", "check my wallet"), do NOT ask what they want. Instead, immediately display the Main Menu as Inline Buttons. Each button leads to a sub-menu or action flow as defined in the Navigation Flow Map below.
Navigation Flow Map (Inline Button UI)
All navigation screens below must be rendered using Inline Buttons. When the user clicks a button, the agent proceeds to the corresponding sub-screen. Every sub-screen includes a "⬅️ Back" button to return to the parent menu.
Level 0 — Main Menu (default entry point)
Trigger: user says anything ambiguous like "open wallet", "打开钱包", "elytro", "我的钱包", etc.
Agent must first run elytro account list silently in the background, then render:
menu_balance → If multiple accounts, show account selector first (same as menu_accounts but callback leads to balance view). If only one account, go straight to balance display with action buttons (as defined in the "Query" section below).
menu_send → If multiple accounts, show account selector (callback: action_send_from_<alias>). Then prompt for recipient address and amount using the confirmation Inline Button flow (tx summary → Approve / Reject / Simulate).
menu_swap → Invoke the Uniswap swap-planner skill. If multiple accounts, show account selector first.
menu_security → Run elytro security status, display:
Always show the Main Menu when user intent is ambiguous. Do not ask "what do you want to do?" — show the menu.
Every sub-screen must include a "⬅️ Back" button (callback_data: parent menu ID, e.g., menu_main, menu_accounts).
Fetching real data is mandatory before rendering. Run the corresponding elytro CLI command to get live data (accounts, balances, security status, config), then render buttons with actual values. Never use placeholder data in production.
Multi-step flows (e.g., Send ETH): guide the user through each step using successive Inline Button screens: account selection → recipient input → amount input → tx summary with Approve/Reject/Simulate.
Callback routing: parse the callback_data prefix to determine the handler:
menu_* → render the corresponding sub-menu
account_select_* → fetch and show account details
token_select_* → fetch and show token details
action_* → execute the corresponding action or start an action flow
# 1. Initialize wallet (once per machine)
elytro init
# 2. Create a smart account on a chain
elytro account create --chain <chainId> --alias <alias>
# Example: elytro account create --chain 0xaa36a7 --alias myWallet
# 3. Deploy the smart contract on-chain (gasless by default)
elytro account activate <alias-or-address>
Account Management
elytro account list # List all accounts
elytro account list --chain <chainId> # Filter by chain
elytro account info <account> # On-chain details (balance, deployed status, etc.)
elytro account switch <account> # Set active account
Inline Button Display for Account List:
After running elytro account list, render results as Inline Buttons instead of plain text. Example:
Upon callback (e.g., account_select_myWallet), fetch account details via elytro account info and present next actions (send, check balance, swap, etc.) also as Inline Buttons.
Query (read-only, no confirmation needed)
# ETH balance — ALWAYS run this; never guess the balance
elytro query balance <account>
# ERC-20 token balance
elytro query balance --token <tokenAddress> <account>
# All ERC-20 holdings
elytro query tokens <account>
# Transaction status by hash
elytro query tx <hash>
# Current chain info
elytro query chain
Inline Button Display for Balance & Token Lists:
When displaying balances or token holdings, format as Inline Buttons for quick action:
Elytro does not have a built-in swap command. To swap tokens, use the Uniswap swap-planner skill to generate a deep link, then open it — the user connects their Elytro wallet inside the Uniswap interface to confirm.
Open the link in the browser (open <url> on macOS, xdg-open <url> on Linux).
User connects their Elytro wallet in the Uniswap interface (WalletConnect or injected provider).
User reviews and confirms the swap inside Uniswap — do NOT auto-confirm on their behalf.
Rules for swaps
Never guess swap output amounts. The swap-planner skill fetches live prices via DexScreener/DefiLlama — always use it.
Always verify token addresses before building the link. Scam tokens often mimic legitimate names.
Disclose slippage and liquidity risk surfaced by the swap-planner skill before opening the URL.
Elytro is ERC-4337 compatible with the Uniswap interface — no special configuration needed.
Example
# 1. User: "Swap 0.5 ETH for USDC on Arbitrum"
# 2. Invoke swap-planner — it resolves addresses, fetches price, generates link
# 3. Open link
open "https://app.uniswap.org/swap?chain=arbitrum&inputCurrency=NATIVE&outputCurrency=0xaf88d065e77c8cC2239327C5EDb3A432268e5831&value=0.5&field=INPUT"
# 4. Tell user: connect Elytro wallet in the Uniswap tab, review, and confirm.
elytro config show # Show current endpoint config
elytro config set alchemy-key <apiKey> # Set Alchemy API key
elytro config set pimlico-key <apiKey> # Set Pimlico API key
elytro config remove alchemy-key # Remove key, revert to public endpoint
elytro config remove pimlico-key
Never auto-confirm. Always surface the transaction summary and wait for explicit Inline Button approval.
Callback handling: Upon receiving a callback (e.g., tx_approve), execute the corresponding action and report the result via another message (or update the existing message with the result).
Audit logging: Log every confirmation decision (approve/reject/simulate) with timestamp, callback_data, and user ID for compliance and troubleshooting.
Agent Implementation Checklist
When implementing Elytro wallet interactions, ensure:
Ambiguous intent detection: When user says "open wallet", "打开钱包", "elytro", etc., immediately show Main Menu (Level 0) without asking.
Real-time data fetching: Always run elytro account list, elytro query balance, etc. before rendering UI. Never use placeholder data.
Inline Button rendering: All menus, lists, confirmations, and action flows use Telegram Inline Buttons exclusively.
Back button on all sub-menus: Every screen below Main Menu includes a "⬅️ Back" button.
Callback routing: Parse callback_data prefixes (menu_, account_select_, action_, tx_, confirm_*) and route to correct handler.
Multi-step action flows: For Send and Swap, guide user through account → input → summary → approval steps using Inline Buttons.
Important: If you are another AI agent tasked with Elytro wallet operations:
Always use Inline Buttons for confirmations and list displays — never fall back to text input prompts.
Follow the callback_data naming convention above — this ensures consistency across all agents using Elytro.
When displaying lists (accounts, tokens, transactions, etc.), render each item as a clickable button with the appropriate callback format.
Upon receiving a callback, parse the callback_data and execute the corresponding action (e.g., confirm_yes → proceed with tx, account_select_<alias> → fetch account details).
Log all callback events for audit purposes: timestamp, user_id, callback_data, action taken, result.
Update this section if you introduce new callback patterns — keep the standard extensible and well-documented for future agents.
Notes
Elytro uses EIP-4337 (Account Abstraction) — transactions are submitted as UserOps via a Bundler, not regular EOA transactions.
Sponsored transactions are gasless by default when a paymaster is available.
The wallet data directory is ~/.elytro.
--chain accepts both hex (0xaa36a7) and decimal (11155111) chain IDs.
data field in tx spec must be a valid hex string; use 0x for plain ETH transfers.
Inline Button usage is mandatory for all user-facing confirmations and list displays in Elytro workflows. This ensures a consistent, modern UX across all agents and reduces friction in high-stakes wallet operations.