Authoring Error Tracking Alerts
PostHog/posthog
Author error tracking alerts that fire when an issue is created, reopened, or starts spiking.
Fire when the tracked token does something - new ATH, sharp 1h move, or operator-set target crossed.
$ npx skills add aeonfun/aeon --skill price-alert -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install aeonfun/aeon price-alert --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/aeonfun/aeon.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/price-alert .claude/skills/price-alert && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "price-alert" agent skill from https://github.com/aeonfun/aeon/tree/main/skills/price-alert into .claude/skills/price-alert/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "price-alert", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/aeonfun/aeon/tree/main/skills/price-alertType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add aeonfun/aeon --skill price-alert -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install aeonfun/aeon price-alert --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aeonfun/aeon.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/price-alert .agents/skills/price-alert && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "price-alert" agent skill from https://github.com/aeonfun/aeon/tree/main/skills/price-alert into .agents/skills/price-alert/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "price-alert", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add aeonfun/aeon --skill price-alert -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install aeonfun/aeon price-alert --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aeonfun/aeon.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/price-alert .cursor/skills/price-alert && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "price-alert" agent skill from https://github.com/aeonfun/aeon/tree/main/skills/price-alert into .cursor/skills/price-alert/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "price-alert", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/aeonfun/aeon.git --path skills/price-alert--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add aeonfun/aeon --skill price-alert -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install aeonfun/aeon price-alert --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aeonfun/aeon.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/price-alert .gemini/skills/price-alert && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "price-alert" agent skill from https://github.com/aeonfun/aeon/tree/main/skills/price-alert into .gemini/skills/price-alert/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "price-alert", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install aeonfun/aeon price-alertInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add aeonfun/aeon --skill price-alert -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/aeonfun/aeon.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/price-alert .github/skills/price-alert && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "price-alert" agent skill from https://github.com/aeonfun/aeon/tree/main/skills/price-alert into .github/skills/price-alert/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "price-alert", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add aeonfun/aeon --skill price-alert -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install aeonfun/aeon price-alert --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aeonfun/aeon.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/price-alert .opencode/skills/price-alert && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "price-alert" agent skill from https://github.com/aeonfun/aeon/tree/main/skills/price-alert into .opencode/skills/price-alert/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "price-alert", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
price-alertFire when the tracked token does something - new ATH, sharp 1h move, or operator-set target crossed.
Price Alert is an agent skill from aeonfun/aeon. Fire when the tracked token does something - new ATH, sharp 1h move, or operator-set target crossed. Silent on normal days.
Its SKILL.md is about 4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: The most autonomous AI agent framework: runs unattended on GitHub Actions, self-healing skills, drives Claude Code, Grok, Codex & more. No approval loops. Configure once, forget… The licence is MIT.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit c0cb7c4. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
jqcurlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
api.dexscreener.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
PRICE_ALERT_NO_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Price Alert loads about 4k tokens when it runs. Until then it costs about 34 tokens; SKILL.md has 1,804 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from aeonfun/aeon at commit c0cb7c4, republished under its MIT licence (© aeonfun). 1,804 words, ~4,024 tokens.
.claude/skills/price-alert/SKILL.md (or your agent's skills folder).${var} — Optional. Pass one or more
target_pricelevels (comma-separated USD numbers, scientific notation allowed) to fire a one-time alert when the price crosses any of them. Empty = only ATH and sharp-move gates run. Passdry-runto skip notify (state still updates). Passset-target:<price>— the shape the Telegram force-reply sends (step 7) — to register a target and get a one-line confirmation.
Today is ${today}. The scheduled digests (digest, token-movers, ...) run at fixed hours. None of them tell the operator "the price just hit a new high" or "the token moved 28% in the last hour" — both are events that warrant attention the moment they happen, not 14 hours later in a daily digest. This skill closes that window.
Scheduled daily digests are calm summaries. Real moves need real-time signal. Three classes of move are worth a same-day ping:
Everything else is noise not worth a same-day ping.
Reads:
memory/MEMORY.md "Tracked Token" section — the tracked token's contract/chain. If absent, exit silently.memory/topics/price-alert-state.json — last-known ATH, last-alert timestamps per event type, target-crossing history. Created with defaults on first run.Writes:
memory/topics/price-alert-state.json — updated state every run.memory/logs/${today}.md — one log block per run, even on OK../notify — only when a gate fires.No new secrets. Uses keyless DexScreener; falls back to WebFetch when a public curl GET is flaky (there is no network sandbox).
{
"contract": "0xbf8e8f0e8866a7052f948c16508644347c57aba3",
"chain": "base",
"ath": {
"price_usd": 0.000003757,
"observed_at": "2026-05-10T19:00:00Z",
"announced_at": "2026-05-10T19:30:00Z"
},
"last_alerts": {
"ath": "2026-05-10T19:30:00Z",
"sharp_move": null,
"target_hit": null
},
"targets": {
"0.000005": {
"side": "above",
"first_seen_below_at": "2026-05-11T08:00:00Z",
"hit_at": null,
"announced_at": null
}
}
}Key invariants:
ath.price_usd only ever monotonically increases. If a run sees a lower price than the stored ATH, leave the ATH alone.last_alerts.* powers the 4h dedup window. Each gate has its own clock.targets.${price}.side is above if current_price < target when the target was first observed (operator is waiting for the price to climb to it), and below otherwise. Set once, never flipped.targets.${price}.hit_at is set the run the cross happens. announced_at is set the run the notification fires. They differ only if the run lands inside a dedup window — but target alerts never re-fire, so hit_at == announced_at in practice.${var} starts with set-target: → set FROM_REPLY=1, MODE=execute. Strip the set-target: prefix (${var#set-target:}); the remainder is the target(s) list, parsed exactly like the comma-split below. This is the shape scripts/telegram-route.sh sends when the operator replies to the step-7 force-reply prompt. The run proceeds normally (register the target, don't fire on first observation) and closes the loop with a confirmation in step 7.${var} matches ^dry-run → MODE=dry-run. Strip the prefix; remainder (if any) is treated as targets.MODE=execute., (commas) and strip whitespace.5e-6), include it. Reject zero / negative / non-numeric tokens and log PRICE_ALERT_BAD_TARGET: ${token} — continue with the surviving targets.PRICE_ALERT_BAD_VAR: ${var} and exit. Normally no notify — but if FROM_REPLY=1, first close the loop with ./notify "Couldn't read \"${var#set-target:}\" as a price. Reply with a number like 0.000005." (a force-reply always deserves an acknowledgement).TARGETS=() is fine — ATH and sharp-move gates still run.mkdir -p memory/topics
[ -f memory/topics/price-alert-state.json ] || cat > memory/topics/price-alert-state.json <<'EOF'
{"contract":null,"chain":null,"ath":null,"last_alerts":{"ath":null,"sharp_move":null,"target_hit":null},"targets":{}}
EOFParse the "Tracked Token" table in memory/MEMORY.md. Pull CONTRACT (column 2 of the first data row) and CHAIN (column 3, lowercased). If the section is missing, the table is empty, or the contract field doesn't match ^0x[0-9a-fA-F]{40}$ → log PRICE_ALERT_NO_TOKEN and exit (no notify, no state write).
If the state file's contract is set and differs from the resolved contract → log PRICE_ALERT_TOKEN_CHANGED and reset the state file to defaults with the new contract/chain. ATH starts over with the new token.
RESP=$(curl -fsS "https://api.dexscreener.com/latest/dex/tokens/${CONTRACT}" 2>/dev/null || echo "")If the response is empty, falsy, or jq can't parse it → fall back to WebFetch on the same URL with prompt "Return the raw JSON body verbatim." and try again. If both paths fail → log PRICE_ALERT_FETCH_FAIL and exit with status ERROR (no notify, no state mutation beyond touching last_run_at).
From the parsed JSON:
.pairs[] to entries where .chainId == "${CHAIN}"..liquidity.usd — call this the deepest pool. If no pair matches the chain, fall back to the highest-liquidity pair across all chains and mark chain=fallback in the log.CURRENT_PRICE=.priceUsd (float), H1_CHANGE_PCT=.priceChange.h1 (float, may be missing → treat as 0), H24_CHANGE_PCT=.priceChange.h24 (float, may be missing → treat as 0), POOL_URL=.url.If CURRENT_PRICE is missing, zero, or non-numeric → log PRICE_ALERT_BAD_PRICE and exit ERROR.
prior_ath = state.ath.price_usd (null on first run)
new_ath = (prior_ath is null) OR (CURRENT_PRICE > prior_ath)If new_ath:
state.ath.price_usd = CURRENT_PRICE, state.ath.observed_at = NOW.ath alert was >4h ago (or never). On the first run after token initialisation, suppress the notification (we don't know if this is genuinely an ATH or just the starting baseline) — set state.ath.announced_at = NOW so subsequent strict-higher prices alert correctly.prior_ath is null (first run), record verdict ATH_BASELINE for the log; no notify.ATH.sharp = abs(H1_CHANGE_PCT) >= 20.0If sharp:
state.last_alerts.sharp_move is within the last 4h → verdict SHARP_MOVE_DEDUPED, no notify.SHARP_MOVE, notify, set state.last_alerts.sharp_move = NOW.Sign of H1_CHANGE_PCT decides the direction word in the message (up for ≥0, down for <0).
For each target in TARGETS:
state.targets: this is the first time the operator has set it. Record side (above if CURRENT_PRICE < target, else below), first_seen_below_at=NOW, hit_at=null, announced_at=null. Do not notify on first observation. This avoids "the price was already there when you set the target" noise.state.targets and hit_at is already set → skip; target-hit alerts are one-shot per side.side=above & CURRENT_PRICE >= target → crossed.side=below & CURRENT_PRICE <= target → crossed.hit_at=NOW, announced_at=NOW, verdict TARGET_HIT for this target, notify (subject to 4h dedup on last_alerts.target_hit).Targets that crossed in prior runs stay in the state file with hit_at set so they don't refire if the price wobbles back.
Run-level verdict precedence (used for the log status line and the notification ordering):
ATH — strict new high after baseline.TARGET_HIT — operator-set level crossed.SHARP_MOVE — ±20% in 1h.OK — no gate fired.If multiple gates fired in the same run, send one notification per gate. Each gate independently respects its own dedup clock — an ATH and a TARGET_HIT in the same run produce two messages; an ATH and a SHARP_MOVE_DEDUPED produce one.
ATH:
*$TOKEN — New ATH — ${today}*
$TOKEN just printed a new all-time high at $X.XXXXe-N.
Previous ATH: $Y.YYYYe-N (set ${prior_ath_age} ago).
24h move: ±Z.Z% · 1h move: ±W.W%
Chart: ${POOL_URL}SHARP_MOVE:
*$TOKEN — Sharp 1h Move — ${today}*
$TOKEN ${up|down} ${abs(h1):.1f}% in the last hour — now $X.XXXXe-N.
24h: ±Z.Z%
${one of: "Buyer wave — watch for follow-through." | "Selling pressure — watch the next hour for stabilisation." }
Chart: ${POOL_URL}(Direction phrase is hard-coded by sign: positive = buyer wave; negative = selling pressure. No freelance commentary.)
TARGET_HIT:
*$TOKEN — Target Hit — ${today}*
$TOKEN just crossed $${target} (now $X.XXXXe-N).
Direction: ${above|below}
24h: ±Z.Z% · 1h: ±W.W%
Chart: ${POOL_URL}If MODE == dry-run: build the messages, log the planned notifications, but skip ./notify. State still updates so dedup clocks advance correctly.
Cap each message at ~2500 chars; price-alert messages are short by nature and shouldn't approach this.
Build each firing gate's message to a file and send it with ./notify -f alert.md (one send per
gate). State still advances even on a deduped run, so the dedup clocks stay correct.
Buttons and force_reply can't share one message, so this is a separate send. After a genuine
ATH alert (post-baseline, not a deduped repeat), and only when no un-hit operator target
currently sits above CURRENT_PRICE (don't nag operators who already queued one), offer to capture
the next level:
./notify "New high — want an alert when $SYMBOL clears a level above this? Reply with a price." \
--force-reply --placeholder "e.g. 0.000005" \
--context "price-alert::set-target"The reply routes back as var=set-target:<price> (handled in step 1). On that run, once the target
is registered (step 6, first-observation — no cross alert), close the loop with a one-line
confirmation: ./notify "Target set: \$<price> for $SYMBOL — I'll alert you when it crosses."
(Send it only when a new target was actually registered this run.)
Rewrite memory/topics/price-alert-state.json atomically:
TMP=$(mktemp)
jq --arg ts "$(date -u +%FT%TZ)" '
.last_run_at = $ts |
.contract = $contract |
.chain = $chain |
.ath = $ath_obj |
.last_alerts = $last_alerts_obj |
.targets = $targets_obj
' memory/topics/price-alert-state.json > "$TMP"
mv "$TMP" memory/topics/price-alert-state.jsonValidate with jq empty memory/topics/price-alert-state.json after writing; if it fails, restore from a .bak copy and log PRICE_ALERT_STATE_CORRUPT. Keep one .bak rolling.
Cap state.targets to 20 most-recent entries (LRU by first_seen_below_at) so a long-running fork doesn't accumulate stale operator targets.
Append to memory/logs/${today}.md under a ### price-alert heading:
### price-alert
- **Skill**: price-alert
- **Token**: ${SYMBOL} (${CONTRACT})
- **Current**: $X.XXXXe-N | 1h: ±W.W% | 24h: ±Z.Z%
- **ATH**: $Y.YYYYe-N (set ${YYYY-MM-DD HH:MM} UTC) [${UNCHANGED|NEW}]
- **Sharp-move gate**: ${FIRED|QUIET|DEDUPED}
- **Targets evaluated**: ${comma-list of target prices} → ${comma-list of per-target verdicts}
- **Verdicts fired**: ${comma-list, or NONE}
- **Notifications sent**: ${N}
- **Status**: ${PRICE_ALERT_OK | PRICE_ALERT_ATH | PRICE_ALERT_SHARP_MOVE | PRICE_ALERT_TARGET_HIT | PRICE_ALERT_DRY_RUN | PRICE_ALERT_NO_TOKEN | PRICE_ALERT_TOKEN_CHANGED | PRICE_ALERT_FETCH_FAIL | PRICE_ALERT_BAD_PRICE | PRICE_ALERT_BAD_VAR | PRICE_ALERT_STATE_CORRUPT}The status field carries the highest-priority gate fired this run, or the most relevant error. OK means the run completed cleanly and no gate fired.
| Status | Meaning | Notify? |
|---|---|---|
PRICE_ALERT_OK | Run completed, no gate fired | No |
PRICE_ALERT_ATH | New strict all-time high (post-baseline) | Yes |
PRICE_ALERT_SHARP_MOVE | ±20% in 1h, outside dedup window | Yes |
PRICE_ALERT_TARGET_HIT | Operator target crossed for the first time | Yes |
PRICE_ALERT_DRY_RUN | var=dry-run mode | No (state still updates) |
PRICE_ALERT_NO_TOKEN | No tracked token configured in MEMORY.md | No |
PRICE_ALERT_TOKEN_CHANGED | Tracked contract changed since last run; state reset | No |
PRICE_ALERT_FETCH_FAIL | Both curl and WebFetch failed | No |
PRICE_ALERT_BAD_PRICE | API returned malformed/zero price | No |
PRICE_ALERT_BAD_VAR | ${var} had non-empty, non-dry-run text but yielded zero valid targets | No |
PRICE_ALERT_STATE_CORRUPT | jq validation failed after write; restored from .bak | No |
DexScreener is keyless and public — curl works; there is no network sandbox. If a public curl GET is flaky, the WebFetch fallback kicks in (built-in Claude tool, prompt: "Return the raw JSON body verbatim."). There's no auth header, and the URL doesn't change between runs. Notify goes through ./notify, which stages to .pending-notify/; the workflow re-delivers any messages that failed to send after the run — no extra script needed.
last_alerts.* map is the only authority on whether to suppress.hit_at is set, the target never re-fires — even if the price wobbles back through the level. Operators add new targets if they want continued signal.priceUsd is the canonical mark.jq empty validation step. Corrupt writes restore from .bak.memory/logs/. This skill never modifies past log files. It only appends to today's.© aeonfun, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/price-alert of aeonfun/aeon.
Open the folder on GitHubat commit c0cb7c4
Price Alert next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Price Alert this skillaeonfun/aeon | 767 | — | ~4k | Automated safety check: Pass | MIT | |
| Authoring Error Tracking AlertsPostHog/posthog | 40k | — | ~2.8k | Automated safety check: Pass | Custom licence | |
| Pricingsickn33/agentic-awesome-skills | 47k | 1 repos | ~1.9k | Automated safety check: Pass | MIT | |
| Tracking Crypto Pricesjeremylongshore/tons-of-skills-marketplace | 2.8k | — | ~1.1k | Automated safety check: Pass | MIT | |
| Pricing Strategyphuryn/pm-skills | 27k | — | ~913 | Automated safety check: Pass | MIT | |
| Pricing Strategyalirezarezvani/claude-skills | 28k | 1 repos | ~3.5k | Automated safety check: Pass | MIT |
PostHog/posthog
Author error tracking alerts that fire when an issue is created, reopened, or starts spiking.
sickn33/agentic-awesome-skills
When the user wants help with pricing decisions, packaging, or monetization strategy.
jeremylongshore/tons-of-skills-marketplace
Track real-time cryptocurrency prices across exchanges with historical data and alerts.
phuryn/pm-skills
Analyze and design pricing strategies including pricing models, competitive pricing analysis, willingness-to-pay estimation, and price elasticity.
alirezarezvani/claude-skills
Design, optimize, and communicate SaaS pricing — tier structure, value metrics, pricing pages, and price increase strategy.
alirezarezvani/claude-skills
A skill your agent uses when designing or revisiting product pricing — selecting a pricing model (subscription seat-based, usage-based, value-based, freemium, or hybrid), running Van Westendorp…
aeonfun/aeon
Browses open tasks on the TaskMarket agent-worker market and, with explicit operator approval, creates tasks, tracks submissions and submits finished work.
aeonfun/aeon
Sets up and manages an Aeon agent instance that runs skills on a schedule through GitHub Actions: starting, rescheduling, debugging, editing skills and mining chat history.
aeonfun/aeon
Reads a Base Account's address, portfolio and transaction history through the Base MCP server, and stays strictly read-only in unattended Aeon runs, reporting only changes.
aeonfun/aeon
Audits every page of a site each day from its sitemap, scores on-page and technical SEO, checks duplicates across pages and reports what changed since the last run.
aeonfun/aeon
5 concrete real-life actions, leverage-scored against open loops with specificity and anti-fluff gates
aeonfun/aeon
Static linter for an Aeon instance's configuration that catches silent failures such as unquoted schedules, duplicate keys, unconfigured skills and broken MCP references.
Fire when the tracked token does something - new ATH, sharp 1h move, or operator-set target crossed. Price Alert is an agent skill from aeonfun/aeon. Fire when the tracked token does something - new ATH, sharp 1h move, or operator-set target crossed.
Run `npx skills add aeonfun/aeon --skill price-alert -a claude-code`. Or copy the skill folder (skills/price-alert in aeonfun/aeon) into .claude/skills/price-alert in your project. Claude Code loads it when a task matches its description.
Run `npx skills add aeonfun/aeon --skill price-alert -a codex`. Or copy the skill folder (skills/price-alert in aeonfun/aeon) into .agents/skills/price-alert in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add aeonfun/aeon --skill price-alert -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/price-alert, .gemini/skills/price-alert, .github/skills/price-alert and .opencode/skills/price-alert in your project.
Going by SKILL.md and its folder, Price Alert needs the command-line tools its instructions call (jq and curl) and credentials named PRICE_ALERT_NO_TOKEN. Our summary lists: A credential in PRICE_ALERT_NO_TOKEN.
SKILL.md names 1 domain. In commands or code: api.dexscreener.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Price Alert is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Price Alert: Authoring Error Tracking Alerts (PostHog/posthog, 40k stars), Pricing (sickn33/agentic-awesome-skills, 47k stars), Tracking Crypto Prices (jeremylongshore/tons-of-skills-marketplace, 2.8k stars) and Pricing Strategy (phuryn/pm-skills, 27k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
aeonfun (a GitHub organization) maintains it in aeonfun/aeon, which has 767 GitHub stars. The repository holds 82 skills in this directory. The repository was last updated on October 8, 2026.
Source: aeonfun/aeon on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.