Help us improve
Share bugs, ideas, or general feedback.
From grimoire-vm
Fetches Pendle Hosted SDK metadata via Grimoire venue CLI including chains, aggregators, markets, assets, and market tokens. Use before writing Pendle spells.
npx claudepluginhub franalgaba/grimoire --plugin grimoire-vmHow this skill is triggered — by the user, by Claude, or both
Slash command
/grimoire-vm:grimoire-pendleThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Use this skill to inspect Pendle metadata and preflight Pendle routing configuration before running spells.
Provides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Share bugs, ideas, or general feedback.
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> --jsongrimoire 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>]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
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)
pendle.deposit(USDC, ...) — Pendle has no deposit action. Use add_liquidity, mint_py, mint_sy, or swap.enable_aggregator — Some routes require an aggregator. If no route is found, retry with enable_aggregator=true in the with() clause.| 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 |
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:
asset_outamount (defaults to 1 unit of input asset), slippage_bps, enable_aggregatorWhen 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.
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.
https://api-v2.pendle.finance/core.--base-url or PENDLE_API_BASE_URL.--format json for automation and nested payloads.swap currently supports mode: exact_in only.assetOut, outputs), use bare address literals (0x...) and not quoted strings (\"0x...\").QUOTED_ADDRESS_LITERAL.max_slippage is validated as integer bps in [0, 10000] and converted to decimal (bps / 10000) before API requests.