架构
四层管线 · 采集 → 存储 → 推断 → 呈现。除 Claude API 调用外,全部在本机。
四层管线
📝
采集
三个独立采集源(菜单栏、ambient widget、后台轮询)由 launchd 托管开机自启。5 分钟无操作自动暂停,整夜挂机不算入任何身份。
💾
存储
单文件 SQLite(~/.chronicle/chronicle.db)· 6 个表 · WAL 模式 · 零配置 · 完全离线可用。
🧠
推断
Classifier(主,LLM)+ Heuristic(降级,纯关键词)+ Budget(守门,$10 / 月上限)。唯一跨网络的层。
📖
呈现
每日 digest、离场卡片、周报、inferred 分段。全部以 Markdown 写入 Obsidian vault(iCloud 同步,iOS 可读)。
技术栈
- Python 3.11+ · pyobjc (AppKit / Quartz) · AppleScript (osascript)
- SQLite 3 (stdlib) · WAL mode · 6 tables
- pywebview 6.2.1 · rumps 0.4 · PyYAML · python-dateutil
- Anthropic SDK · Claude Opus 4.7 · prompt caching
- launchd · 4 plist agents (collector / menubar / lobby / classify)
数据模型
events -- 30s poll rows (app + title + ts + context) sessions -- manual switches; may carry an exit-card state -- singleton: current context inferred_segments -- classifier output (per-day time slices) classifier_corrections -- user overrides, fed back as few-shot llm_calls -- cost tracking + budget cap