Installs into .claude/skills of the current project.
Sponsors
SSkills DirectorySkills Directory
Know which skills are safe — weekly.
SSkills DirectorySkills Directory
Is that skill safe to install?
Are you the author of Crypto Tracker?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/miroshark-crypto-tracker)
---
name: [REPLACE: SKILL_NAME]
description: Price and volume tracker for [REPLACE: TOKEN_SYMBOL] with anomaly alerts above [REPLACE: ALERT_THRESHOLD_PCT]% movement
metadata:
category: crypto
var: ""
tags:
- crypto
requires:
- COINGECKO_API_KEY?
---
> **${var}** — Optional. Pass a different CoinGecko ID to override the default. If empty, tracks the configured token.
Today is ${today}. Track [REPLACE: TOKEN_SYMBOL] price/volume and alert on anomalies.
## Steps
1. **Fetch current state** - query CoinGecko for the latest price, 24h change, 24h volume. The ID is `${var}` if set, else `[REPLACE: COINGECKO_ID]`: write it into the URL literally (the `<ID>` below). Key check: read the "Keys set for this run" line in your run notes, never a shell test (those are refused and cost a turn). With `COINGECKO_API_KEY` on that line, use the pro endpoint:
```bash
./secretcurl -s -o /tmp/token-price.json -w 'coingecko http=%{http_code}\n' -H "x-cg-pro-api-key: {COINGECKO_API_KEY}" "https://pro-api.coingecko.com/api/v3/simple/price?ids=<ID>&vs_currencies=usd&include_24hr_change=true&include_24hr_vol=true"
```
Without it, use the keyless endpoint:
```bash
curl -s -o /tmp/token-price.json -w 'coingecko http=%{http_code}\n' "https://api.coingecko.com/api/v3/simple/price?ids=<ID>&vs_currencies=usd&include_24hr_change=true&include_24hr_vol=true"
```
Then read the reply with `jq '.["<ID>"]' /tmp/token-price.json`. If a `curl` GET is flaky, use **WebFetch** on the same URL as a fallback (there is no network sandbox; WebFetch is just a convenience for flaky public reads).
2. **Read prior state** — last 7 days of `memory/logs/YYYY-MM-DD.md` for previous prices and volumes (parse lines like `**[REPLACE: TOKEN_SYMBOL]**: price=$N, volume_24h=$N`).
3. **Detect anomalies** — flag if `|price_change_24h| >= [REPLACE: ALERT_THRESHOLD_PCT]%` OR if 24h volume is `>= 2x` the 7-day median.
4. **Write `output/articles/[REPLACE: SKILL_NAME]-${today}.md`** with:
- Current price, 24h change, 24h volume
- 7-day price chart (sparkline as `▁▂▃▅▇` characters)
- Anomaly verdict: `QUIET` / `STEADY` / `ANOMALY` (and which fired)
- Links: CoinGecko page, Etherscan / explorer page if you know the contract address
5. **Notify** — if `ANOMALY`, send via `./notify` with the verdict + 1-2 sentences of context. Stay silent on QUIET/STEADY days.
6. **Log** — append to `memory/logs/${today}.md`:
```
## [REPLACE: SKILL_NAME]
- **[REPLACE: TOKEN_SYMBOL]**: price=$N, change_24h=$N%, volume_24h=$N
- **Verdict**: QUIET | STEADY | ANOMALY:price | ANOMALY:volume
```
## Network note
CoinGecko's keyless endpoint occasionally rate-limits. There is no network sandbox — `curl` works; use **WebFetch** as the fallback when a `curl` GET is flaky.
**Shell shape.** Each Bash call is one allowed command (pipes are fine). The run refuses a call that sets a variable (`ID=...`, `URL=$(...)`), uses `if` / `for`, tests a key (`[ -n "$KEY" ]`), joins commands with `;`, `&&` or `||`, or redirects into a file (`> .token-cache.json`), and each refusal costs a model turn. So write the ID into each URL literally, save replies with `-o /tmp/<file>`, and write the article and the log with Write/Edit.
## Constraints
- Never spam. The `ALERT_THRESHOLD_PCT` gate is there to protect channel signal — don't lower it below 5%.
- Always cite sources in the article. Even a one-line link is better than no link.