بنقرة واحدة
heartbeat
Proactive ambient check — surface anything worth attention
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Proactive ambient check — surface anything worth attention
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Audit every enabled skill's upstream file dependencies for staleness — flags chained skills about to consume yesterday's article or a long-dead topic file
Audit .github/workflows and composite actions with zizmor + actionlint, classify findings against the prior audit, auto-fix Critical/High regressions, and open a PR only when something actually changed.
Weekly API cost report — computes dollar costs from token usage, flags anomalies, forecasts burn, and prescribes concrete optimizations
Weekly partial-correlation of compute economics against a Hyperliquid macro basket — DePIN-token proxy track runs every week (n>180d), sweep-P&L track defers until n≥30 joined days
Score frontier LLMs (Claude, GPT, Gemini, DeepSeek, Grok) on a private compute-markets task corpus, track score deltas across releases, flag public-vs-private divergence
Save a note as one or more atomic notes under memory/notes/ (and optionally Supernotes). Splits bundled inputs into separate atomic files.
| name | Heartbeat |
| description | Proactive ambient check — surface anything worth attention |
| var | |
| tags | ["meta"] |
${var} — Area to focus on. If empty, runs all checks.
If ${var} is set, focus checks on that specific area.
Read memory/MEMORY.md and the last 2 days of memory/logs/ for context.
Read memory/cron-state.json. This file tracks every scheduled skill's state and quality metrics:
{
"skill-name": {
"last_dispatch": "2026-04-06T12:00:00Z",
"last_status": "dispatched|success|failed",
"last_success": "2026-04-06T12:05:00Z",
"last_failed": "2026-04-05T12:03:00Z",
"total_runs": 10,
"total_successes": 8,
"total_failures": 2,
"consecutive_failures": 0,
"success_rate": 0.80,
"last_quality_score": 4,
"last_error": "error signature text"
}
}
Flag these conditions:
last_status: "failed". Report the skill name and when it failed.last_status: "dispatched" where last_dispatch is >45 minutes ago. The skill was dispatched but never reported back — likely hung or crashed before the state update step ran.consecutive_failures >= 3. This likely indicates an external API is down or rate-limiting. Report the skill, failure count, and last_error. If multiple skills share similar error signatures, flag the shared dependency.success_rate < 0.5 (and total_runs >= 5). The skill is failing more than it succeeds.last_success is >36 hours ago (or missing), note that heartbeat itself may be unreliable.gh pr list)gh issue list)Read aeon.yml for enabled skills with schedules. Cross-reference with memory/cron-state.json:
schedule, and flag only if that occurrence is more than 2 hours ago (the margin absorbs normal dispatcher lag). A freshly-enabled skill whose first window is still upcoming, or passed under 2h ago, is expected to have no entry — do not flag it and do not let it push the status page to 🟡 WATCH.last_success is >2x its schedule interval old (e.g., a daily skill hasn't succeeded in >48h), flag it.schedule: reactive) or on-demand (workflow_dispatch) skills for a missing entry — they have no cron window.Do NOT use gh run list for this — the state file is authoritative.
Before sending any notification, grep memory/logs/ for the same item. If it appears in the last 48h of logs, skip it. Never notify about the same item twice.
Batch all findings into a single notification, grouped by priority tier:
🔴 FAILED: skill-a (failed 2h ago), skill-b (stuck 1h ago)
🟡 STALLED: PR #42 open 3 days
🔵 MEMORY: follow-up on X flagged 2 days ago
After the priority checks (even when everything is green — this step always runs), regenerate docs/status.md so the public GitHub Pages site reflects current fleet health.
memory/cron-state.json — per-skill run state (authoritative)memory/issues/INDEX.md — open issue tableaeon.yml — enabled skill list with schedulesarticles/token-report-*.md (most recent by filename date) — optional; powers the Token Pulse section. Skipped silently when no file exists.Compute one of three overall states from the same signals used above:
🔴 DEGRADED — any P0 flag fired (failed skill, stuck skill, consecutive_failures ≥ 3, chronic failures with success_rate < 0.5, heartbeat self-check >36h stale)🟡 WATCH — any P1/P2/P3 flag fired (stalled PRs, urgent issues, flagged memory items, skills >2x their schedule interval old) or any open issue with severity critical or high🟢 OK — no flags at allWrite docs/status.md with Jekyll frontmatter so it renders as a gallery page:
---
layout: default
title: "Status"
permalink: /status/
---
# Agent Status
**Overall:** 🟢 OK
**Updated:** 2026-04-24 19:06 UTC
**Open issues:** 0
**Next scheduled run:** heartbeat at 20:00 UTC
Auto-generated by the `heartbeat` skill on every run (daily at 08:00 UTC). If the Updated timestamp is more than ~26h stale, the agent is not running.
## Token pulse
| Token | Price | 24h | Liquidity | Volume (24h) | FDV |
|-------|-------|-----|-----------|--------------|-----|
| AEON | $0.0000032626 | -11.16% | $223.4K | $41.3K | $326.3K |
_Source: `articles/token-report-2026-04-28.md` · verdict: SLIDING_
## Skill health (last 7 days)
| Skill | Last run | Status | Success rate | Consecutive failures |
|-------|----------|--------|-------------:|---------------------:|
| token-report | 2026-04-24 12:30 UTC | ✅ success | 100% | 0 |
| fetch-tweets | 2026-04-24 06:53 UTC | ✅ success | 95% | 0 |
| … | … | … | … | … |
## Open issues
_(if INDEX.md has any open rows, render them here; otherwise: "No open issues.")_
| ID | Title | Severity | Category | Detected |
|----|-------|----------|----------|----------|
| ISS-001 | … | medium | rate-limit | 2026-04-22 |
---
*Fork this repo and your copy inherits this page automatically — [how it works](/memory/).*
aeon.yml (not only those with recent runs). For skills with no entry in cron-state.json, show — for timestamp and not yet run in status.YYYY-MM-DD HH:MM UTC (strip seconds and the Z).total_successes / total_runs × 100 rounded to whole percent; display — when total_runs == 0.✅ success, ❌ failed, ⏳ dispatched (if last_dispatch within 45min), 🕸 stuck (if last_dispatch > 45min and last_status still dispatched), — (never run).Next scheduled run: line, pick the enabled skill with the soonest upcoming cron time relative to now.docs/status.md wholesale each time — do not append..env, secrets, or anything outside cron-state.json + issues/INDEX.md + aeon.yml + articles/token-report-*.md. This file is public.articles/token-report-*.md by filename date (sort descending, take the first match)._No recent token data (latest report YYYY-MM-DD)._ in place of the table — do not lift stale figures into the table.## Token pulse section entirely. The status page must still render cleanly with no token row.memory/MEMORY.md "Tracked Token" table (first row, Token column). If the table is missing, render the heading as ## Token pulse with the symbol column blank.Value | 24h Change and new Now | 24h Δ table layouts):
| Price | row → first $ value in the row → strip whitespace.±?\d+(\.\d+)?% token in the row (typically the second cell). Render as written, preserving sign. If absent, render —.| Liquidity | row → first $ value.Volume\b.*24h or 24h Volume → first $ value.| FDV | row → first $ value.$ value cannot be located, render — for that cell only — do not skip the section.**Verdict:** LABEL line, append · verdict: LABEL to the source line. If no Verdict line is present (older format), omit the suffix._Source: ..._ line names the exact article file used so a reader can verify the numbers.The file lands on main through the workflow's auto-commit step — no explicit git commands needed in this skill.
If nothing needs attention, log "HEARTBEAT_OK" (plus the overall status page verdict, e.g. HEARTBEAT_OK · STATUS_PAGE=OK) and end your response.
If something needs attention:
./notify (grouped by priority as above)STATUS_PAGE=DEGRADED — wrote docs/status.md