---
schemaVersion: 1
slug: gp-9-20260130-obsidian-context-engineering
ticketId: GP-9
lang: zh-tw
title: "Obsidian & Claude Code 101: Context Engineering"
summary: Vibe note-taking 要運作得好，你必須強迫 Claude Code「挑食」一點。用 4 層過濾機制（檔案樹→YAML描述→大綱→完整內容）來讓它更選擇性，這個 pattern 叫 Progressive Disclosure。
originalDate: 2026-01-26
translatedDate: 2026-01-30
source: "@arscontexta (Heinrich) on X"
sourceUrl: https://x.com/arscontexta/status/2015585363318743071
author: null
authorshipNote: null
canonicalUrl: https://gu-log.vercel.app/posts/gp-9-20260130-obsidian-context-engineering
status: published
replacementTicketId: null
replacementUrl: null
---

# Obsidian & Claude Code 101: Context Engineering

> **來源:** [@arscontexta (Heinrich) on X](https://x.com/arscontexta/status/2015585363318743071)

你有沒有遇過這種情況：丟一個 Obsidian vault 給 [Claude Code](https://gu-log.vercel.app/glossary#claude-code)，然後它就開始瘋狂讀檔案，像吃到飽自助餐一樣每道菜都夾，結果還沒做完事情 context window 就炸了？

這就是 Heinrich（@arscontexta）想解決的問題。他的答案很簡單：**強迫 Claude「挑食」**。

不是讓它什麼都讀，而是設一套機制讓它學會「先看菜單再點菜」。這個 pattern 叫 **Progressive Disclosure（漸進式揭露）**——四層過濾，一層比一層深入，只有真正相關的東西才會被完整載入。

> **Mogu 畫重點：**
>
> Progressive Disclosure 是 UI 設計的老祖宗觀念了。Google 搜尋結果頁就是最經典的例子——先給你標題和摘要，有興趣再點進去看全文。現在拿來管 AI 的 context，根本天作之合 (￣▽￣)／ 就像約會一樣嘛，第一次見面不要把祖宗十八代全交代了，循序漸進，有興趣再深入。

## 第一層：File Tree——先給 Claude 一張地圖

想像你到一個陌生城市，第一件事是什麼？打開 Google Maps 對吧。File tree 就是 Claude 的 Google Maps。

在 session 開始時，透過 hook 自動注入完整的檔案樹，這時 Claude 還沒碰任何東西，就已經知道「噢，這個 vault 大概長這樣」。

```yaml
hooks:
  SessionStart:
    - hooks:
        - type: "command"
          command: "tree -L 3 -a -I '.git|.obsidian' --noreport"
```

但這裡有個關鍵：**檔名要有描述性**。

比較這兩個檔名：

- `search notes md`——蛤？這是什麼？
- `queries evolve during search so agents should checkpoint md`——喔！光讀檔名就知道這篇在講搜尋查詢會演化，agent 應該做 checkpoint。

好的檔名就像好的書名，讓人一眼知道值不值得翻開。Claude 在這一層就已經在做篩選了。

> **Mogu 真心話：**
>
> 說真的，這個「把檔名當摘要寫」的技巧不只對 AI 有用。我看過太多人的 Obsidian vault 裡面全是 Untitled-1、Untitled-2、notes-final-final-v3，然後三個月後自己也找不到東西 ┐(￣ヘ￣)┌ 對自己好一點，好嗎。

## 第二層：YAML Descriptions——每篇筆記的電梯簡報

通過檔名初篩之後，Claude 可以再看每則筆記 frontmatter 裡的 description。一句話，講清楚這篇在幹嘛。

```yaml
---
description: Memory retrieval in brains works through spreading activation where neighbors prime each other. Wiki link traversal replicates this, making backlinks function as primes that surface relevant contexts
---
# spreading activation models how agents should traverse
...
```

Claude 不需要打開整個檔案，用 `ripgrep` 掃一下 description 就知道哪些值得深入：

```bash
rg "^description:" 01_thinking/*.md
```

> **Mogu 偷偷說：**
>
> 這招的精髓是什麼？就是把「讀整篇文章才能決定要不要讀」這個矛盾打掉。想像你在書店，你不會每本書都從第一頁讀到最後一頁才決定要不要買吧？你會看封底的簡介。YAML description 就是你筆記的封底簡介。token 省下來的量是指數級的 (๑•̀ㅂ•́)و✧

## 第三層：Outline——只看目錄，不翻全書

如果一則筆記通過了 description 篩選，Claude 接著看大綱。為什麼？因為有時候你只需要其中一個章節，把整個檔案都載入只會製造雜訊。

```bash
grep -n "^#" "01_thinking/knowledge-work.md"
# output:
# 5:# knowledge-work
# 13:## Core Ideas
# 19:## Tensions
# 23:## Gaps
```

看到了嗎？如果 Claude 只需要 “Tensions” 那段，它可以精確讀取第 19-22 行就好。不用載入其他三個章節的內容。

這就像你查一本教科書——你會先看目錄找到相關章節，不會從第一頁開始讀吧。

## 第四層：Full Content——真正值得的才讀全文

只有通過前三層過濾的筆記，Claude 才會載入完整內容。

重點是：**大部分筆記永遠到不了這一層**。

這就是整套系統的精髓。當 Claude 必須為每一次「讀取」辯護——「我為什麼要讀這個？前三層告訴我什麼？」——它的策展能力就會急速提升。從吃到飽模式，變成米其林主廚模式。

> **Mogu 插嘴：**
>
> 這讓我想到之前翻的 MP-85（Steve Yegge 那篇 AI Vampire），裡面講到 AI 工具的成本公式。Progressive Disclosure 本質上就是在壓低 context 的「浪費率」——每一個 token 都要花在刀口上。有些人的 vault 有幾千個檔案，如果全部灌進去，那不叫 context engineering，那叫 context 暴食症 (╯°□°)╯

## 等等，這不是新發明

如果你有在用 [MCP](https://gu-log.vercel.app/glossary#mcp)（Model Context Protocol），你會發現這結構似曾相識。

當你有 50+ 個工具，Claude 不會一開始就把所有工具定義都載入。它先看清單，有需要才去查詳細規格：

```plaintext
tool list → tool search → tool references → full definitions
```

跟筆記完全同構：

```plaintext
file tree → descriptions → outline → full content
```

同一個 pattern，不同的場景。好的設計長得都很像。

## 實作起來有多簡單？

講了這麼多層、這麼多概念，你可能覺得這要搞很久。

不。整件事就三個東西：

**一個 hook**——session 開始時自動跑 `tree`，給 Claude 地圖。**一個 frontmatter 欄位**——每篇筆記加一行 `description`。**一條指令**——在 CLAUDE.md 裡告訴 Claude：「讀檔案之前，先檢查 description。」

就這樣。三個小改動，你的 Claude 就從「什麼都塞」變成「精準策展」。不需要裝新工具，不需要寫複雜的 plugin，不需要改 Obsidian 的設定。

回到開頭的比喻：你不是在限制 Claude 的食量，你是在教它品味。吃到飽不是問題，不挑食才是問題。學會挑食之後，同樣的 context window 能裝下三倍的有效資訊。

> **Mogu 想補充：**
>
> 老實說，這套流程最反直覺的地方就是「加限制 = 更強」。我們直覺上覺得給 AI 越多資料越好，但 context window 是有限的。塞太多反而讓 AI 變笨——就像你期末考前把整本課本重讀一遍，結果什麼都記不住，還不如只讀老師畫的重點 (¬‿¬) Heinrich 這套方法的美在於它幾乎零成本，卻能讓效果天差地別。

---

## 社群精選問答

**Q: 每一篇都要手寫 YAML 描述很累欸？**

**@Catcher4242 問：** 這前提是每則筆記都要有 description。有自動化的替代方案嗎？手動寫或跑批次生成好像都很貴/很累。

**Heinrich 霸氣回：** **Just tell Claude.**

沒錯，就是叫 Claude 做。「幫我整理這篇筆記並補上 description」——十秒鐘搞定一篇。它是你的員工，不是你的老闆。

## 延伸閱讀

- [GP-4: Obsidian + Claude Code 101：讓 AI 住進你的筆記](https://gu-log.vercel.app/posts/gp-4-20260129-obsidian-claude-101/)
- [GP-3: Claude Code + Obsidian：打造 Agent 思考基礎設施](https://gu-log.vercel.app/posts/gp-3-20260129-claude-obsidian-infrastructure/)
- [GP-13: Yapping to PRDs: Claude Code & Obsidian](https://gu-log.vercel.app/posts/gp-13-20260130-yapping-to-prds/)

> **Mogu 吐槽時間：**
>
> 我最愛這個回答了。大家總是在想怎麼「自動化」或「批次處理」，但最簡單的自動化就是——叫 AI 做。你已經有一個超強的語言模型坐在那邊了，幹嘛還自己寫 script？這就是 vibe coding 的精神啊 ╰(°▽°)╯

**延伸：其他人的 hook 玩法**

**Heinrich 分享：** @lt0gt 用了類似的 hook 但帶更多 context，注入最近的工作脈絡和可用工具。

這又是 Progressive Disclosure 的延伸——你可以在 session 開始時就告訴 Claude「你最近在做什麼」，讓它不只有地圖，還有指南針 (◕‿◕)
