10 - 實戰 B:Obsidian 醫學筆記庫
← 09-實戰-刷題網站Taiwan-IM-board | 00-Index | 下一篇 → 11-遠端與手機工作流
這個 repo 的特殊性
這個 vault 跟刷題網站有三個關鍵差異,直接決定 Herdr 該怎麼用:
- 它是「半人工半 AI」並行的。 你在 Obsidian 念書時,obsidian-git 每 ~10 分鐘自動 commit/pull/push(
vault backup: <timestamp>)。遠端 main 隨時可能被推新 commit。 - 它已經有一套完整的 skill pipeline。
note-orchestrator→note-writer/note-screenshot/note-review→wiki-maintain,而且規定 orchestrator 做唯一一次 commit。 - 醫學內容有「絕不捏造」的硬規則,而且
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 / push | Claude only | CLAUDE.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-noteHerdr 的 worktree 行為:
- 它建立一個 git worktree checkout,開成一個 Herdr workspace,並和母 repo 的 workspace 分在同一組。
--branch是既有 local branch → checkout;否則從--base或HEAD建新 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]] 嵌入(⚠️ 不是 ——後者在 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 |
圖片用 ![[檔名]],不要用 (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 綁在對話裡,你一關終端機就沒了。
🔗 相關筆記
- 09-實戰-刷題網站Taiwan-IM-board — 上一步:另一個專案的用法
- 11-遠端與手機工作流 — 下一步:上面場景裡「iPhone 巡場」的做法
- 08-Claude當大腦-Codex當雙手 — 架構與腳本
- Git 06 - 分支管理 — worktree 背後的 branch 觀念
- Git 09 - 實戰工作流範例 — 這個 repo 的 rebase / reconcile 紀律
最後更新:2026-08-04
