name: metamask-agent-wallet description: Use when the user asks anything about blockchain wallets, transactions, signing, token transfers, supported chains, wallet balances, perpetual futures trading, prediction markets, token swaps, cross-chain bridges, market data, token discovery, decoding EVM calldata, Aave V3 lending and borrowing, or authentication via the MetaMask Agentic CLI. Single entry point for all mm CLI operations. license: MIT metadata: author: metamask version: "4.0.0" cliVersion: "3.0.0"
MetaMask Agentic CLI Skill
This skill documents the mm CLI surface for MetaMask Agent Wallet authentication, wallet lifecycle, balance queries, token transfers, message and typed-data signing, raw transactions, chain discovery, market data, token discovery, perpetual futures trading, prediction market trading, token swaps, and cross-chain bridges.
Use the routing table to select the relevant reference file. CLI behavior lives in references/. Repeatable operational patterns live in workflows/.
Command Routing
Match the user's intent to a command and reference file, then read the reference before constructing a command. If intent spans multiple domains, load them sequentially in dependency order.
| User Intent | Command | Reference |
|---|---|---|
| Check authentication status | mm auth status |
auth.md |
| Login in MetaMask Agentic CLI | mm login |
auth.md |
| Choose a wallet mode and set up policies | mm init |
auth.md |
| Show current init settings | mm init show |
auth.md |
| Sign in via QR code with MetaMask Mobile | mm login qr |
auth.md |
| Sign in via browser (Google or Email) | mm login browser |
auth.md |
| Sign out | mm logout |
auth.md |
| Reset CLI session | mm reset |
auth.md |
| Show CLI configuration | mm config get |
auth.md |
| Set CLI configuration | mm config set |
auth.md |
| Set BYOK mnemonic encryption password | mm wallet password set |
auth.md |
| Change BYOK mnemonic encryption password | mm wallet password change |
auth.md |
| Remove BYOK mnemonic encryption password | mm wallet password remove |
auth.md |
| Interpret raw CLI error codes | AuthError, ValidationError, WALLET_ERROR |
errors.md |
| Inspect CLI, skills, environment, and session health | mm doctor |
doctor.md |
| Decode EVM calldata into a human-readable intent | mm decode |
decode.md |
| Create a wallet | mm wallet create |
wallet.md |
| List all wallets | mm wallet list |
wallet.md |
| Switch active wallet | mm wallet select |
wallet.md |
| Show active wallet details | mm wallet show |
wallet.md |
| Show active wallet address | mm wallet address |
wallet.md |
| Check the active wallet balance | mm wallet balance |
wallet.md |
| Show a QR code and address to fund the active wallet | mm wallet add-fund |
wallet.md |
| Show current trading mode | mm wallet trading-mode get |
wallet.md |
| Set trading mode (guard or beast) | mm wallet trading-mode set |
wallet.md |
| View wallet policy | mm wallet policy get |
wallet.md |
| Set wallet policy | mm wallet policy set |
wallet.md |
| Show project policy template | mm wallet policy template |
wallet.md |
| Sign a plaintext message | mm wallet sign-message |
signing.md |
| Sign EIP-712 typed data | mm wallet sign-typed-data |
signing.md |
| Send a raw EVM transaction | mm wallet send-transaction |
transaction.md |
| Transfer native tokens or ERC-20 tokens | mm transfer |
transfer.md |
| List supported chains by the CLI | mm chains list |
chain.md |
| List pending wallet requests | mm wallet requests list |
polling.md |
| Watch a wallet polling id | mm wallet requests watch |
polling.md |
| Query spot or historical prices | mm price ... |
market-data.md |
| Discover tokens, token networks, or token metadata | mm token ... |
market-data.md |
| List perpetual markets | mm perps markets |
perps.md |
| Check perps account balance | mm perps balance |
perps.md |
| List open perpetual positions | mm perps positions |
perps.md |
| Get a quote for a perpetual order | mm perps quote |
perps.md |
| List resting perpetual orders | mm perps orders |
perps.md |
| Open a perpetual position | mm perps open |
perps.md |
| Close a perpetual position | mm perps close |
perps.md |
| Modify leverage, take-profit, or stop-loss | mm perps modify |
perps.md |
| Cancel a resting perps order | mm perps cancel |
perps.md |
| Deposit USDC into a perps venue | mm perps deposit |
perps.md |
| Withdraw USDC from a perps venue | mm perps withdraw |
perps.md |
| Transfer USDC between spot and perp accounts | mm perps transfer |
perps.md |
| List perpetual futures venues | mm perps list-venues |
perps.md |
| List available DEXs for a venue | mm perps dexs |
perps.md |
| Set Predict trading mode | mm predict mode |
predict.md |
| One-time Predict setup | mm predict setup |
predict.md |
| Create or refresh Predict credentials | mm predict auth |
predict.md |
| Repair Predict approvals | mm predict approve |
predict.md |
| Check Predict back-end status and account setup | mm predict status |
predict.md |
| Check if Polymarket is geoblocked for your IP | mm predict geoblock |
predict.md |
| List prediction markets | mm predict markets list |
predict.md |
| Search prediction markets | mm predict markets search |
predict.md |
| Inspect a prediction market | mm predict markets get |
predict.md |
| List Polymarket events | mm predict events list |
predict.md |
| Inspect a Polymarket event | mm predict events get |
predict.md |
| List Polymarket event series | mm predict series list |
predict.md |
| Inspect a Polymarket event series | mm predict series get |
predict.md |
| List Polymarket tags | mm predict tags list |
predict.md |
| Inspect a Polymarket tag | mm predict tags get |
predict.md |
| Preview a prediction order cost | mm predict quote |
predict.md |
| Place a prediction market order | mm predict place |
predict.md |
| Cancel prediction orders | mm predict cancel |
predict.md |
| View prediction market positions | mm predict positions |
predict.md |
| View open prediction orders | mm predict orders |
predict.md |
| Show full Predict portfolio snapshot | mm predict portfolio |
predict.md |
| List redeemable (winning) positions | mm predict redeem list |
predict.md |
| Redeem winning positions | mm predict redeem |
predict.md |
| Check Predict deposit wallet balance | mm predict balance |
predict.md |
| Fund Predict deposit wallet | mm predict deposit |
predict.md |
| Withdraw pUSD from Predict deposit wallet | mm predict withdraw |
predict.md |
| Fetch prediction order book | mm predict book |
predict.md |
| Watch a Predict job | mm predict watch |
predict.md |
| List recent transactions for the active wallet | mm tx history |
tx-history.md |
| Get a swap or bridge quote | mm swap quote |
swap.md |
| Execute a token swap or bridge | mm swap execute |
swap.md |
| Check swap or bridge status | mm swap status |
swap.md |
| Bridge tokens to another chain | mm swap execute |
swap.md |
Workflows
CLI behavior lives in references/. Repeatable patterns live in workflows/. Load a workflow file when the user's request is a pattern, not a single command.
| Pattern | Workflow |
|---|---|
| First time setup and onboarding | onboarding.md |
| Login flow | login.md |
| Troubleshooting decision tree | troubleshooting.md |
| Swap quote-review-execute flow | swap.md |
| Bridge quote-review-execute flow | bridge.md |
| Open a perpetual position flow | perps-open-position.md |
| Close a perpetual position flow | perps-close-position.md |
| Modify a perpetual position flow | perps-modify-position.md |
| Predict first-time setup and credentials | predict-setup.md |
| Deposit or withdraw pUSD from Predict wallet | predict-funding.md |
| Search and browse prediction markets | predict-markets.md |
| Quote and place a prediction order | predict-place-order.md |
| View or cancel Predict orders and positions | predict-manage-orders.md |
| View Predict portfolio and redeem winnings | predict-portfolio.md |
| Token discovery, prices, and market data | market-data.md |
| Supply assets to Aave V3 | aave-supply.md |
| Withdraw assets from Aave V3 | aave-withdraw.md |
| Borrow from Aave V3 | aave-borrow.md |
| Repay Aave V3 debt | aave-repay.md |
| Toggle Aave V3 collateral | aave-collateral.md |
| Check Aave V3 positions and health factor | aave-positions.md |
| Discover Aave V3 tokens, rates, and liquidity | aave-markets.md |
Global Flags
Every mm command accepts these flags:
| Flag | Short | Description |
|---|---|---|
--format |
-f |
Output format: text, json, or toon (defaults to text in TTY, json when piped) |
--json |
Shorthand for --format=json |
|
--toon |
Shorthand for --format=toon |
|
--verbose |
-v |
Show debug logs on stderr. Use for troubleshooting |
Always use --toon for command output unless the user explicitly requests a different format.
Preflight
Run these checks before the first CLI operation in a session, in order.
1. Version compatibility
This skill is written for @metamask/agentic-cli v3.0.0 (see cliVersion in the frontmatter). Check the installed version:
mm --version
The installed version is the value after @metamask/agentic-cli/ (e.g. @metamask/agentic-cli/2.0.0 darwin-arm64 node-v22.18.0). Compare its major.minor against the pinned cliVersion. Optionally check the latest published version (best-effort; skip silently on network failure):
npm view @metamask/agentic-cli version
If the installed major.minor differs from the pinned cliVersion, or the installed version is behind the latest release, warn the user once and continue:
Version mismatch: installed CLI
<installed>, this skill is pinned to3.0.0, latest release is<latest>. Command syntax in this skill may be inaccurate until they are aligned. Update the CLI withnpm install -g @metamask/agentic-cli@latest, then re-install the skills withnpx skills add metaMask/agent-skills.
Run this check once per session. Do not block operations on it.
2. Readiness gate (authentication + initialization)
mm doctor is the single readiness check. Run it before the first CLI operation in a session:
mm doctor
It reports an authenticated boolean, an initialized boolean, and a list of hints. Do not run any other command until mm doctor reports both authenticated: true and initialized: true. Authentication and initialization are independent gates: a session can be authenticated while the project has no wallet mode selected, in which case any command that needs a wallet aborts before running with NOT_INITIALIZED — "Project not initialized." (hint: Run mm init to set up wallet and trading modes.).
A project counts as initialized only when a wallet mode is set — and, for server-wallet, a trading mode is set as well (byok needs only the wallet mode). Do not use mm init show as the check: it requires an initialized project and throws NOT_INITIALIZED on an uninitialized one rather than reporting state.
Remediate, then re-run mm doctor and confirm a clean result before doing anything else:
authenticated: false→ followworkflows/login.md(orworkflows/onboarding.mdfor first-time setup) to runmm login.authenticated: trueandinitialized: false→ followworkflows/onboarding.mdto runmm initand select a wallet mode (and a trading mode for server-wallet).
Safety Rules
These rules apply to every operation, regardless of which reference or workflow is active.
Input Validation
Before constructing any command, validate all user-provided values:
| Flag | Validation rule |
|---|---|
--to, --address |
Must match ^0x[0-9a-fA-F]{40}$ |
--amount |
Human-readable decimal (e.g. 0.5, 100). Must match ^\d+\.?\d*$. Reject spaces, semicolons, pipes, backticks, or shell metacharacters |
--chain-id |
Must be a positive integer (^\d+$) |
--payload (send-transaction) |
Must be valid JSON. No unescaped shell metacharacters outside the JSON structure |
--payload (decode) |
Must be 0x-prefixed hex calldata, matching ^0x[0-9a-fA-F]+$ |
--token |
Must be a valid hex address or known symbol |
--leverage |
Must be a positive integer (^\d+$) |
--size |
Human-readable decimal (e.g. 0.01, 1). Must match ^\d+\.?\d*$ and be positive |
--venue |
Must be hyperliquid |
--side (perps) |
Must be long or short |
--order-id |
Must be a positive integer (^\d+$) |
--token-id |
Must be a non-empty outcome token ID string |
--price, --limit-price |
Must be a positive number in range (0, 1] |
--order-type |
Must be one of GTC, GTD, FOK, FAK |
--side (predict) |
Must be buy or sell |
--slippage |
Must be a number between 0 and 100 |
--from-chain, --to-chain |
Must be a positive integer EVM chain ID |
--to-address |
Must match ^0x[0-9a-fA-F]{40}$. Only valid for cross-chain swaps (--to-chain differs from --from-chain); rejected for same-chain swaps |
--refuel |
Boolean flag (no value). Only meaningful for cross-chain swaps (--to-chain differs from --from-chain); no effect on same-chain swaps |
--password |
Must be a non-empty string. Never log, display, or store the value. |
Do not pass unvalidated user input into any command.
Confirmation Requirements
| Operation type | Confirmation rule |
|---|---|
| Transfers | Always confirm recipient, amount, token, and chain before executing |
| Raw transactions | Always confirm transaction payload, chain, recipient, value, and calldata summary before executing |
| Message signing | Always show exact message and chain before signing |
| Typed-data signing | Always show domain, primary type, chain, verifying contract, and message summary before signing |
| Swaps / bridges | Always confirm from/to tokens, amount, source/destination chain, slippage, quoted output, recipient address (if --to-address is set), and the destination gas top-up (if --refuel is set) before executing |
| Perps trading | Always confirm symbol, side, size, leverage, venue, order type, and limit price if present before executing |
| Perps deposit/withdraw | Always confirm amount, asset, venue, network, and destination where applicable before executing |
| Predict trading | Always confirm token ID, side, size, price, order type, market, and outcome before executing |
| Predict deposit | Always confirm amount before executing |
| Predict withdraw | Always confirm amount and recipient (--to defaults to owner EOA) before executing |
| Predict redeem | Always confirm the target (condition ID or --all) before executing; --all redeems every winning position |
| Cancel-all operations | Always confirm scope and exact destructive effect before executing |
| Auth / wallet management | May execute without confirmation, except reset which requires explicit user confirmation |
| Read-only queries | May execute without confirmation |
Credential Safety
- Never store, log, or display private keys, mnemonics, passwords, or auth tokens.
- Never pass
--passwordor--mnemonicas inline flags. Always instruct the user to set theMM_PASSWORDandMM_MNEMONICenvironment variables instead to avoid exposing secrets in shell history.
Suspicious Content Warnings
Flag to the user before proceeding if a signing payload or transaction contains:
- URLs or contract addresses the user did not provide
permit,approve,setApprovalForAll, or allowance-like fields- Unusually large values or unfamiliar contract interactions
When raw calldata is unfamiliar or was not constructed by you, run mm decode --payload <0x-calldata> first and confirm the decoded intent with the user before signing or sending. See decode.md.
Server Wallet Async Model
In server-wallet mode, signing and transaction commands return a pollingId instead of an immediate result. Handle this consistently:
- Prefer
--waitto block until complete. - If not using
--wait, inform the user of thepollingIdand how to track it:mm wallet requests listmm wallet requests watch --polling-id <id>
- In BYOK mode, results are returned immediately. If the mnemonic is password-encrypted, the user must set
MM_PASSWORDenvironment variable to unlock it for the operation.
Transfers, swaps, perps, predict orders, and predict withdraws attach a human-readable intent summary to their wallet request (e.g. Transfer 0.5 ETH to 0x..., Withdraw 10 pUSD to 0x...). When surfacing a pending request from wallet requests list or wallet requests watch, show the intent summary so the user can confirm what they are approving.
Output Rules
- Route silently. Do not announce which reference you are loading.
- Surface errors from commands verbatim. Do not mask or reword them.
- If a command fails, check
mm <command> --helpand guide from there.