10 - 實戰 B:Obsidian 醫學筆記庫

09-實戰-刷題網站Taiwan-IM-board | 00-Index | 下一篇 → 11-遠端與手機工作流


這個 repo 的特殊性

這個 vault 跟刷題網站有三個關鍵差異,直接決定 Herdr 該怎麼用:

  1. 它是「半人工半 AI」並行的。 你在 Obsidian 念書時,obsidian-git 每 ~10 分鐘自動 commit/pull/push(vault backup: <timestamp>)。遠端 main 隨時可能被推新 commit。
  2. 它已經有一套完整的 skill pipeline。 note-orchestratornote-writer / note-screenshot / note-reviewwiki-maintain,而且規定 orchestrator 做唯一一次 commit
  3. 醫學內容有「絕不捏造」的硬規則,而且 CLAUDE.md §4 明文規定:沒有 PubMed MCP 的環境不要猜 PMID

這三點合起來給出一個很明確的結論:

🔴 Codex 在這個 repo 裡不能碰「醫學事實」,只能碰「格式、批次、機械性工作」。 而且因為有 obsidian-git 在背景推 main,多 worker 一定要用 worktree 隔離


職責分界線(最重要的一張表)

工作誰做為什麼
文獻搜尋、PMID 查證、guideline 比對Claude only只有 Claude 有 PubMed MCP;CLAUDE.md §4 禁止猜 PMID
判斷「這段內容正不正確」Claude only「絕不捏造」是最高原則
判斷 (inferred) 該標在哪Claude only需要分辨「來源寫的」vs「AI 補的」
Pearl Card 格式套用、區塊順序整理Codex ✅規格明確(_template_pearl-card.md
frontmatter 修補(modified 日期戳、YAML 合法性)Codex ✅機械性,且可用 lint 驗證
medical-in-English 語言格式稽核Codex ✅規則明確:醫學實體一律英文、中文只當黏著劑
圖片壓縮 / PDF 截圖 SOP(ImageMagick)Codex ✅純技術操作
_wiki_meta/index.md 表格插入、log.md 追加Codex ✅(草稿)格式固定;但由 Claude 覆核後才 commit
cross-link 雙向補齊Codex ✅(草稿)機械性;語意合理性由 Claude 覆核
理財區 transactions.csv 解析對帳單Codex ✅純資料轉換;但數字絕不捏造要寫進 prompt
commit / pushClaude onlyCLAUDE.md §3:orchestrator 做唯一一次 commit

版面規劃

Workspace w2  "vault"   cwd=~/Obsidian-med-note
├── Tab w2:t1  "brain"
│   └── w2:p1   ★ claude — note-orchestrator 的大腦
├── Tab w2:t2  "workers"
│   ├── w2:p2   ○ codex — worktree A(格式稽核)
│   └── w2:p3   ○ codex — worktree B(圖片 / 理財)
└── Tab w2:t3  "ops"
    └── w2:p4   □ shell — python3 _wiki_meta/lint.py / site_check.py

⚠️ 必用:worktree 隔離

因為 obsidian-git 每 10 分鐘會動 main,多個 Codex 直接在同一個 checkout 上改檔案是災難。Herdr 內建 git worktree 支援:

# 為 worker A 開一個獨立 checkout + workspace
herdr worktree create --cwd ~/Obsidian-med-note \
  --branch codex/format-audit --no-focus
 
# 列出目前的 worktree
herdr worktree list --cwd ~/Obsidian-med-note

Herdr 的 worktree 行為:

  • 它建立一個 git worktree checkout,開成一個 Herdr workspace,並和母 repo 的 workspace 分在同一組
  • --branch 是既有 local branch → checkout;否則從 --baseHEAD 建新 branch。
  • 不給 --path 時,checkout 建在 <worktrees.directory>/<repo>/<branch-slug>
  • ⚠️ workspace close 只關 Herdr 狀態;真的要刪 checkout 要用 herdr worktree remove(它跑 git worktree remove從不刪 branch,git 拒絕髒 checkout 時要 --force)。

設定 worktree 放哪:

[worktrees]
directory = "~/Projects/vault-worktrees"

收工流程(Claude 做)

# 1. 每個 worker 的 branch 分別檢查
git -C <worktree-path> diff --stat
 
# 2. 回到 main,先 rebase(CLAUDE.md §5 硬規則)
cd ~/Obsidian-med-note
git pull --rebase origin main
 
# 3. 逐一 merge worker branch
git merge --no-ff codex/format-audit
 
# 4. 跑 lint
python3 _wiki_meta/lint.py
 
# 5. 唯一一次 commit + push
git push origin main

⚠️ CLAUDE.md §5 明講:rebase 出現衝突(= 跟使用者改到同一檔同一區)→ 停止、不要硬解、回報請使用者裁定。絕不可覆蓋掉使用者的筆記內容。 這條規則在多 worker 情境下更重要——寫進 Claude 的收工檢查清單裡


應用一:語言格式稽核(medical-in-English)

CLAUDE.md §1 是硬規則:所有醫學相關用語一律英文,中文只是把英文術語串成句子的黏著劑。 §7 也把「過度中譯」列為已知雷區。

這是規則明確、範圍大、純機械的工作——Codex 的完美標的。

任務檔範例:

# 任務:AIR 科筆記 medical-in-English 格式稽核
 
## 範圍
`Allergy-Immunology-Rheumatology(AIR)/` 底下所有 `*_overview.md`
 
## 規則(來自 repo CLAUDE.md §1,逐條遵守)
一律改回英文的類別:
- 疾病 / 症候群 / 病理實體
- 症狀 / 徵象 / 理學檢查所見
- 解剖 / 生理 / 病生理 / 機轉
- 藥名 / 藥物分類 / MOA / 劑量單位
- 檢驗 / 影像 / 術式 / 處置
- score / criteria / classification / staging / guideline / trial 名稱
- lab / biomarker / 電解質 / 單位
 
保留繁體中文的類別:描述性、連接性、情境與判讀敘述
(「這位病人…」「建議先…」「若…則考慮…」「臨床上常見於…」)
 
範例:
❌「鬱血性心衰竭」「呼吸困難」「心臟超音波」「腎絲球過濾率」
✅ congestive heart failure / dyspnea / echocardiography / eGFR
 
唯一例外:真的沒有對應英文的中文臨床慣用語(極罕見);
藥物台灣商品名可中英並列(如 Lokelma)。
 
## 硬限制 ⚠️
1. **只改語言表述,絕對不要改動任何醫學內容、數字、劑量、cutoff、PMID。**
2. **不要新增或刪除任何臨床資訊。** 有疑慮就跳過並記錄。
3. 不要動 frontmatter 以外的 metadata;不要動 `.quartzsite/`
4. **不要 git commit、不要 git push。**
 
## 輸出
- 直接改檔(你在獨立的 git worktree 裡,安全)
- 另外寫一份 `_audit/AIR-language-audit.md`
  逐檔列出「改了什麼 → 為什麼」,以及「跳過了什麼 → 為什麼」

Claude 收尾:讀 _audit/AIR-language-audit.md,抽查 diff 有沒有誤改醫學內容,再 merge。


應用二:frontmatter / modified 日期戳批次修補

CLAUDE.md §2、§3 有兩條容易漏掉的規則:

  • modified(完整 YYYY-MM-DD)是網站首頁「🕘 最近更新」排序的依據,每次改動任何一篇筆記就要更新成當天日期
  • frontmatter 必須是合法 YAML——壞掉的 YAML 會讓 Quartz build 失敗、整站該次不更新

這兩件事適合寫成一個 Codex 常駐任務:

herdr agent prompt w-meta "
掃描整個 vault 的 *.md,檢查每篇的 YAML frontmatter:
1. 是否為合法 YAML(title 用雙引號包、日期格式正確)
2. 是否有 modified 欄位(沒有就插在 updated: 之後)
3. tags 是否放在 frontmatter(不是 footer 的 *Tags: #...*)
 
輸出 _audit/frontmatter-report.md,列出所有有問題的檔案與建議修法。
**這一輪只報告,不要改檔。** 我看過再決定。
"

💡 「先報告、後改檔」是處理大範圍機械修改的安全做法,特別是在一個你天天在用的 vault 上。

驗證:

herdr pane run w2:p4 "python3 _wiki_meta/lint.py"
herdr pane wait-output w2:p4 --regex "OK|ERROR|問題" --timeout 120000

應用三:PDF 截圖 SOP(§6 硬規則)

CLAUDE.md §6 有一條很嚴格的規則:

digest / 整合 PDF 進筆記時,「重要 figure / table 一律截 PDF 原圖嵌入」,不是只消化文字。 「此規則不因『沒走 skill runtime』而免除……漏截圖=任務未完成,需補。」

而且 §7 直接把「digest PDF 只補文字、忘了截圖」列為已知雷區。

截圖本身是純技術操作(ImageMagick:去頁眉頁腳 + 自動 trim、旋轉表、跨頁 append、多圖 montage、JPEG/PNG 降檔),非常適合外包:

# 任務:從 PDF 截取 figure/table
 
## 輸入
`~/inbox/harrison-ch418.pdf`(28 頁)
 
## 需要截的圖(由 Claude 指定,你不需要判斷醫學重要性)
- p.4 Figure 418-1(診斷流程圖)
- p.11 Table 418-3(跨 p.11–12,需要 append)
- p.19 Figure 418-6(病理照片)
 
## SOP(完整規範見 .claude/skills/note-writer/SKILL.md §pdf-integrate 步驟 7)
1. render PDF 用 **150 dpi 就夠**(勿 300+)
2. 去頁眉頁腳 + 自動 trim,但 **title / caption / footnote 必須完整保留**
3. 臨床照片 / 病理圖 / 彩色示意圖 → **JPEG,quality ~84**
   表格 / 文字圖 / 線稿 → **PNG 但降色(灰階或 -colors 96~128)**
4. 單張目標 100–350 KB,**避免 > 500 KB**(過大會讓 Quartz 網頁載不出來)
5. 存到 `Endocrinology(ENDO)/<主題>/assets/`,檔名須**全 vault 唯一**
 
## 硬限制 ⚠️
- 不要「自己重畫」或用純文字描述取代原圖
- **不要切掉 title / caption / 整欄**(這是最常做壞的一步)
- 完成後逐張確認文字可讀、內容完整
- 不要 commit
 
## 輸出
截好的檔案 + 一份清單,列出每張的檔名、尺寸、KB 數

Claude 收尾:用 ![[檔名.png]] 嵌入(⚠️ 不是 ![](assets/...)——後者在 Obsidian 正常但 Quartz 會破圖),並補上繁中消化重點。


應用四:理財區自動化

理財(FIN)/ 有自己的 pipeline 和守則。適合外包的部分:

# 任務:解析對帳單 PDF → append transactions.csv
 
## 輸入
`~/inbox/對帳單-2026-08.pdf`
 
## 規範
先讀 `理財(FIN)/持倉/匯入指南.md`,完全照它的格式。
 
## 硬規則 ⚠️
1. **`transactions.csv` 是唯一真相**:只記買/賣/配息「事實」,
   報酬率由 compute.py 算,**不要手填**
2. DIV 現金流 = `shares × price − fee`(fee 欄放預扣稅)
3. **財務數字絕不捏造**:看不清楚的欄位標「需人工確認」,不要猜
4. **不要在本地跑 compute.py**(sandbox proxy 擋 Yahoo Finance,抓價會失敗)
   → push 後由 GitHub Actions 執行
5. 不要 commit
 
## 輸出
append 到 transactions.csv 的新行 + 一份逐筆對照表(PDF 哪一行 → CSV 哪一行)

應用五:note-review 的批次前置作業

note-review skill 的流程是「判斷每篇出身 → 用 PubMed/web 查最新 guideline 比對 → 修正」。

查證那步不能外包,但前置盤點可以

herdr agent prompt w-inventory "
掃描 Nephrology(NEP)/ 底下所有 *_overview.md,產出一份盤點表:
| 檔案 | updated 年份 | modified 日期 | 引用的最新 guideline 年份 | 引用的 PMID 數量 |
 
只讀不改。輸出到 _audit/NEP-inventory.md。
guideline 年份請從內文的『⚡ 資料更新至:』行與 Key References 區抓,
**不要自己判斷哪個 guideline 比較新**(那是我的工作)。
"

Claude 拿到盤點表,就能用最少的 token 決定「哪幾篇需要花 PubMed 額度去 review」——這是很划算的分工。


⚠️ 這個 repo 特有的紅線(務必寫進每個任務檔)

紅線出處
絕不捏造 醫學內容、PMID、引用、trial 數據、dosing§0.1
AI 自己推論的內容要標 (inferred)§0.1
沒有 PubMed 的環境不要猜 PMID,標「需查證」§4
圖片用 ![[檔名]]不要![](assets/...)(Quartz 會破圖)§6
frontmatter 必須合法 YAML(壞掉會讓整站 build 失敗)§6
不要動 .quartzsite/§6
只引一手來源,禁止二手懶人包§4
語言學習筆記(語言/)風格完全不同,發音禁用注音符號§8
理財筆記要中英並列(與醫學筆記的「一律英文」相反)§9

💡 實務建議:把這張表存成 ~/prompts/vault-redlines.md,每個 Codex 任務檔開頭直接 cat 進去。Codex 沒有 CLAUDE.md 的自動載入機制,你不貼它就不知道


一個完整的日常場景

情境:週末想把 NEP 科的筆記做一輪格式與時效整理。

09:00  在 w2:p1 跟 Claude 說:「幫我盤點 NEP 科筆記,然後把格式問題外包給 Codex」
09:02  Claude 開 worktree + 2 個 codex pane,派工,回報「預計 40 分鐘」
09:03  你按 ctrl+b q,detach,去吃早餐
       ↓ Codex 繼續跑,Herdr server 常駐
10:30  在 iPhone 上 SSH 進來,herdr,看 sidebar:
       - w-format  ✓ done
       - w-inventory ⚠ blocked(它在問某個檔案要不要處理)
10:31  手機上直接切過去回答它
       ↓
11:00  回到電腦,herdr 接回來
11:02  跟 Claude 說「收工」→ 它讀 audit 報告、抽查 diff、
       git pull --rebase、merge、跑 lint、wiki-maintain、
       唯一一次 commit + push main
11:15  Cloudflare Pages 自動重建,網站更新

這個場景在沒有 Herdr 的時候是做不到的——因為 subagent 綁在對話裡,你一關終端機就沒了。


🔗 相關筆記


最後更新:2026-08-04