Skip to content

Commit f6c3105

Browse files
AyushBherwani1998andreolfclaude
authored
Update SKILLs (#22)
* Update skills for CLI v3.2.0 - Bump cliVersion pin to 3.2.0 (metamask-agent-wallet 4.1.0 -> 4.2.0, metamask-agent-workflows 4.0.0 -> 4.1.0) so `mm doctor` no longer reports the skills as incompatible with the current CLI release - Document confirmation prompts on `mm logout` and `mm reset` and the new `--yes` flag for non-interactive use (CLI 3.2.0) - Update QR login notes: `mm login qr` is now available in production (CLI 3.1.0), no longer returns COMING_SOON - Update README CLI version reference Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * update SKILLs --------- Co-authored-by: Francesco Andreoli <francesco.andreoli@consensys.net> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
1 parent 0d5c09a commit f6c3105

24 files changed

Lines changed: 192 additions & 181 deletions

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# MetaMask Agent CLI Skills
22

3-
SKILLs for the MetaMask Agent CLI (`@metamask/agentic-cli` v3.0.0). These skills enable AI agents to authenticate, manage wallets, swap tokens, bridge across chains, trade perpetual futures, and more using the MetaMask Agent CLI.
3+
SKILLs for the MetaMask Agent CLI (`@metamask/agentic-cli` v4.0.0). These skills enable AI agents to authenticate, manage wallets, swap tokens, bridge across chains, trade perpetual futures, and more using the MetaMask Agent CLI.
44

55
## Skills
66

skills/metamask-agent-wallet/SKILL.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ description: Use when the user asks anything about blockchain wallets, transacti
44
license: MIT
55
metadata:
66
author: metamask
7-
version: "4.1.0"
8-
cliVersion: "3.0.0"
7+
version: "5.0.0"
8+
cliVersion: "4.0.0"
99
---
1010

1111
# MetaMask Agentic CLI Skill
@@ -155,7 +155,7 @@ Run these checks before the first CLI operation in a session, in order.
155155

156156
### 1. Version compatibility
157157

158-
This skill is written for `@metamask/agentic-cli` **v3.0.0** (see `cliVersion` in the frontmatter). Check the installed version:
158+
This skill is written for `@metamask/agentic-cli` **v4.0.0** (see `cliVersion` in the frontmatter). Check the installed version:
159159

160160
```bash
161161
mm --version
@@ -169,7 +169,7 @@ npm view @metamask/agentic-cli version
169169

170170
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:
171171

172-
> Version mismatch: installed CLI `<installed>`, this skill is pinned to `3.0.0`, latest release is `<latest>`. Command syntax in this skill may be inaccurate until they are aligned. Update the CLI with `npm install -g @metamask/agentic-cli@latest`, then re-install the skills with `npx skills add metaMask/agent-skills`.
172+
> Version mismatch: installed CLI `<installed>`, this skill is pinned to `4.0.0`, latest release is `<latest>`. Command syntax in this skill may be inaccurate until they are aligned. Update the CLI with `npm install -g @metamask/agentic-cli@latest`, then re-install the skills with `npx skills add metaMask/agent-skills`.
173173
174174
Run this check once per session. Do not block operations on it.
175175

@@ -262,15 +262,15 @@ Flag to the user before proceeding if a signing payload or transaction contains:
262262

263263
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](references/decode.md).
264264

265-
## Server Wallet Async Model
265+
## Async Model
266266

267-
In server-wallet mode, signing and transaction commands return a `pollingId` instead of an immediate result. Handle this consistently:
267+
In both server-wallet and BYOK mode, signing and transaction commands go through a job-polling loop and return a `pollingId`. Handle this consistently:
268268

269269
1. Prefer `--wait` to block until complete.
270270
2. If not using `--wait`, inform the user of the `pollingId` and how to track it:
271271
- `mm wallet requests list`
272272
- `mm wallet requests watch --polling-id <id>`
273-
3. In BYOK mode, results are returned immediately. If the mnemonic is password-encrypted, the user must set `MM_PASSWORD` environment variable to unlock it for the operation.
273+
3. In BYOK mode, the local key signs locally but the operation still produces a pending job and a `pollingId`. If the mnemonic is password-encrypted, the user must set `MM_PASSWORD` environment variable to unlock it for the operation.
274274

275275
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.
276276

skills/metamask-agent-wallet/references/auth.md

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ mm init [--wallet <mode>] [--mode <mode>] [--mnemonic <phrase>] [--password <pas
1717
| Name | Required | Description |
1818
| --- | --- | --- |
1919
| `--wallet` | No | Wallet mode: `server-wallet` or `byok` |
20-
| `--mode` | No | Trading mode: `guard` or `beast` (server-wallet only) |
20+
| `--mode` | No | Trading mode: `guard` or `beast` |
2121
| `--mnemonic` | No | BIP-39 mnemonic phrase for BYOK wallet. Never pass inline. Set `MM_MNEMONIC` env var instead. |
2222
| `--password` | No | Password to encrypt the BYOK mnemonic at rest. Never pass inline. Set `MM_PASSWORD` env var instead. If omitted in interactive mode, the CLI prompts. If omitted in non-interactive mode, mnemonic is stored unencrypted. |
2323

@@ -27,16 +27,17 @@ mm init [--wallet <mode>] [--mode <mode>] [--mnemonic <phrase>] [--password <pas
2727
mm init
2828
mm init --wallet server-wallet --mode beast
2929
export MM_MNEMONIC="word1 word2 ..."
30-
mm init --wallet byok
30+
mm init --wallet byok --mode guard
3131

3232
export MM_MNEMONIC="word1 word2 ..."
3333
export MM_PASSWORD="mypassword"
34-
mm init --wallet byok
34+
mm init --wallet byok --mode guard
3535
```
3636

3737
### Note
3838

3939
- In server-wallet mode, if the account already has a remote EVM wallet, `mm init` syncs it and loads the existing trading mode instead of prompting for a new trading mode or creating a wallet. Use `mm wallet policy get` to view the wallet policy.
40+
- In BYOK mode, `mm init` registers the wallet server-side and prompts for trading mode (`guard` or `beast`). If a trading mode is already set server-side, it is loaded without prompting. The `--mode` flag skips the prompt in non-interactive/scripted use.
4041

4142
## `init show` Command
4243

@@ -86,7 +87,7 @@ mm login --token "cliToken:cliRefreshToken"
8687
### Note
8788

8889
- If already authenticated, the CLI returns `ALREADY_AUTHENTICATED`. Run `mm logout` first, then log in again.
89-
- `mm login qr` (scan with MetaMask Mobile) is available on non-production builds (dev/uat). On production it returns `COMING_SOON`; use browser sign-in instead.
90+
- `mm login qr` (scan with MetaMask Mobile) is available on all environments, including production.
9091
- Pairing codes tolerate `-` and whitespace separators (e.g. `608-225` is equivalent to `608225`).
9192
- Use `mm login browser --no-wait` for non-interactive/CI flows. The command prints a sign-in URL; the user completes login in the browser (Google or Email). Bare `mm login --no-wait` fails without a TTY because no method is selected.
9293
- `--no-wait` is not supported with QR login. Complete authentication later with `mm login --token`.
@@ -115,22 +116,25 @@ mm auth status --toon
115116

116117
## `logout` Command
117118

118-
Sign out and clear auth credentials plus local init state, wallet selection, and stored BYOK mnemonic.
119+
Sign out and clear auth credentials plus local init state, wallet selection, and stored BYOK mnemonic. Prompts for confirmation before signing out.
119120

120121
### Syntax
121122

122123
```bash
123-
mm logout
124+
mm logout [--yes]
124125
```
125126

126127
### Supported Flags
127128

128-
This command does not support flags.
129+
| Name | Required | Description |
130+
| --- | --- | --- |
131+
| `--yes` | No | Skip the confirmation prompt (for non-interactive/scripted use) |
129132

130133
### Example
131134

132135
```bash
133136
mm logout
137+
mm logout --yes
134138
```
135139

136140
## `config get` Command
@@ -204,22 +208,25 @@ mm config set format toon
204208

205209
## `reset` Command
206210

207-
Clear the local CLI session entirely, including auth credentials, wallet state, mnemonic, swap quotes, and persisted config.
211+
Clear the local CLI session entirely, including auth credentials, wallet state, mnemonic, swap quotes, and persisted config. Prompts for confirmation before resetting.
208212

209213
### Syntax
210214

211215
```bash
212-
mm reset
216+
mm reset [--yes]
213217
```
214218

215219
### Supported Flags
216220

217-
This command does not support flags.
221+
| Name | Required | Description |
222+
| --- | --- | --- |
223+
| `--yes` | No | Skip the confirmation prompt (for non-interactive/scripted use) |
218224

219225
### Example
220226

221227
```bash
222228
mm reset
229+
mm reset --yes
223230
```
224231

225232
## `wallet password set` Command
@@ -296,5 +303,5 @@ mm wallet password remove --current "mypassword"
296303

297304
| Mode | Behavior |
298305
| --- | --- |
299-
| `server-wallet` | Keys hosted by MetaMask infrastructure. Signing and transaction operations may return async job handles. |
300-
| `byok` | Bring your own local mnemonic. Operation results are returned immediately. If the mnemonic is encrypted with a password, the CLI requires `--password` or interactive prompt to unlock before any operation that needs the private key. |
306+
| `server-wallet` | Keys hosted by MetaMask infrastructure. Signing and transaction operations return async job handles with a `pollingId`. |
307+
| `byok` | Bring your own local mnemonic. Keys are held locally and signing is done on-device, but operations still go through a job-polling loop and return a `pollingId`. If the mnemonic is encrypted with a password, the CLI requires `MM_PASSWORD` to unlock before any operation that needs the private key. |

skills/metamask-agent-wallet/references/wallet.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ mm wallet create [--chain-namespace <namespace>] [--name <name>] [--trading-mode
1818
| --- | --- | --- |
1919
| `--chain-namespace` | No | Wallet chain namespace: `evm` (EIP-155) (allowed: `evm`) |
2020
| `--name` | No | Display name for the wallet |
21-
| `--trading-mode` | No | `guard` enforces outflow/whitelist policies and blocks malicious transactions. `beast` skips policy checks but still blocks malicious transactions. Only applies to server-wallet mode (allowed: `guard`, `beast`) |
21+
| `--trading-mode` | No | `guard` enforces outflow/whitelist policies and blocks malicious transactions. `beast` skips policy checks but still blocks malicious transactions (allowed: `guard`, `beast`) |
2222
| `--password` | No | Password to unlock the BYOK mnemonic (BYOK mode only) [env: `MM_PASSWORD`] |
2323

2424
### Example

skills/metamask-agent-wallet/workflows/aave-borrow.md

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,18 @@ Use this workflow to borrow assets from Aave V3 against supplied collateral.
1111

1212
## Resolve chain and addresses
1313

14-
If the user doesn't specify a chain, ask. Look up the pool address:
15-
16-
| Chain | Chain ID | Pool address |
17-
| --- | --- | --- |
18-
| Ethereum | 1 | `0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2` |
19-
| Polygon | 137 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
20-
| Arbitrum | 42161 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
21-
| Optimism | 10 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
22-
| Avalanche | 43114 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
23-
| Base | 8453 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
14+
If the user doesn't specify a chain, ask. Fetch the available markets for the chain from the Aave API to get pool addresses:
15+
16+
```bash
17+
curl -s -X POST https://api.v3.aave.com/graphql \
18+
-H 'Content-Type: application/json' \
19+
-d '{"query":"{ markets(request: { chainIds: [<CHAIN_ID>] }) { address reserves { underlyingToken { symbol } } } }"}'
20+
```
21+
22+
Each entry in the response is a separate Aave V3 market. Extract `address` from each — this is the pool contract address.
23+
24+
- If one market is returned, use its `address` as `<POOL_ADDRESS>`.
25+
- If multiple markets are returned, present them to the user (showing the `address` and up to 5 representative token symbols from `reserves[].underlyingToken.symbol`) and ask which market they want to interact with.
2426

2527
## Check collateral
2628

skills/metamask-agent-wallet/workflows/aave-collateral.md

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,18 @@ Use this workflow to enable or disable an asset as collateral on Aave V3.
1111

1212
## Resolve chain and addresses
1313

14-
If the user doesn't specify a chain, ask. Look up the pool address:
15-
16-
| Chain | Chain ID | Pool address |
17-
| --- | --- | --- |
18-
| Ethereum | 1 | `0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2` |
19-
| Polygon | 137 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
20-
| Arbitrum | 42161 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
21-
| Optimism | 10 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
22-
| Avalanche | 43114 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
23-
| Base | 8453 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
14+
If the user doesn't specify a chain, ask. Fetch the available markets for the chain from the Aave API to get pool addresses:
15+
16+
```bash
17+
curl -s -X POST https://api.v3.aave.com/graphql \
18+
-H 'Content-Type: application/json' \
19+
-d '{"query":"{ markets(request: { chainIds: [<CHAIN_ID>] }) { address reserves { underlyingToken { symbol } } } }"}'
20+
```
21+
22+
Each entry in the response is a separate Aave V3 market. Extract `address` from each — this is the pool contract address.
23+
24+
- If one market is returned, use its `address` as `<POOL_ADDRESS>`.
25+
- If multiple markets are returned, present them to the user (showing the `address` and up to 5 representative token symbols from `reserves[].underlyingToken.symbol`) and ask which market they want to interact with.
2426

2527
## Check status
2628

skills/metamask-agent-wallet/workflows/aave-markets.md

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,30 +10,23 @@ Use this workflow to discover available Aave V3 tokens, supply/borrow rates, and
1010

1111
## Resolve chain
1212

13-
If the user doesn't specify a chain, ask. Aave V3 is deployed on these chains:
14-
15-
| Chain | Chain ID |
16-
| --- | --- |
17-
| Ethereum | 1 |
18-
| Polygon | 137 |
19-
| Arbitrum | 42161 |
20-
| Optimism | 10 |
21-
| Avalanche | 43114 |
22-
| Base | 8453 |
13+
If the user doesn't specify a chain, ask.
2314

2415
## Query available markets
2516

2617
```bash
2718
curl -s -X POST https://api.v3.aave.com/graphql \
2819
-H 'Content-Type: application/json' \
2920
-d '{
30-
"query": "{ markets(request: { chainIds: [<CHAIN_ID>] }) { reserves { underlyingToken { symbol decimals } supplyInfo { apy { formatted } } borrowInfo { apy { formatted } availableLiquidity { amount { value } usd } borrowCapReached } isFrozen isPaused } } }"
21+
"query": "{ markets(request: { chainIds: [<CHAIN_ID>] }) { address reserves { underlyingToken { symbol decimals } supplyInfo { apy { formatted } } borrowInfo { apy { formatted } availableLiquidity { amount { value } usd } borrowCapReached } isFrozen isPaused } } }"
3122
}'
3223
```
3324

25+
The response returns one entry per market. Each entry has an `address` (the pool contract address) and a `reserves` array.
26+
3427
## Present results
3528

36-
Filter out reserves where `isFrozen` or `isPaused` is `true`. For each active reserve, show:
29+
Group reserves by market `address`. Within each market, filter out reserves where `isFrozen` or `isPaused` is `true`. For each active reserve, show:
3730

3831
- Token symbol and decimals (`underlyingToken.symbol`, `underlyingToken.decimals`)
3932
- Supply APY (`supplyInfo.apy.formatted`)

skills/metamask-agent-wallet/workflows/aave-positions.md

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,29 @@ Get the wallet address:
1616
mm wallet address
1717
```
1818

19-
If the user doesn't specify a chain, ask. Aave V3 is deployed on these chains:
19+
If the user doesn't specify a chain, ask. Fetch all markets for the chain to get pool addresses:
2020

21-
| Chain | Chain ID | Pool address |
22-
| --- | --- | --- |
23-
| Ethereum | 1 | `0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2` |
24-
| Polygon | 137 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
25-
| Arbitrum | 42161 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
26-
| Optimism | 10 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
27-
| Avalanche | 43114 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
28-
| Base | 8453 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
21+
```bash
22+
curl -s -X POST https://api.v3.aave.com/graphql \
23+
-H 'Content-Type: application/json' \
24+
-d '{"query":"{ markets(request: { chainIds: [<CHAIN_ID>] }) { address } }"}'
25+
```
26+
27+
Collect all returned `address` values as `<POOL_ADDRESSES>`.
2928

3029
## Query positions
3130

32-
Query supply and borrow positions in a single request:
31+
Query supply and borrow positions across all markets in a single request. Build the `markets` array from all addresses returned above:
3332

3433
```bash
3534
curl -s -X POST https://api.v3.aave.com/graphql \
3635
-H 'Content-Type: application/json' \
3736
-d '{
38-
"query": "{ userSupplies(request: { markets: [{ address: \"<POOL_ADDRESS>\", chainId: <CHAIN_ID> }], user: \"<WALLET_ADDRESS>\" }) { currency { symbol decimals } balance { amount { value } usd } apy { formatted } isCollateral } userBorrows(request: { markets: [{ address: \"<POOL_ADDRESS>\", chainId: <CHAIN_ID> }], user: \"<WALLET_ADDRESS>\" }) { currency { symbol decimals } debt { amount { value } usd } apy { formatted } } }"
37+
"query": "{ userSupplies(request: { markets: [{ address: \"<POOL_ADDRESS_1>\", chainId: <CHAIN_ID> }, { address: \"<POOL_ADDRESS_2>\", chainId: <CHAIN_ID> }], user: \"<WALLET_ADDRESS>\" }) { currency { symbol decimals } balance { amount { value } usd } apy { formatted } isCollateral marketAddress } userBorrows(request: { markets: [{ address: \"<POOL_ADDRESS_1>\", chainId: <CHAIN_ID> }, { address: \"<POOL_ADDRESS_2>\", chainId: <CHAIN_ID> }], user: \"<WALLET_ADDRESS>\" }) { currency { symbol decimals } debt { amount { value } usd } apy { formatted } marketAddress } }"
3938
}'
4039
```
4140

42-
The response contains both `userSupplies` and `userBorrows` arrays.
41+
Include one `{ address, chainId }` entry per market returned by the previous query. The response contains both `userSupplies` and `userBorrows` arrays spanning all markets.
4342

4443
## Health factor preview
4544

skills/metamask-agent-wallet/workflows/aave-repay.md

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,18 @@ Use this workflow to repay borrowed assets on Aave V3.
1111

1212
## Resolve chain and addresses
1313

14-
If the user doesn't specify a chain, ask. Look up the pool address:
15-
16-
| Chain | Chain ID | Pool address |
17-
| --- | --- | --- |
18-
| Ethereum | 1 | `0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2` |
19-
| Polygon | 137 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
20-
| Arbitrum | 42161 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
21-
| Optimism | 10 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
22-
| Avalanche | 43114 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
23-
| Base | 8453 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
14+
If the user doesn't specify a chain, ask. Fetch the available markets for the chain from the Aave API to get pool addresses:
15+
16+
```bash
17+
curl -s -X POST https://api.v3.aave.com/graphql \
18+
-H 'Content-Type: application/json' \
19+
-d '{"query":"{ markets(request: { chainIds: [<CHAIN_ID>] }) { address reserves { underlyingToken { symbol } } } }"}'
20+
```
21+
22+
Each entry in the response is a separate Aave V3 market. Extract `address` from each — this is the pool contract address.
23+
24+
- If one market is returned, use its `address` as `<POOL_ADDRESS>`.
25+
- If multiple markets are returned, present them to the user (showing the `address` and up to 5 representative token symbols from `reserves[].underlyingToken.symbol`) and ask which market they want to interact with.
2426

2527
## Check debt
2628

skills/metamask-agent-wallet/workflows/aave-supply.md

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,18 @@ Use this workflow to supply (deposit) assets into Aave V3 and earn interest.
1111

1212
## Resolve chain and addresses
1313

14-
If the user doesn't specify a chain, ask. Look up the pool address:
15-
16-
| Chain | Chain ID | Pool address |
17-
| --- | --- | --- |
18-
| Ethereum | 1 | `0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2` |
19-
| Polygon | 137 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
20-
| Arbitrum | 42161 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
21-
| Optimism | 10 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
22-
| Avalanche | 43114 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
23-
| Base | 8453 | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
14+
If the user doesn't specify a chain, ask. Fetch the available markets for the chain from the Aave API to get pool addresses:
15+
16+
```bash
17+
curl -s -X POST https://api.v3.aave.com/graphql \
18+
-H 'Content-Type: application/json' \
19+
-d '{"query":"{ markets(request: { chainIds: [<CHAIN_ID>] }) { address reserves { underlyingToken { symbol } } } }"}'
20+
```
21+
22+
Each entry in the response is a separate Aave V3 market. Extract `address` from each — this is the pool contract address.
23+
24+
- If one market is returned, use its `address` as `<POOL_ADDRESS>`.
25+
- If multiple markets are returned, present them to the user (showing the `address` and up to 5 representative token symbols from `reserves[].underlyingToken.symbol`) and ask which market they want to interact with.
2426

2527
Resolve the asset's contract address on the target chain. If the user provides a symbol instead of an address, run `mm token list search --query <SYMBOL> --chain <CHAIN_ID>`.
2628

0 commit comments

Comments
 (0)