grimoire-pendle▌
franalgaba/grimoire · updated Apr 8, 2026
Fetch Pendle SDK metadata and validate routing configuration via CLI commands.
- ›Query supported chains, aggregators, markets, assets, and market token details from Pendle's hosted API
- ›Six command categories: info , chains , supported-aggregators , markets , assets , and market-tokens with filtering by chain, activity status, and asset type
- ›Supports JSON and table output formats; configurable API base URL via flag or environment variable
- ›Preflight validation available through grimoi
Grimoire Pendle Skill
Use this skill to inspect Pendle metadata and preflight Pendle routing configuration before running spells.
Preferred invocations:
grimoire venue pendle ...npx -y @grimoirelabs/cli venue pendle ...(no-install)bun run packages/cli/src/index.ts venue pendle ...(repo-local)grimoire-pendle ...(direct binary from@grimoirelabs/venues)
Recommended preflight:
grimoire venue doctor --adapter pendle --chain 1 --rpc-url <rpc> --json
Commands
grimoire venue pendle info [--base-url <url>] [--format <auto|json|table>]grimoire venue pendle chains [--base-url <url>] [--format <auto|json|table>]grimoire venue pendle supported-aggregators --chain <id> [--base-url <url>] [--format <auto|json|table>]grimoire venue pendle markets [--chain <id>] [--active <true|false>] [--base-url <url>] [--format <auto|json|table>]grimoire venue pendle assets [--chain <id>] [--type <PT|YT|LP|SY>] [--base-url <url>] [--format <auto|json|table>]grimoire venue pendle market-tokens --chain <id> --market <address> [--base-url <url>] [--format <auto|json|table>]
Examples
grimoire venue pendle info --format table
grimoire venue pendle chains
grimoire venue pendle supported-aggregators --chain 1 --format json
grimoire venue pendle markets --chain 1 --active true --format table
grimoire venue pendle assets --chain 8453 --type PT --format table
grimoire venue pendle market-tokens --chain 8453 --market 0x... --format json
Authoring Workflow
Pendle requires a market-first approach. Do NOT write a Pendle spell without first querying available markets.
-
Query markets for the target chain and underlying:
grimoire venue pendle markets --chain 1 --active true --format json -
Pick a market — note its address and expiry. Each market has specific PT/YT/SY tokens.
-
Query market tokens to get the exact token addresses:
grimoire venue pendle market-tokens --chain 1 --market 0x... --format json -
Write the spell using token addresses from step 3:
pendle.add_liquidity(0x<SY_address>, params.amount) with (max_slippage=100)
Common mistakes
pendle.deposit(USDC, ...)— Pendle has nodepositaction. Useadd_liquidity,mint_py,mint_sy, orswap.- Using token symbols without addresses — PT/YT/SY tokens are auto-resolved via the Pendle API, but standard tokens like USDC need raw amounts in the token's smallest unit.
- Missing
enable_aggregator— Some routes require an aggregator. If no route is found, retry withenable_aggregator=truein thewith()clause.
Supported actions
| Action | Description | Input | Output |
|---|---|---|---|
swap |
Swap between any Pendle tokens | Single token | Single token |
add_liquidity |
Add single-sided liquidity | Underlying/SY | LP token |
remove_liquidity |
Remove single-sided liquidity | LP token | Underlying/SY |
mint_py |
Mint PT + YT from underlying | Underlying/SY | PT + YT |
redeem_py |
Redeem PT + YT to underlying | PT + YT | Underlying/SY |
mint_sy |
Wrap underlying into SY | Underlying | SY |
redeem_sy |
Unwrap SY to underlying | SY | Underlying |
Metric Surface (Spell Comparisons)
Pendle exposes quote_out for route output comparisons:
pendle_out = metric("quote_out", pendle, USDC, "asset_out=DAI,amount=1000000,slippage_bps=1000")
Selector fields:
- required:
asset_out - optional:
amount(defaults to 1 unit of input asset),slippage_bps,enable_aggregator
Spell Constraints
When writing Pendle actions in .spell files, use with clauses:
pendle.swap(PT_TOKEN, SY_TOKEN, params.amount) with (
max_slippage=100,
require_quote=true,
)
| Constraint | Type | Description |
|---|---|---|
max_slippage |
integer (bps) | Maximum slippage, validated as integer in [0, 10000], converted to decimal for API |
min_output |
integer (wei) | Minimum output amount floor |
require_quote |
boolean | Fail if Pendle API quote fails |
max_gas |
integer (wei) | Gas estimate cap |
Pendle swap only supports mode: exact_in. exact_out is not supported.
When the Pendle API returns multiple routes, the adapter selects the first (best) route and emits a warning via onWarning. This is logged in non-JSON CLI runs.
PT/YT/SY Token Resolution
Pendle PT, YT, and SY tokens (e.g. PT_FXSAVE, YT_EETH, SY_WSTETH) are automatically resolved via the Pendle API at build time. You can use these symbols directly in spells without providing explicit addresses:
pendle.swap(PT_FXSAVE, USDC, params.amount) with (max_slippage=100)
The adapter converts underscore-delimited names (e.g. PT_FXSAVE) to the Pendle API format and picks the best match. If multiple expiries exist, the first (nearest) is selected.
To target a specific expiry or disambiguate, use the full 0x address instead:
pendle.swap(0xb1e926428ebec4421cce1ec6d9ff65d27f4b4bb6, USDC, params.amount)
Use grimoire venue pendle assets --chain <id> --type PT to discover available tokens and addresses.
Notes
- Default API base URL is
https://api-v2.pendle.finance/core. - Override base URL with
--base-urlorPENDLE_API_BASE_URL. - Use
--format jsonfor automation and nested payloads. - Pendle
swapcurrently supportsmode: exact_inonly. - Aggregators are disabled by default in adapter actions unless explicitly enabled.
- For Pendle token outputs (
assetOut,outputs), use bare address literals (0x...) and not quoted strings (\"0x...\"). - Quoted address-like token values trigger validator code
QUOTED_ADDRESS_LITERAL. max_slippageis validated as integer bps in[0, 10000]and converted to decimal (bps / 10000) before API requests.