Address daily digest
Skill Spacetime-Technology/chia-skills/skills/address-daily-digest
Claude Code skills that turn chia-explorer into finished workflows: address watches, price alerts, offer safety checks, NFT provenance, invoice watching.
npx -y skills add Spacetime-Technology/chia-skills --skill address-daily-digestAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Compose and deliver a daily (or weekly) summary of activity at one or more Chia addresses — inflows, outflows, ending balance, USD value at receive time. Use when the user wants a recurring report instead of per-event alerts, or asks for a "daily summary" / "weekly digest" of their wallet. Accepts addresses, period_hours, currency, channel as arguments for programmatic invocation.
SKILL.md
6.0 KB, ~1.5k tokens by cl100k_base, as published. Nobody here has run it
Address daily digest
You are composing a recurring summary of one or more Chia addresses — inflows, outflows, ending balance, USD/fiat values — and delivering it through whichever notification channel is installed. Designed to be scheduled once a day or once a week.
This skill follows the conventions in this repo's SKILLS.md. Read that if anything below is unclear.
Required capabilities
- chia-explorer (
mcp__chia-explorer__*) — mandatory. - A notification MCP — pick whichever is installed. Email is the natural fit for digests; if email isn't configured the skill will use a chat channel or fall back to a file at
~/.chia-skills/digests/<date>.md.
Resolve inputs
You need: $addresses, $period_hours, $currency, $channel.
$addresses— one address or a comma-separated list. Required.$period_hours— window to summarise. Default24(daily). Use168for weekly.$currency— three-letter code for fiat valuation. Defaultusd.$channel— notification channel, defaultauto.
Resolve: arguments → context → ask user. If $addresses missing after asking, emit STATUS: aborted, REASON: missing required inputs.
Validate each address (xch1... or txch1...). Drop invalid entries and warn the user inline; continue with the valid ones.
Load or initialise state
State file: ~/.chia-skills/state/address-daily-digest__<sha1_of_sorted_addresses>.json.
Shape:
{
"addresses": ["xch1...", "xch1..."],
"last_run_iso": "2026-05-18T08:00:00Z",
"last_run_height": 6532109,
"currency": "usd",
"skill_version": "0.1.0"
}
On first run: record current peak and now. Send a "digest watch started" confirmation with current balances, no historical events. Don't fabricate a back-dated report.
Define the window
Window end = current chain peak (and now for time).
Window start = last_run_height (and last_run_iso for time).
If period_hours is set and now - last_run_iso < period_hours - 5 minutes, this run is early — skip and emit STATUS: no_change, REASON: window not elapsed. (A 5-minute jitter tolerance for cron drift.)
Collect activity
For each address:
- Get all coin records created in the window (received).
- Get all coin records spent in the window (sent).
- Classify each (XCH / CAT / NFT / DID) via puzzle-classification tools.
- Compute ending balance via the balance tool.
For CATs and NFTs, label by asset_id / launcher_id. Unknown CATs: include the asset_id, mark "unknown CAT".
Apply fiat values
Fetch current XCH spot price in $currency once.
For receive-time valuations (more useful for tax / accounting than current valuation), the skill cannot retroactively look up historical XCH prices — chia-explorer's price tool is spot-only. Be explicit about this in the message body: "Fiat values reflect current spot price, not the price at receive time. For tax exports with historical prices, use the address-tax-export skill (roadmap)." Don't quietly mislabel.
Compose the digest
Email-friendly format. Markdown-light, ASCII tables.
Chia digest — 2026-05-19 → 2026-05-20 (24h)
Address: xch1yxq...8yl
INFLOWS (3)
+1.250 XCH block 6,532,210 ~$62.50
+500 USDS block 6,532,210 (CAT)
+1 NFT block 6,532,217 launcher 0xabc...
OUTFLOWS (1)
-0.050 XCH block 6,532,217 ~$2.50 fee 50,000 mojos
NET: +1.200 XCH (~$60.00)
BALANCE NOW: 12.347 XCH (~$617.35 at $50.00/XCH)
Fiat reflects current spot, not receive-time price.
For multi-address digests, repeat the per-address block and add a top-level summary:
Across 2 addresses, 24h period:
Inflows: 3.500 XCH + 500 USDS + 1 NFT
Outflows: 0.050 XCH
Net: +3.450 XCH (~$172.50)
Deliver
Pick channel by priority (email > slack > discord > push > webhook > inline file).
Subject line for email:
Chia digest — <date> (<N> addresses, <N> events)
If sending to a file (no channels available), write to ~/.chia-skills/digests/<iso8601-date>.md.
Update state
Set last_run_iso = now, last_run_height = current_peak. Atomic write.
Scheduling
Wire to:
scheduleskill / cron — daily at a fixed time (e.g. 08:00 local). Weekly at the same.- Manual — re-invoke for an ad-hoc summary, but you'll get whatever happened since the last automated run.
Hard rules
- Read-only. Never sign or push.
- Honest about pricing. Spot price ≠ receive-time price. Say so.
- Don't quietly skip invalid addresses. Tell the user which ones were dropped.
- First run is a "watch started" note, not a report.
Recovery patterns
- One address fails to query. Skip it, note the failure in the digest, continue with the rest. Emit
STATUS: partial. - All addresses fail. Emit
STATUS: failed,REASON: all chia-explorer calls failed. - Channel delivery fails. Save the rendered digest to
~/.chia-skills/digests/, emitSTATUS: partial.
Output
STATUS: success | no_change | partial | failed | aborted
ADDRESSES: <comma-separated list>
INFLOWS: <count>
OUTFLOWS: <count>
NET_XCH: <decimal, positive or negative>
BALANCE_XCH: <sum across addresses>
CURRENCY: <code>
CHANNEL: <channel used> | inline | none
ARTIFACT: <absolute path to saved digest file> | none
REASON: <one line, only when STATUS is failed, partial, aborted, or no_change>