Install
openclaw skills install pendle-pt-researchResearch Pendle PT (principal token) markets, including unlevered hold-to-par ideas, near-expiry rotations, and looped PT strategies across money markets like Morpho and Euler. Use when evaluating Pendle PT opportunities, comparing natural PT APY versus practical loopability, ranking PTs by time to par / implied APY / liquidity / underlying risk, assessing PT collateral support, or comparing manual-only loops against easier execution paths such as Contango.
openclaw skills install pendle-pt-researchResearch Pendle PT markets with a decision-first lens.
Author credit: @Moshu
This skill covers:
Do not optimize only for the highest displayed APY. The job is to sort PT markets into investable buckets that answer questions like:
When Peter asks specifically about manual Contango-supported PT routes, read references/manual-contango-comparison.md before answering.
Always evaluate Pendle PT markets across these dimensions first:
Do not rank purely by APY.
A PT with lower APY but cleaner underlying risk and better liquidity can be a better trade than a high-APY PT with ugly exit conditions or fragile collateral.
For looped PT strategies, a market with slightly lower raw PT APY can still be superior if it has:
Use for markets with roughly 1-4 months to expiry when the yield is attractive and the underlying risk is acceptable.
Focus on:
This bucket is usually best when:
Use for PTs that will reach par soon but still show unusually attractive APY.
Focus on:
This bucket is usually best when:
Use for PTs that can be deposited into a money market and borrowed against to create leveraged fixed-yield exposure.
Focus on:
Max Looping APY when visibleThis bucket is usually best when:
Start from Pendle PT markets page:
For each candidate PT market, capture at least:
If needed, also read Pendle docs or market details pages to understand the underlying source of yield.
For PT looping research, inspect the data sources in this order:
For each loopable candidate PT, capture at least:
Max Looping APY when shownMorpho verified, Euler verified, Contango manual, or heuristic onlyTreat this loopability map as a first-class input, not an afterthought.
Assign an explicit risk tier.
Suggested tiers:
When rating risk, consider:
If the underlying is hard to explain clearly, penalize it.
Do not treat all PT APY equally.
Check for:
Prefer markets where Peter can move in and out without drama.
Penalize:
For looped PT research, apply the same discipline to the financing leg:
Max Looping APY is not enough if available liquidity is tiny or borrow cost is unstableUse bullet lists on Discord. Avoid markdown tables there.
For each PT market, include:
hold-to-par, near-par rotation, pt-looping, multiple, or avoidFor each loopable PT market, also include:
Max Looping APY if visibleMorpho verified, Euler verified, Contango manual, or heuristic onlylight, moderate, or aggressive onlyWhen comparing practical loop candidates, separate the output into:
Use a weighted judgment rather than pretending the numbers are exact.
For unlevered PT ranking, a good default weighting:
For PT looping ranking, use a different weighting:
Adjust judgment when needed. For example:
Max Looping APY or a clearly positive manually estimated spreadFor detailed ranking dimensions and a reusable research template, read:
references/ranking-framework.mdThese scripts now exist for the reusable workflow:
scripts/scan-markets.py — pull and normalize Pendle PT markets across supported chainsscripts/rank-markets.py — score and bucket markets into hold-to-par vs near-par rotation, with asset-family and stable-subtype filtersscripts/report-markets.py — print a compact research reportscripts/generate-brief.py — generate a markdown research briefUse these scripts inside this skill:
scripts/scan-pencosystem.py — fetch the live Pendle Pencosystem partner directoryscripts/scan-morpho-pt-markets.py — verify live Morpho PT-collateral markets, loan assets, borrow APY, utilization, and LLTV via GraphQLscripts/scan-euler-pt-markets.py — verify Euler PT token coverage and Euler vault matches for the target PT set via the Euler indexer GraphQLscripts/scan-contango-pt-markets.py — verify exact PT route support from Contango's public Pendle external integration configscripts/merge-loop-data.py — combine ranked PT markets with live Pencosystem partner data and protocol-verified market support when availablescripts/rank-looped-markets.py — score PT looping candidates using PT APY, borrow economics, leverage capacity, liquidity, and execution practicalityscripts/report-looped-markets.py — print a compact loop-focused report with money markets, borrow assets, and leverage notesSuggested outputs:
data/pencosystem.latest.jsondata/loop-venues.latest.jsondata/loop-ranked.latest.jsonTypical flow:
cd scripts
python3 scan-markets.py --active-only
python3 rank-markets.py
python3 report-markets.py --top 10
PT looping flow:
cd scripts
python3 scan-markets.py --active-only
python3 rank-markets.py --stable-only --chains ethereum base arbitrum --min-days 7 --max-days 120 --min-liquidity 1000000
python3 scan-pencosystem.py
python3 scan-morpho-pt-markets.py --stable-only --min-apy 0.08
python3 scan-euler-pt-markets.py --stable-only --min-apy 0.08
python3 scan-contango-pt-markets.py --stable-only --min-apy 0.08
python3 merge-loop-data.py --stable-only --min-apy 0.08
python3 rank-looped-markets.py
python3 report-looped-markets.py --top 10
Filtered example for a more practical first pass:
cd scripts
python3 scan-markets.py --active-only
python3 rank-markets.py --chains ethereum base arbitrum --min-days 7 --max-days 120 --min-liquidity 1000000
python3 report-markets.py --top 10
Stable-only example (good default for Peter's likely next strategy work):
cd scripts
python3 scan-markets.py --active-only
python3 rank-markets.py --stable-only --chains ethereum base arbitrum --min-days 7 --max-days 120 --min-liquidity 1000000
python3 report-markets.py --top 10
Stable-subtype example:
cd scripts
python3 scan-markets.py --active-only
python3 rank-markets.py --stable-only --stable-subtype stable-major stable-synthetic stable-rwa --chains ethereum base arbitrum --min-days 7 --max-days 120 --min-liquidity 1000000
python3 report-markets.py --top 10
python3 generate-brief.py --top 8
Outputs are written to:
data/markets.latest.jsondata/ranked.latest.jsondata/risk-overrides.jsondata/risk-overrides.json.data/market-notes.json.stable, eth-beta, btc-beta, and other, plus a first-class --stable-only mode.stable-major, stable-synthetic, stable-rwa, and stable-other through data/stable-subtype-overrides.json and --stable-subtype.tiny, small, medium) as a first sizing heuristic.--chains, --min-days, --max-days, --min-liquidity, --risk, --asset-family, --stable-only) to narrow the field into practical buckets before reading the report.Max Looping APY and venue metadata from the Pencosystem as decision inputs, but still sanity-check borrow liquidity and route usability.