unlock-monitor

SkillMonitoring & ops

Lets your agent track upcoming token unlocks and rate how hard each one could hit the market.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the unlock-monitor skill

About this capability

Token unlock and vesting tracker - quantify supply pressure via absorption ratio, classify cliff vs linear, and deliver one-line market reads

What this skill tells your AI

The instructions your AI receives, as published by aeonfun/aeon in skills/unlock-monitor/SKILL.md and read by ahel’s review.

Read memory/MEMORY.md for context on market positions and active narratives. Read the last 7 days of memory/logs/ to dedup against any unlock already covered. Read memory/state/unlock-monitor-seen.json if present — a list of ${ticker}:${unlock_date} keys already shipped. Skip exact matches; if file is absent, treat as empty.

Core thesis

The original skill ranked unlocks by % of circulating supply. That's a weak proxy. The right metric is Absorption Ratio = unlock_dollar_value / 7-day avg daily volume. Keyrock's analysis of 16k+ unlocks shows that ratios above ~2.4× consistently strain liquidity and produce measurable price drawdown. Below ~0.5× the market typically yawns. This skill ranks by absorption ratio first, supply % second, and folds in cliff-vs-linear structure plus pre-unlock price action to produce a per-event verdict.

Steps

1. Gather candidate unlocks

Run these WebSearches in parallel:

  • "token unlock schedule" "${week_of}" site:tokenomist.ai OR site:defillama.com
  • "token unlock" "this week" cliff vesting team investor ${current_year}
  • "upcoming unlocks" cryptorank OR dropstab ${current_year}
  • "FTX distribution" OR "Mt. Gox" OR "Celsius" OR "creditor payout" crypto ${current_year} (court-ordered supply shocks count)
  • "$10M" OR "$50M" OR "$100M" token unlock ${week_of} (dollar-value angle catches what supply % misses)

Also fetch (WebFetch fallback if any URL fails):

  • https://tokenomist.ai — primary, source-verified across 500+ tokens with cliff/linear labeling
  • https://defillama.com/unlocks — DeFi protocols, with $ values
  • https://cryptorank.io/token-unlock — broad coverage, recipient-category labeled
  • https://dropstab.com/vesting — alternative cross-source verification
  • https://www.coingecko.com/en/highlights/incoming-token-unlocks — Tokenomist-powered

Record which sources returned data → emit a sources: line in the log (see step 7).

2. Enrich each candidate with volume + structure

For each candidate unlock, fetch from CoinGecko search results or WebFetch on https://www.coingecko.com/en/coins/${slug}:

  • 7-day average daily volume (USD) — denominator for the absorption ratio
  • Spot price at fetch time
  • 30-day price change % — input to the market-read verdict
  • Vesting structure: cliff (lump-sum unlock) vs linear (gradual) vs mixed — usually labeled by tokenomist / cryptorank
  • Recipient category: team, investor, ecosystem, community, creditor

If volume data is unavailable, mark the unlock vol=unknown and tier it conservatively — do not skip it, but flag the gap in the output.

3. Compute Absorption Ratio and tier

For each unlock with known volume:

absorption_ratio = unlock_usd_value / avg_daily_volume_usd_7d

Tier the events:

TierAbsorption RatioMeaning
CRISIS> 2.4×Liquidity cannot absorb without significant slippage
STRAIN1.0× – 2.4×Will require multiple sessions to digest
DIGESTIBLE0.3× – 1.0×Notable but absorbable
TRIVIAL< 0.3×Background noise, skip unless recipient flag elevates it

Recipient override: a team or investor unlock with absorption ratio one tier lower than CRISIS gets bumped up one tier (cost-basis-zero sellers act differently than airdrop recipients). A community or staking-reward unlock with ratio one tier higher gets bumped down one tier.

Court-ordered distributions (FTX, Mt. Gox, Celsius) bypass the tier system — always include, label forced, note the legal timeline.

4. Classify pre-unlock market read

For each event, set a one-line market_read based on 30d price change and vesting type:

  • priced in — token is down >20% over 30d AND ratio ≤ STRAIN. Selling has already happened; unlock day may mark a bottom.
  • market asleep — token is flat or up over 30d AND tier is STRAIN or CRISIS. Asymmetric downside; the move hasn't started.
  • fade pump — token is up >15% over 30d AND tier is CRISIS. Classic pre-cliff bid-then-dump pattern.
  • forced sellers — court-ordered. Different beast — legal timeline, not market-driven.
  • absorbable — TRIVIAL or DIGESTIBLE with no recipient flag. Nothing to see here.

