| name | circadian |
| description | Daily rhythm — morning brief, midday check, evening wrap. Auto-routes by time-of-day phase. "morning brief", "midday check", "evening routine", "circadian". For stateless any-time situational snapshots, use kairos instead. |
| effort | high |
| user_invocable | true |
| triggers | ["circadian","entrainment","ultradian","interphase","germination","morning brief","evening routine","what ran overnight","polarity","co-trending","gradient","focus","lunch","what to eat","log lunch"] |
| context | fork |
| epistemics | ["plan","monitor"] |
| model | sonnet |
Circadian — daily rhythm engine
One skill, four phases. Run date first, then route by time. All old trigger words still work.
Router
| Time (HKT) | Phase | Old skill | Entry point |
|---|
| 06:00–10:00 | Dawn | entrainment + germination | pinocytosis(action="overnight") + pinocytosis(action="morning") |
| 10:00–17:00 | Day | ultradian | ultradian-gather |
| 17:00–21:00 | Dusk | interphase | pinocytosis(action="evening") |
| On-demand | Day | ultradian | ultradian-gather (regardless of time) |
| Weekend | Day (relaxed) | ultradian | Same phases, skip work-specific tasks (job alerts, heavy Praxis) |
| Holiday | Day (relaxed) | ultradian | Treat as weekend. Calendar all-day event with holiday keyword. |
Day-type detection: Before routing, call detect_phase via circadian_clock organelle (returns is_weekend, is_holiday, is_workday). On weekends and holidays:
- Skip job alerts, LinkedIn scanning, and work-heavy Praxis items
- Dusk phase is optional — no inbox triage unless explicitly requested
- Dawn phase still runs (sleep + readiness always relevant)
- Day phase becomes "personal backlog" — creative projects, reading, gym planning
If the user explicitly says "morning brief" after 10am or "evening routine" before 5pm, honour the explicit request over the time router.
Phase: Dawn (entrainment + germination)
Rule: read biometric state before advising on the day's load.
Steps
- Call
pinocytosis(action="overnight") — aggregates sleep + overnight alerts in one call. Do not call sopor separately.
- Call
pinocytosis(action="morning") — automation results, NEEDS_ATTENTION flags. Both always run; they sense different systems.
- Readiness < 65 → flag explicitly before discussing workload. Cross-ref
~/epigenome/marks/user_health_exercise_readiness.md (< 70 = light only, resume > 75).
- Active experiments →
assay list — surface experiment day and status.
- Right-sided morning headache → check
~/epigenome/marks/user_health_sleep_headache_pattern.md.
- Overnight alerts → any NEEDS_ATTENTION or CRITICAL lines surface immediately.
- "No overnight data" → note automation may not have run.
- Ribosome queue → check
loci/translation-queue.md, dispatch up to 4 pending tasks. Ribosomes start working immediately while Terry reviews the brief.
Anti-patterns
- Don't skip germination just because entrainment ran — they sense different systems
- Don't proceed with heavy planning at low readiness — recommend lighter day first
- Don't assume "no flag" means everything passed — call pinocytosis(action="morning") to confirm
Phase: Day (ultradian / kairos)
Design principle: single entry point for "what now?" Every automated system feeds into this — Terry never needs to remember what's running.
Steps
- Run
ultradian-gather (or ultradian-gather --json)
- Time + Calendar + Reminders — flag anything within 60min (imminent) or 2-4h (good to know)
- Active decisions and gates — from NOW.md, pull open decisions
- LinkedIn job alerts (post-noon only) — if unchecked flags exist, surface briefly
- Overdue and today's TODO — from Praxis.md, max 5 items, most time-sensitive first
- Goose task queue — surface count of done/ tasks needing review. If any exist, prompt CC to read
done/*.md, check the ## Result section, and approve or redispatch.
- Focus sensing (gradient) — when user asks "what should I focus on?" or priority planning:
- Run
proprioception(target="gradient") (default 7-day; 14 for career/health, 3 for recent spikes)
- Read topology:
independent 2-sensor > adjacent 2-sensor. Coverage >= 2 is confirmed.
diffuse = no clear axis — report as isotropic, don't force interpretation
- If polarity diverges from stated goals (North Star.md), surface the gap explicitly
- Meal suggestion (noon only) — if time is 11:30-13:30:
- Read
~/epigenome/chromatin/Health/Weekly Meal Plan - Taikoo Place.md
- Check today's rotation slot + last 3 order log entries
- Suggest one dish. Gym day = favour protein + omega-3.
- After eating: log to
## Order log section as - YYYY-MM-DD (Day): Restaurant, dish.
Time-aware synthesis
| Context | Route |
|---|
| Commute / transit | Surface today's efferens (daily AI brief). Read and present key items. |
| Pre-meeting (< 45 min) | Lead with upcoming event + prep items. Brief. |
| Post-meeting (< 30 min ago) | Flag follow-up capture. |
| Free block (2+ hours) | Top 1-2 priorities. Prefer compounding outputs. Energy diagnostic: depletion → mechanical task; resistance → name what's avoided. |
| Late afternoon (> 5pm) | Flag EOD proximity. |
| Nothing to surface | Say so plainly. Offer inbox check or low-energy tasks. |
Output format
One short paragraph. No headers, no bullets unless 3+ overdue items. Lead with time, close with clearest next action.
Boundaries
- Do NOT scan engram/session history — Day phase is forward-looking
- Do NOT mutate files — read-only situational routing
- If entrainment ran recently (same session), skip repeat items, surface only what changed
Phase: Dusk (interphase)
Boundary: Dusk = work closure on commute. If Terry is at home winding down, this phase ends. Phone-friendly (Blink/tmux). Target: one bus ride.
Steps
- Gather — call
pinocytosis(action="evening") (inbox, WhatsApp, calendar, Praxis, budget, reminders, email threads, priming entries)
- Inbox triage —
sorting_thread on every unread + Cora-archived Important Info/Context emails. Read Cora briefs. Decide: action_required / monitor / archive. Update Email Threads Tracker.
- Messages — WhatsApp via
keryx read, LinkedIn. Draft only, never send.
- Brain dump — ask: "Anything still rattling around?" Capture to daily note.
- What shipped today — read daily note cytokinesis logs. Write 2-3 line summary. If consulting-relevant, append spark to
_sparks.md.
- Tomorrow prep — calendar, checkpoint, Praxis, Schedule.md in parallel. One-line prep per meeting. Thursday: check token reset.
- Nudge — blocked items needing follow-up. One-line per item.
- Daily note close — call
emit(action="interphase_close") with shipped, tomorrow, open_threads, nudges, day_score (1-5). This is the canonical tool; do not write the daily note manually.
- Flush priming — check
WHEN: next session triggers.
- Praxis sync — update resolved, add new, mark blocked.
Then: "You're done. Evening is yours."
Fail states
cora brief show crashes → porta run --domain cora.computer fallback
gog gmail fails → note "inbox skipped", continue
- Any step fails → skip it, never block the whole routine
Boundaries
- Draft only — never send (WhatsApp, email, LinkedIn)
- No deep reflection or extended conversation
- Only update: daily note, Email Threads Tracker, Praxis
Phase: Germination (overnight results detail)
Used by Dawn phase and also available standalone when diagnosing overnight automation.
pinocytosis(action="morning") — dashboard, latest run summary, NEEDS_ATTENTION status
germination_results <task> — drill into one task's output (only on failure or user request)
germination_list — history across runs (only when diagnosing recurring failures)
Anti-patterns
- Don't drill all tasks by default — brief first, drill only on failures
- Don't report raw output verbatim — extract NEEDS_ATTENTION lines, bury the noise