| name | scheduled-notes |
| description | Persistent notes a scheduled/recurring agent reads as its FIRST action and writes as its LAST action, so a weekly/nightly autonomous run "knows where it left off." Use inside /loop or /schedule tasks that span multiple wake-ups. Pairs with hypothesis calibration and the experiment queue. |
/scheduled-notes — continuity across autonomous wake-ups
Ported pattern: Cognition's "Devin can now schedule Devins" — the weekly
task hands itself a note. Without this, a scheduled run starts cold every
time and can't build on its own prior conclusions.
Convention
At the project root, maintain SCHEDULED_NOTES.md. It's a single
bounded-length markdown file that the scheduled agent edits in place.
Suggested structure:
# SCHEDULED_NOTES.md
_Last updated: <ISO timestamp>_
_Current stage: creative_
## Open threads (pick these up next)
- Line 1: one-sentence thread + pointer to relevant journal node
- Line 2: ...
## Recent conclusions (compact)
- YYYY-MM-DD: outer-product init reduces warmup loss 0.02 (closed #42)
- ...
## Blockers / decisions needed
- (empty or a short note if human input would help)
Keep the whole file under ~2 KB. When it grows, compact into a line of
"conclusions" and drop the oldest threads.
Agent protocol
First action of every scheduled run:
cat SCHEDULED_NOTES.md
Last action before exit:
The natural composition is:
- Read
SCHEDULED_NOTES.md → know where you left off.
python3 .claude/scripts/queue.py next --json → pop next queue item.
- Do the work (launch via autopilot_loop.sh or ad-hoc).
- Close journal node + calibration.
- Update
SCHEDULED_NOTES.md (what got done, what's next).
- Exit.
Failure mode: silent drift
If the agent stops writing the notes, you lose continuity. The
check-scheduled-notes helper (below) can flag when the file's
Last updated: timestamp drifts from reality.
mtime() {
if stat -c %Y "$1" 2>/dev/null; then :;
else stat -f %m "$1" 2>/dev/null; fi
}
if [ "$(date +%s)" -gt $(( $(mtime SCHEDULED_NOTES.md) + 86400 )) ]; then
.claude/scripts/notify.sh 2 "scheduled-notes stale" \
"SCHEDULED_NOTES.md not updated in >24h; something is wrong"
fi
Why not just use STATE.md?
STATE.md is Claude's always-on context (it's referenced by CLAUDE.md).
SCHEDULED_NOTES.md is specifically for the agent-to-its-future-self
pattern. Keeping them separate keeps STATE.md clean for human reading
and lets scheduled runs churn through notes aggressively.