v0.9.0 · Skill-first architecture + touch + tap-ack + boot preservation
首个面向最终用户的版本。装上 Skill 后由 AI Agent 全程引导烧固件、配 Wi-Fi、推内容;不再需要用户手动跑
pio或curl。
主要变化
Skill-first 架构
- 根
SKILL.md成为 agent-agnostic 入口(Claude Code / Codex / Cursor / Aider 等都能识别) scripts/state.sh统一状态探测 → JSON 输出 hardware / firmware / daemon / transport / device / wifi / interestsflows/01-077 个子流程(install / transport / wifi / interests / push / schedule / sleep)按需读取- 老的 plugin/ slash 命令保留作为 Claude Code 兼容层
触屏 + 点击反馈
- 固件 50 Hz 直接 poll GT911(不依赖 IRQ,V1.1 GPIO 36 没内部上拉)
- 按下 chip 立即 EPD partial refresh (A2 mode) ~150 ms 白色 ACK 反馈
- daemon 通过
cmd:set_chips把 chip rects 推给固件,固件本地 hit-test 不依赖 daemon 来回
设备 liveness
- 新
GET /heartbeatendpoint:{alive, last_seen_seconds, active_transport, battery_pct, uptime, firmware} - 底栏正确显示当前传输(Wi-Fi / USB / BLE)而非启动时的初始选择
- Device 90 秒没回包时底栏显示 OFFLINE
Wi-Fi 回程通道
- 固件在 wifi_connected 时把 status_report / touch event POST 给 daemon(daemon IP 从最近的 /frame 入站请求 cache)
- Arch A (Wi-Fi only) 终于有了 device → daemon 的回包路径
- 副通道:daemon 在 Wi-Fi 主传输时,如果 USB 也插着,自动开 read-only 副串口当 fallback
自动 quiet hours 名片
- daemon 后台线程读
~/.ai-desk-card/interests.yaml,到quiet_hours.start自动渲染电子名片 + 设备 deep sleep - 不需要 Agent 在线触发
Boot 体验
- RTC slow memory 记 magic — 第一次显示帧后置上,软重启 / 拔 USB 再插 /
cmd:sleep_now醒来都保留上一帧(e-ink 物理 0 功耗特性) - 真正首次开机才画 install splash,splash 现在带 GitHub URL + 给 AI 的指令 + BLE 配对名
多个 Wi-Fi / 启动鲁棒性 bug 修复
- mDNS 探测 2.5s → 8s(避免烧固件后立即 daemon 启动降级到 32s/帧的 USB serial)
WiFiTransport.connected()不再 sticky-false(单次 POST 超时不再永久锁死传输)- 持久化 last_frame 在设备重启时主动 reset(避免推 144×33 diff 留 splash)
文档
- 中文 README 设为主文档(README.md),英文 mirror(README.en.md)
- HANDOVER.md 重写:覆盖架构图、11 个真实踩过的 bug + 修法、调试 recipe、扩展指南
- PRODUCT.md 重写:产品 / 思考 / 体验 / 预测 / 用户 5 段叙事
30 秒开始
npx skills add https://github.com/op7418/ai-desk-card --skill ai-desk-card或发给你的 AI Agent:
帮我装 ai-desk-card Skill。把 https://github.com/op7418/ai-desk-card 克隆到 ~/.claude/skills/ai-desk-card。
之后跟 Agent 说:
帮我把卡片装上,M5Paper V1.1 已经插好了。
Skill 会自动探测硬件、烧固件、起 daemon、配 Wi-Fi、推第一个 widget。
已知限制(v0.10 计划修)
- 硬件长按旋钮 2s = AXP192 切电源,固件来不及拦截。
/card-sleep走 deep_sleep 名片正常;硬关机会停在最后一帧 - BLE frame-data 路径长包重组有 bug,目前 BLE 只跑小命令,frame 走 Wi-Fi
完整变更见 HANDOVER.md § 已知问题。