2026-05-02 AI 學習日誌

今日最有感的事

今天最有感的不是寫了什麼炫的功能,是把一條完整的 agent 工作流從頭到尾蓋好、然後標一個 [[Done]] 收尾——這比單獨做任何一個元件都更接近「AI 真的在工作」。

這條流水線長這樣: 我在 Roam 裡寫一條素材 block(這次是 EMR「病歷記事欄」截圖加一行病人家屬留下的提醒)→ 給 Claude Code block UID → 它讀 Roam、生 Threads 風草稿、推 Discord 主頻道讓我審 → 我在 Discord reply 1 okpublish.py 真的把文發到 Threads → permalink 自動回到原 Roam block 標 [[Done]]。整條流程用 /threads-post skill 包好,下次只要丟 UID 就跑全套。

寫這個 skill 的過程裡,有幾條鐵律是我堅持要寫進 SKILL.md 的:

  • Discord 確認就是流水線本身——chat 端的 ok 不算數,必須在 Discord 主頻道 reply。Discord 是我的「最終審查台」,能在手機看圖實際呈現、隔天看、跟其他訊息一起評估。
  • publish 文字必須跟確認版逐字一致——禁臨場潤飾、禁「我覺得這樣更順」。Threads 不可逆,一次失誤就是污點。
  • publish 前最後一步要把 --text 整段複製回 chat show 一次讓我眼睛看到要發的字。
  • 跳過模式不標 Done——避免之後 Roam query 把沒發的也算進去。

這四條看起來像 paranoia,但每一條都是踩過坑來的(最早某次 Claude 把另一篇 draft 開頭句帶進這篇 publish 指令,結果發出去多了一句我沒同意的文字。Threads 沒有 delete API 權限,只能手動刪)。

順便意外解開的觀念

今天 Roam daily note 有一整段「Discord ccbot 大整修 — 9 個 Q&A 解惑」是我前一個 session 卡 context 滿時釐清的。最大收穫是分清楚兩件事:

  • 「ccbot 自己的腦袋會清」(in-memory context)
  • 「Discord 訊息永遠在」fetch_messages 拉得到)

之前我會擔心「白天 ccbot 失憶過,晚上 9 點抓素材會不會啥都沒有」,現在知道答案是「不會,因為晚上跑 SOP 時它會 fetch_messages 重新拉今天訊息,不靠記憶」。

這影響我之後設計所有 agent workflow 的方式:agent 的 in-memory state 不該是「記憶」的源頭,永遠把外部系統(Discord / Roam / Supabase / git)當權威,agent 只是讀寫的執行手。

今天踩的最痛坑

launchd 跑 wrapper script 我第一版放在 ~/Desktop/Claude Code專用檔/threads-bot/6 小時 silent fail,stderr 全是 Operation not permitted。原因是 macOS Full Disk Access 機制——launchd-spawned /bin/bash 預設不能讀 Desktop。launchctl list 顯示 status 126 我沒注意到,等我問「有抓到留言嗎」才發現整個排程都沒跑。

修法:腳本搬到 ~/scripts/threads-bot/,這個路徑沒 TCC 限制。memory 加了一條,下次新建 launchd job 不會再放 Desktop。

今日收集的資源

  • Threads Graph API:留言 polling 比 webhook 簡單太多
    • 連結:GET /<media_id>/replies + GET /<user_id>/threads官方文件
    • 一句說明:Meta 的 Threads webhook 要 App 審核 + 公開 callback URL,麻煩。直接 polling 每小時打一次 API 撈 user 所有文章 + 留言,比對 state file 找新的,推到 Discord 就好。最差延遲 1 小時,對個人帳號完全夠用。
  • macOS launchd TCC:scripts 不能放 Desktop
    • 連結:Apple Privacy & Security 文件
    • 一句說明:launchd-spawned /bin/bash 預設不能讀 Desktop / Documents / Downloads,要進 System Settings → Privacy & Security → Full Disk Access 加 /bin/bash 才行。新 launchd job 一律放 ~/scripts/~/.claude/~/Library/Application Support/,已驗證的 working 路徑。
  • Roam MCP update_block 不要塞 \n 換行
    • 連結:roam-tools MCP server(本機 port 3333)
    • 一句說明:把 \n 序列化成兩個 char 文字而不是真換行,會在 block 顯示成 literal \n。要分隔多段資訊用 · 一行串接,或拆成多個 child blocks。
  • Discord ccbot context 共用機制 9 點 Q&A
    • 連結:今日 Roam daily note [[May 2nd, 2026]] 「🔧 Discord ccbot 大整修」section
    • 一句說明:所有 channel + thread + DM 共用同一個 1M context window 是 ccbot 的結構性限制;context 滿了走兩段式門檻(壓縮 + 寫交班 / 寫交班 + 清空),catchup-cron 連網事件 + 每 3 小時備援補漏跑。最大收穫:「ccbot 腦袋會清」vs「Discord 訊息永遠在」是兩個層次的事。
  • HATW ECG 觀念:framing error 害人
    • 連結:今日 ECG 深思(搜 HATW)
    • 一句說明:把 HATW 想成「會不會進展成 STE 的前奏」本身就是 framing error,因為它代表的是已有高風險缺血,不需要等它變成更熟悉的樣子才算數。
  • Anthropic 估值兩年從 $18B → $900B
    • 連結:superintel 電子報
    • 一句說明:今早 mail digest 撈到的,標記下來作為「2026 年 AI 公司估值速度」的一個資料點,內文有空再讀。
comments powered by Disqus