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
Scanned 9/5/2026
Install to Claude Code
npx -y skills add anajuliabit/aeon --skill followup-patrol --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Followup Patrol?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/anajuliabit-followup-patrol)More formats (shields.io, HTML) on the badges page.
---
name: Followup Patrol
category: productivity
description: 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.
## Voice
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.
## Why this skill exists
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.
## Steps
### 1. Read the follow-up section
Read `memory/MEMORY.md`. Find the follow-up section using this resolution order:
1. A `## Known Follow-ups` section, if present (the canonical home).
2. Otherwise `## Next Priorities` (the default section a fresh Aeon ships with).
3. Otherwise `## 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:
- **Label** — the name/identifier before the em dash or first `—`
- **Date mentioned** — look for dates like `5/12`, `5/25`, `since 4/30`, `24d+`, `12d`, an ISO date, etc.
- **Status type** — classify as one of:
- `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 decision
- `deadline` — has a hard date (e.g. "2026-06-12")
- **Description** — the full bullet text, one line
### 2. Compute age for each item
Today = ${today}. For each item:
- If it contains a date like `5/12` or `since 5/12` → age = days since that date
- If it says `24d+` → age = 24 (or more)
- If it says `12d` → age = 12
- If no date is detectable → age = unknown (treat as WATCH)
Apply 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).
### 3. Read open issues
Read `memory/issues/INDEX.md` if it exists. Find the `## Open` table. Extract each open issue row:
- ID, title, severity, detected date
- Compute age from detected date
Add them to the escalation picture (separate section in output). If `memory/issues/INDEX.md` doesn't exist, skip this section.
### 4. Write `memory/topics/follow-up-status.md`
Overwrite the file:
```markdown
# Follow-up Status — ${today}
*Generated by followup-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.*
```
### 5. Decide whether to notify
- If zero CRITICAL and zero HIGH items: skip notification. Log `FOLLOW_UP_PATROL_SKIP: no escalation-tier items found`.
- Otherwise: always notify.
### 6. Send notification
Write to `.pending-notify-temp/followup-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:
```bash
./notify -f .pending-notify-temp/followup-patrol-${today}.md
```
### 7. Log to `memory/logs/${today}.md`
Append:
```markdown
## 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>`.
## Required Env Vars
None. All reads from local `memory/` files.
## Sandbox Note
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.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!