For cliff unlocks: weakness usually starts ~30 days before; vol peaks at unlock; recovery 10–14 days later. Note this pattern explicitly when relevant.

5. Rank and select

Sort by absorption ratio descending, then by recipient flag (team/investor first), then by dollar value. Take the top 8 (drop TRIVIAL unless a court-order or recipient flag elevates them).

Deduplicate against memory/state/unlock-monitor-seen.json and the last 7 days of logs.

If the resulting list is empty, that's a real signal — output UNLOCK_MONITOR_QUIET and a one-line note explaining why (e.g. "No unlocks above 0.3× absorption ratio this week — supply side is calm").

6. Send via ./notify (under 4000 chars)

Lead with the headline — the single most-leveraged unlock — then tiered groups, then the read.

*Unlock Monitor — week of ${date}*

This week's most leveraged: **$TOKEN** unlocks Wed at $XM (Y× daily vol). [market read]

CRISIS (> 2.4× daily vol)
- **$TOKEN** — Mon Apr 22 — X tokens (Z% supply, $YM)
  cliff · investor · 3.1× vol · 30d -8% → market asleep
  Note: cliff pattern — expect weakness running into the date

STRAIN (1.0×–2.4×)
- **$TOKEN** — details · 1.6× vol · 30d -25% → priced in

DIGESTIBLE (0.3×–1.0×)
- **$TOKEN** — details · 0.6× vol · linear · ecosystem → absorbable

FORCED
- **$TOKEN** — Mon — court-ordered creditor batch, $XM, no schedule discretion

*Supply read:* 2-3 sentences. Where's the real pressure, where's the noise, where's the asymmetry. Reference any cliff timing patterns. If the week is quiet, say so plainly.

sources: tokenomist=ok, defillama=ok, cryptorank=ok, dropstab=fail, coingecko=ok

7. Persist state and log

Append every shipped event's key (${ticker}:${unlock_date}) to memory/state/unlock-monitor-seen.json (create the file and memory/state/ directory if absent). Trim the file to the last 90 days of keys.

Log to memory/logs/${today}.md:

### unlock-monitor
- Week of: ${date}
- Shipped: N events (X CRISIS, Y STRAIN, Z DIGESTIBLE)
- Top leverage: $TOKEN at A.A× daily vol
- Verdict mix: K priced-in, L asleep, M fade-pump, N forced
- Sources: tokenomist=ok|fail, defillama=ok|fail, cryptorank=ok|fail, dropstab=ok|fail, coingecko=ok|fail
- Status: UNLOCK_MONITOR_OK | UNLOCK_MONITOR_QUIET | UNLOCK_MONITOR_DEGRADED (if 2+ sources failed) | UNLOCK_MONITOR_ERROR (if all failed)

Guidelines

  • The Absorption Ratio is the headline metric. % of circulating supply is secondary — useful for context but not for ranking.
  • Team and investor unlocks at low cost basis are the strongest sell signals. Bias the recipient override toward overstating their impact, not understating.
  • Linear unlocks rarely produce single-day shocks — say so explicitly when one shows up high in the list. The danger from linear is cumulative, not pointwise.
  • Cliff unlocks have a recognizable pattern: weakness ~30 days prior, peak vol on the date, recovery 10–14 days later. Reference this pattern when timing matters.
  • Pre-unlock price action is the cheapest signal of whether the market has done its work already. A token bleeding for 30 days into a known unlock is priced in. A token ripping into a known cliff is a fade pump.
  • Court-ordered distributions are unique — forced liquidation under legal timelines, no strategic discretion. Tier them separately.
  • Be direct. "this one's priced in", "market's asleep on this", "fade the pump" — say it plainly. No hedging.
  • A quiet week on supply is a signal too. Ship UNLOCK_MONITOR_QUIET with one sentence, don't pad.
  • Cross-reference active narratives in MEMORY.md — unlocks during a fading narrative hit harder; unlocks into a hot narrative get absorbed.

Network note

curl works — there is no network sandbox. Use WebFetch as a fallback for a flaky public GET — all data sources here are public, no auth required. If WebFetch on a specific source also fails, mark it fail in the source-status line and proceed with whatever sources returned data. Only emit UNLOCK_MONITOR_ERROR if all sources failed.

Environment Variables Required

  • None (uses WebSearch + WebFetch only)
  • Notification channels configured via repo secrets (see CLAUDE.md)

Signals

GitHub stars
750
Forks
264
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
unlock-monitor
Source
github.com/aeonfun/aeon