signal-verdict
$
npx mdskill add aaronjmars/aeon/signal-verdictToday is ${today}. Read `memory/MEMORY.md` before starting.
SKILL.md
.github/skills/signal-verdictView on GitHub ↗
---
name: signal-verdict
description: Weekly accountability check on a configured set of tracker skills. Verifies each tracker is producing citable signals in articles/newsletters. Surfaces uncited trackers so the operator can demote or kill them.
schedule: "0 8 * * 1"
commits: true
permissions:
- contents:write
tags: [meta, ops]
---
Today is ${today}. Read `memory/MEMORY.md` before starting.
## Voice
If `soul/SOUL.md` and `soul/STYLE.md` are populated, read both and match the operator's voice for the notification. If they are empty templates or absent, write in a clear, direct, neutral tone — position first, no hedging, no corporate softeners.
## Why this skill exists
When you ship many tracker skills in a short window, it's easy to lose track of which trackers are actually feeding written output and which are just running. `skill-health` answers "did the skill run?" — `signal-verdict` answers a different question: **did the output inform anything that got published outward?** Trackers that fail this check repeatedly should be demoted (less-frequent schedule) or retired.
## Config
This skill is parameterized via `memory/topics/tracked-skills.md`. If the file doesn't exist, create the seed below and exit on this run (no notification — operator needs to fill it in):
```markdown
# Tracked Skills (signal-verdict)
## Verdict Bar
- **Deadline:** <YYYY-MM-DD> # by this date, each tracker must have ≥1 citation
- **Rule:** Each tracker must cite a signal in a daily/newsletter article between its first run and the deadline, or get demoted.
## Trackers Under Review
| Tracker | First Run | Verdict Bar | Status | Citation Weeks | Total Weeks |
|---------|-----------|-------------|--------|----------------|-------------|
| <skill-name> | YYYY-MM-DD | YYYY-MM-DD | pending | 0 | 0 |
## Keyword Map
```yaml
<skill-name>:
- "<keyword 1>"
- "<keyword 2>"
<skill-name-2>:
- "<keyword 1>"
```
## Weekly Log
(populated on each run)
```
Each `Tracker` row + the matching `Keyword Map` entry defines one tracker under review. To add or remove a tracker, edit this file — no skill code changes.
## Steps
### 1. Load context
Read `memory/MEMORY.md` and the tracker list + keyword map from `memory/topics/tracked-skills.md`. Extract:
- Per-tracker current status and citation counts
- Date of last run
- Verdict deadline
- Keyword map (used in step 3)
If the keyword map is empty for a tracker, log a warning and skip that tracker for this run.
### 2. Find articles from the past 14 days
```bash
ls articles/ | grep -E "^[0-9]{4}-[0-9]{2}-[0-9]{2}\.md$" | sort | tail -14
ls articles/ | grep -E "newsletter|weekly" | sort | tail -10
```
Read each file. **Exclude** ops articles (these don't count as "outward content"):
- `articles/self-review-*.md`
- `articles/skill-evals-*.md`
- `articles/vuln-scan-*.md`
- `articles/batch-health-*.md`
- `articles/repo-pulse-*.md`
What counts as "outward content":
- Daily articles (`articles/YYYY-MM-DD.md`)
- Weekly newsletters (`articles/newsletter-*.md`, `articles/weekly-*.md`)
- Any article whose main thesis or a substantive section discusses the tracker's topic area
### 3. Score each tracker for this week
For each tracker in the keyword map, search the article texts (from step 2) for any keyword match. A tracker is:
- **CITED** if at least one of its keywords appears in a substantive paragraph (not just a passing reference) of an outward-content article from the last 7 days
- **UNCITED** if no qualifying mention exists
**Citation threshold:** Minimum 1 substantive mention. A log entry in `memory/logs/` does NOT count — this check is about content published outward. A passing mention in a notification preamble does NOT count.
### 4. Compute verdict status
For each tracker:
- **CITED** this week: `citation_weeks += 1`, `total_weeks += 1`
- **UNCITED** this week: `total_weeks += 1` only
**Verdict determination** (only if today ≥ deadline):
- `citation_weeks ≥ 1` → **PASS** (keep on current schedule)
- `citation_weeks == 0` → **FAIL** (demote to monthly)
If today < deadline: status stays `pending`, but track the running score.
**Running labels** (used in the notification):
- `0/N` weeks cited — at risk
- `1–2/N` weeks cited — borderline
- `3+/N` weeks cited — tracking well
### 5. Update `memory/topics/tracked-skills.md`
- Rewrite the `Trackers Under Review` table with updated `Citation Weeks`, `Total Weeks`, and `Status`
- Append a `Weekly Log` entry:
```
- ${today}: [N/total cited] — cited: [tracker1, tracker2] | uncited: [tracker3, tracker4] | articles scanned: N
```
If any tracker status becomes `demote`, append a `## Demotion Queue` section listing each demoted tracker with the recommended `aeon.yml` schedule edit.
### 6. Notify
Write notification to `.pending-notify-temp/signal-verdict-${today}.md`, then:
```bash
./notify -f .pending-notify-temp/signal-verdict-${today}.md
```
Format (voice per the Voice section above):
Normal week:
```
signal verdict — ${today}
<N>/<total> trackers cited this week. <M> weeks to verdict bar (<deadline>).
cited:
- <tracker>: <article_date> — <one-line on the signal it contributed>
uncited:
- <tracker>: no article cited <main_topic_keyword> this week
⚠️ <tracker>: at risk — <N> weeks to deadline, 0 citations so far ← only if any are at risk
state: memory/topics/tracked-skills.md
```
All cited:
```
signal verdict — ${today}
all <total> trackers cited this week. tracker fleet earning its schedule.
```
Verdict week (today ≥ deadline):
```
signal verdict — verdict run
<N>/<total> trackers pass. <M>/<total> demoted.
pass: <list>
demote → monthly: <list>
demotion: update aeon.yml schedule for <demoted_trackers> to monthly
```
Keep total under 700 chars. Skip notification only if this is the first run AND no articles exist yet — log `SIGNAL_VERDICT_OK: no articles yet` instead.
### 7. Log
Append to `memory/logs/${today}.md`:
```markdown
## Signal Verdict
- **Cited this week:** <N>/<total> — <list of cited trackers>
- **Uncited this week:** <list of uncited trackers or "none">
- **Articles scanned:** <count>
- **Weeks to verdict bar:** <days> days (<deadline>)
- **Verdict status:** <pass/fail/pending summary>
- SIGNAL_VERDICT_OK
```
If verdict bar passed and any tracker demoted:
```
- SIGNAL_VERDICT_DEMOTE: <tracker1>, <tracker2>
```
## Required Env Vars
None. Uses file reads and `./notify`. No external API calls.
## Sandbox Note
Pure file I/O — reads articles and writes memory files. No network calls needed. `./notify -f` handles the notification (use Write tool to create the file, then run `./notify -f path`).
## What counts as a citation
✓ Counts:
- Daily article (`articles/YYYY-MM-DD.md`) with substantive paragraph about the tracker's topic area
- Weekly newsletter with a section on the tracker's topic
- A thesis or angle that originated from the tracker's output, even if the tracker isn't named
✗ Does NOT count:
- Memory log entries or skill run logs
- Ops articles (self-review, skill-evals, vuln-scan, batch-health, repo-pulse)
- Passing mention in a notification preamble
## Notes
- This skill is a **meta-auditor** — it works for any tracker fleet the operator wires up.
- Add a tracker → add a row to the table + a stanza in the keyword map. No code changes.
- Remove a tracker → delete its row + keyword stanza. The next run drops it from the verdict.
More from aaronjmars/aeon
- [REPLACE: SKILL_NAME]Daily digest of the most interesting new posts on [REPLACE: TOPIC] from RSS feeds and the open web
- Action Converter5 concrete real-life actions for today, leverage-scored against open loops with specificity and anti-fluff gates
- Agent BuzzCurated AI-agent tweets, clustered into narratives with insight summaries
- agent-displacementWeekly tracker of AI agent substitution signals — which roles, companies, and industries show real headcount displacement. Named roles + real deployments only.
- AI Framework WatchWeekly competitive-intelligence digest on the AI agent framework space — momentum, releases, breaking changes across a curated watchlist
- AIXBT PulseCross-domain market pulse from AIXBT's free grounding endpoint — crypto, macro, tradfi, geopolitics. Refreshes taxonomy references (clusters, chains) as a bonus.
- api-health-probeDaily pre-batch API provider health check — detects credit exhaustion or auth failure for every configured provider key before the morning batch runs, giving the operator a window to act before skills degrade
- Approval AuditList a wallet's live ERC-20 token approvals on Base and flag unlimited / risky spender grants. Keyless via Base RPC (eth_getLogs + eth_call) — no explorer key needed.
- article-queueWeekly article idea synthesizer — ranks signals from topic-momentum, beat-tracker, and narrative-tracker into a prioritized queue the article skill reads on next run
- atrium-catalog-watcherWeekly diff of the Atrium marketplace catalog at https://atriumhermes.tech/.well-known/skills/index.json against the prior snapshot — surfaces newly-published skills, removed skills, and updated descriptions. Supply-side complement to sparkleware-catalog (curated skill-packs.json registry) and skill-update-check (version drift of installed skills).