2026-05-08 β Icarus V2 Rebuild Day
Key Decision: The Map
After a comprehensive architecture grill, Matt and I aligned on:
The Vision: Icarus as a standalone sovereign appliance β an M4 Mac Mini running a bespoke daemon, no OpenClaw dependency, no Cloudflare, no cloud model for core loop. Three capabilities: inboxβcalendar, ambient coordination (Telegram shadow), knowledge retrieval (ChromaDB RAG).
Three Director Verdicts:
1. Access β Tailscale Funnel (not Cloudflare/domain). Dashboard = admin console, Telegram = product UI.
2. Infrastructure β Bespoke daemon (not OpenClaw). APScheduler + direct Telegram API calls. Kill the 8 OpenClaw cron dependencies.
3. Config β Template YAML (not hard-coded). Ship template.yaml, Hoffmann profile lives in hoffmann.yaml, engine reads dynamically.
Archived legacy Icarus (22K lines, 84 files) β ~/archive/icarus-legacy-20260508/
Created new Icarus V2 at ~/icarus/ β 1,478 lines, 8 modules.
Built Today
icarus/config/loader.pyβ YAML-based family config loader with inference rulesicarus/tripwire.pyβ V2.1 regex tripwire, 21-test validation, 0.35 thresholdicarus/extractor.pyβ Local LLM extraction (Ollama, adaptive model selection)icarus/event_graph.pyβ Canonical family state store (SQLite, events + extractions tables)icarus/brain/__init__.pyβ ChromaDB knowledge retrieval (single source of truth)icarus/daemon.pyβ Bespoke daemon with IMAP poller, Telegram long-poll, internal schedulericarus/config/families/template.yamlβ Template for new familiessetup.py+pyproject.tomlβ Package structure
Gaming PC stays wired in as M4 facsimile. If architecture hits a wall because dev != target, pivot noted.
File Inventory (New Icarus)
~/icarus/
βββ setup.py / pyproject.toml
βββ icarus/
βββ __init__.py # Package metadata
βββ daemon.py # Bespoke daemon (652 lines)
βββ tripwire.py # Regex signal detection
βββ extractor.py # Local LLM extraction
βββ event_graph.py # SQLite canonical store
βββ config/
β βββ loader.py # YAML family config loader
β βββ families/
β βββ template.yaml # For new families
β βββ hoffmann.yaml # Hoffmann family config
βββ brain/
βββ __init__.py # ChromaDB RAG
Remaining Work (in priority order)
- Wire the HoffDesk IMAP proxy callback to new Icarus modules (replace dead
_on_email_received) - Create optional FastAPI mounts in HoffDesk for Icarus dashboard endpoints
- Migrate the 8 OpenClaw cron jobs to daemon's APScheduler
- Test end-to-end: email β IMAP β tripwire β extraction β event graph
- Write
install.shfor the appliance one-command install
Tripwire Calibration (v2.1)
- 21 test messages: 16 positive + 5 negative
- Fire threshold: 0.35 (down from 0.4 v2)
- Name mention boost: +0.08 when family member name + other signal
- Key fix:
name_mentionpattern neededre.IGNORECASE,hour_onlypattern added for bare hour references - All 21 pass
Cron Separation (afternoon session)
Shadow TTL Purge and Thoth Shadow Ingest β dropped from scope. TTL purge was born of old data paranoia (ChromaDB is Icarus-native now, no shared infra concerns). Thoth is a candidate for the experiments workspace, not a cron.
Midas & Daedalus Crons β Migrated to system crontab
Decision: Market AM/PM briefs (Midas) and Bluesky crosspost (Daedalus) belong to their respective workflows, not OpenClaw's cron system. System crontab is more reliable for simple Python script execution (no 5-minute agent timeout, no DNS dependency on ollama.com).
Changes made:
- Disabled 3 OpenClaw crons: market:am-brief, market:pm-brief, blog:bluesky-crosspost
- Added system crontab entries with correct script paths
- Fixed bug: AM brief was calling daily_briefing.py --am (flag not supported); now calls premarket_briefing.py
- PM brief DNS error (ollama.com resolution failure) was a transient issue, not code
Experiments Directory
Created ~/icarus/experiments/ for shadow-mode parallel testing:
- README.md β rules and how-to
- thoth/adapter.py β Thoth extractor shell, same interface as production
- llm-swaps/README.md β LLM comparison testing guide
- Wired into daemon via env vars: ICARUS_EXPERIMENT, ICARUS_EXPERIMENT_NAME, ICARUS_EXPERIMENT_LOG, ICARUS_EXPERIMENT_PROMOTE
- Experiment runs alongside production, logs comparisons to experiments/<name>/eval_results/
- Auto-promote defaults to off
Remaining OpenClaw Crons (10)
Memory Dreaming β system (memory core)
memory-distill β system (daily log distillation)
memory-wiki-sync β system (wiki sync)
family:daily-brief β Icarus (dev/test, HBM)
shadow-ttl-purge β Icarus (dev/test, to be dropped)
thoth-shadow-ingest β Icarus (dev/test, to be dropped)
shadowbot-metrics β Icarus (dev/test)
maintenance:daily β system
healthcheck β system (Socrates)
OpenClaw status β system (Socrates)