con un clic
follow-up-patrol
// Weekly escalation audit — parses the follow-up / open-loop section of MEMORY.md plus the issue tracker, computes item ages, and alerts on items hitting urgency thresholds so nothing rots unattended
// Weekly escalation audit — parses the follow-up / open-loop section of MEMORY.md plus the issue tracker, computes item ages, and alerts on items hitting urgency thresholds so nothing rots unattended
Daily fleet-wide scorecard across this instance and every managed instance in memory/instances.json — runs, tokens (OpenRouter shape), est. cost, skills, and reliability, with day-over-day deltas and alerts
Weekly tracker for the Model Context Protocol (MCP) ecosystem — new server implementations, adoption velocity, npm/GitHub signals, and protocol evolution. Thesis check — is MCP becoming the default tool-call rail for agents?
Daily cross-skill signal detector — finds entities or themes surfaced independently by 3+ different skill categories in the last 48h and surfaces them as high-confidence write opportunities
Daily API spend watchdog — checks running weekly cost against a budget cap, alerts when approaching or exceeding it
Audit any contract on Base — verification, proxy/upgradeability, ownership/admin roles, and mint/freeze/pause/drain powers as a live capability matrix. Keyless via Etherscan v2 + Base RPC.
Map every contract deployed by an address on Base, link reused patterns, and surface serial-rug signals. Keyless via Etherscan v2 + Base RPC.
| name | follow-up-patrol |
| description | Weekly escalation audit — parses the follow-up / open-loop section of MEMORY.md plus the issue tracker, computes item ages, and alerts on items hitting urgency thresholds so nothing rots unattended |
| var | |
| tags | ["meta","ops","memory"] |
| schedule | 0 11 * * 2 |
${var} — Optional filter (e.g. "security", "release", "disclosure"). If empty, audits everything.
Today is ${today}. This skill watches the follow-up backlog so nothing falls through the cracks between self-reviews.
If soul/SOUL.md and soul/STYLE.md exist and are populated, read them and match the operator's voice in the notification. Otherwise use a clear, direct, neutral tone — state what needs to happen, no hedging.
Open loops accumulate in MEMORY.md between reviews. Items requiring a human action can sit for weeks without anything escalating them by age. Other skills cover specific lanes (e.g. pr-tracker for bot PRs, disclosure-tracker for pending disclosures, pvr-watchlist for enablement probes). This skill is the catch-all — the general follow-up backlog plus the issue tracker, escalated by age.
Read memory/MEMORY.md. Find the follow-up section using this resolution order:
## Known Follow-ups section, if present (the canonical home).## Next Priorities (the default section a fresh Aeon ships with).## Open Loops or any heading containing "follow" / "todo" / "pending".Extract every bullet point under the matched section. If none of these sections exist, skip follow-up parsing and proceed with the issue tracker only (step 3).
For each bullet, parse:
—5/12, 5/25, since 4/30, 24d+, 12d, an ISO date, etc.operator — requires manual human action (e.g. "operator: open PR", "rotate key X")auto — being handled by another skill on a schedule (e.g. "pvr-watchlist probing 6/1")deferred — explicitly deferred pending a decisiondeadline — has a hard date (e.g. "2026-06-12")Today = ${today}. For each item:
5/12 or since 5/12 → age = days since that date24d+ → age = 24 (or more)12d → age = 12Apply urgency tiers:
| Tier | Condition | Action |
|---|---|---|
| CRITICAL | age > 21d AND type = operator | Must escalate immediately |
| HIGH | age > 14d AND type = operator | Escalate this cycle |
| MEDIUM | age > 7d (any type) | Note and monitor |
| WATCH | age ≤ 7d OR type = auto/deferred/deadline | Informational only |
If ${var} is set, only process items whose text contains ${var} (case-insensitive).
Read memory/issues/INDEX.md if it exists. Find the ## Open table. Extract each open issue row:
Add them to the escalation picture (separate section in output). If memory/issues/INDEX.md doesn't exist, skip this section.
memory/topics/follow-up-status.mdOverwrite the file:
# Follow-up Status — ${today}
*Generated by follow-up-patrol. Next run: next Tuesday 11:00 UTC.*
## CRITICAL (operator action required, >21d)
| Item | Age | Type | Action Needed |
|------|-----|------|---------------|
## HIGH (operator action required, >14d)
| Item | Age | Type | Action Needed |
|------|-----|------|---------------|
## MEDIUM (>7d)
| Item | Age | Type | Notes |
|------|-----|------|-------|
## WATCH (<7d or auto-tracked)
| Item | Age | Type | Notes |
|------|-----|------|-------|
## Open Issues
| ID | Title | Severity | Age |
|----|-------|----------|-----|
---
*Items in CRITICAL/HIGH tiers require operator attention. AUTO items are handled by scheduled skills.*
FOLLOW_UP_PATROL_SKIP: no escalation-tier items found.Write to .pending-notify-temp/follow-up-patrol-${today}.md (create the dir if needed):
follow-up patrol — ${today}
open issues: N (severities)
CRITICAL (>21d, operator): N items
- [label] — Nd — [one-line action]
HIGH (>14d, operator): N items
- [label] — Nd — [one-line action]
MEDIUM (>7d): N items
[brief list]
WATCH: N items (auto-tracked)
full breakdown: memory/topics/follow-up-status.md
Keep under 800 chars. State what needs to happen.
Then run:
./notify -f .pending-notify-temp/follow-up-patrol-${today}.md
memory/logs/${today}.mdAppend:
## Follow-up Patrol
- **Items parsed:** N
- **CRITICAL:** N
- **HIGH:** N
- **MEDIUM:** N
- **WATCH:** N
- **Open issues:** N
- **Notification:** sent / skipped
- FOLLOW_UP_PATROL_OK
If skipped: FOLLOW_UP_PATROL_SKIP: <reason>.
None. All reads from local memory/ files.
No network calls required. All data comes from local memory/MEMORY.md and memory/issues/INDEX.md — both committed to the repo and available in every run after checkout. The only outbound call is ./notify, which is already sandbox-safe.