status: DESIGN (NOT shipped — awaiting Harnoor approval)
drafted: 2026-04-22T23:10 UTC
author: TITAN
target-release: R0177 / T022
TITAN has 15 independent scheduled cron tasks. 8 of them form a hidden DAG every morning (backup → log-rotation → reindex → feed → improve → monologue → newsletter → pa-email). We can replace those 8 with 1 titan-morning-swarm orchestrator that runs a 4-stage DAG with full observability. And 2 Sunday system tasks (benchmark + dream) can merge into 1 weekly-maintenance swarm.
Outcome: 15 → 9 cron tasks. Zero lost capability. Major observability gain.
| Current task | Current cron | New stage |
|---|---|---|
| titan-daily-backup | daily | Stage 1 parallel |
| titan-daily-log-rotation | daily | Stage 1 parallel |
| titan-nightly-reindex | 3:33 AM | Stage 1 parallel (prev-day) |
| titan-daily-feed | 4:33 AM | Stage 2 |
| titan-daily-improve | daily | Stage 3 parallel |
| titan-daily-monologue | daily | Stage 3 parallel |
| titan-daily-newsletter | daily | Stage 3 parallel |
| titan-daily-pa-email | 5:27 AM | Stage 4 |
| Current task | Current cron | New stage |
|---|---|---|
| titan-weekly-benchmark | Sun 6:17 AM | parallel |
| titan-weekly-dream | weekly | parallel |
cron: 30 3 * * *
Stage 1 (parallel, t=0min):
├─ backup-agent → E:/TITAN-backups/<date>/
├─ log-rotation-agent → rotate logs >50MB
└─ reindex-prev-agent → embed yesterday's staging files
Stage 2 (t=5min, after Stage 1):
└─ feed-agent → F:/TITAN/knowledge/staging/<date>/
Stage 3 (parallel, t=30min, after Stage 2):
├─ improve-agent → reads telemetry + staging, writes 1 T-number
├─ monologue-agent → reads telemetry + staging, writes journal
└─ newsletter-agent → reads staging, drafts Gmail newsletter
Stage 4 (t=55min, after Stage 3):
└─ pa-email-agent → reads improve output + monologue, sends 5:27 AM briefing
Every stage appends to F:/TITAN/logs/morning-swarm-YYYY-MM-DD.json:
{
"date": "2026-04-22",
"stages": [
{"id": 1, "started_at": "03:30:00", "agents": [...], "status": "complete"},
{"id": 2, "started_at": "03:35:12", "agents": [...], "status": "complete"},
...
],
"total_duration_s": 3300,
"pa_email_sent_at": "05:27:14"
}
If any agent fails, the orchestrator continues later stages using fallback content (e.g. pa-email ships without improve content but with a [improve failed — see log] note). This is CRITICAL — must never silently skip the 5:27 AM email.
~/.claude/scheduled-tasks/titan-morning-swarm/SKILL.md:
---
name: titan-morning-swarm
cron: 30 3 * * *
description: 4-stage morning DAG. Replaces 8 independent daily crons with one observable orchestrator.
---
STAGE 1 — parallel (backup | log-rotation | reindex-prev)
Dispatch 3 forge agents in parallel. Await all. Log each status to state file.
STAGE 2 — feed
Dispatch ORACLE agent with /feed skill. Write to staging/<today>/. Log status.
STAGE 3 — parallel (improve | monologue | newsletter)
Dispatch 3 agents. Each reads staging/<today>/ + telemetry. Await all. Log status.
STAGE 4 — pa-email
Dispatch agent with /pa-email skill. Reads today's improve output + monologue + upcoming calendar. MUST NOT FAIL the 5:27 AM send — if upstream stages missing outputs, use fallback template.
At completion, write final state JSON + append one line to F:/TITAN/logs/morning-swarm-trend.tsv.
1. Week 0: Ship titan-morning-swarm ALONGSIDE existing 8 tasks. New task writes state JSON + appends [DRY-RUN] marker. Existing tasks still do real work. Compare outputs side-by-side for 7 days.
2. Week 1 (after 7 days of dry-run showing parity): Flip orchestrator to real mode. Disable (don't delete) the 8 old tasks by adding enabled: false to their frontmatter.
3. Week 4 (after 21 days of real mode with 0 incidents): Delete the 8 old task directories.
This gives a 4-week rollback window at every step.
~6 hours (orchestrator skill + state file format + 4 weeks migration window)
titan-inbox-watch into any swarm — it's event-driven (user sends email), different rhythm from system cron tasksclaude-code-audit-every-6h with morning swarm — 6h cadence is intentional; morning swarm is 24h cadencetitan-weekly-review into weekly-maintenance-swarm — review is user-facing Sunday evening, maintenance is system-internal Sunday morning. Different audience, different time, different content.Once approved:
1. Write titan-morning-swarm orchestrator SKILL.md
2. Deploy in dry-run mode alongside existing 8 tasks
3. 7-day parity verification
4. Flip to real mode + disable old tasks
5. Delete old tasks after 3 weeks of real-mode stability
Email Harnoor with the summary + this memo.