這個資料夾記錄這個專案的為什麼——原則、方向、教訓——也就是程式碼本身留不住的東西。它讓 AI(和新加入的人)在動手前,先讀懂專案的意圖與限制。
由 knowie 維護:一個讓 AI 結構化地維護專案知識的工具。不熟 knowie 也沒關係——下面就能讀懂。
principles.md— 原則:專案不可妥協的核心信念與規則(分「根本原則」和從它推導的「延伸原則」)。vision.md— 願景:要解決什麼問題、現在走到哪、路線圖。experience.md— 經驗:開發中蒸餾出的教訓(踩過的坑、學到的模式)。
concepts/— 母概念:反覆出現的核心概念;三個核心檔只放指針,細節在這。episodes/— 情節記憶:值得回憶的完整現場(教訓/決策背後的故事)。history/— 因果軌跡:為什麼變成現在這樣(決策的轉移、被否決的選項)。draft/— 短期記憶:還沒定案、正在醞釀的想法。
從三個核心檔讀起;每個檔底部有「關鍵延伸」表,告訴你某個主題該往哪個子檔深入。
如果你用支援 knowie 的 AI 工具(如 Claude Code),這些指令幫你維護這個知識庫:
/knowie-init— 從零建立知識庫/knowie-capture— 把一段討論/想法統整進對的地方/knowie-consolidate— 你主動把成熟的 draft 固化出去(capture 的對稱另一端)/knowie-next— 根據知識庫規劃下一步該做什麼/knowie-judge— 檢查一致性、對齊程式碼、整理/knowie-migrate— 結構升級時遷移知識庫
(只是想讀懂專案?忽略這段沒關係。)
judge 會掃「指向程式碼的路徑還在不在」。而三種東西長得一模一樣:
🔴 真的過時 該修
⟨曾經⟩ 歷史敘述——那個路徑【當時是對的】,不該改
⟨規劃⟩ 還沒做的東西——未來式,不該改
沒有標記的話,後兩種每次都會被報一次,而 knowie 的 Converge 不變式說 「再跑一次應該接近 no-op」。
一個每次都報同樣結果的檢查,與一個沒有人跑的檢查,最後效果一樣 ——因為人會學會跳過它。
history/、episodes/、draft/retired/ 三個目錄天生是「曾經」
——掃描直接排除,不需要逐處標記。
排除目錄 history/ / episodes/ / draft/retired/
排除寫法 刪除線 ~~舊路徑~~ / 帶 ⟨曾經⟩ 或 ⟨規劃⟩ 標記的
剩下的 🔴 才是真的過時2026-08-17 第一次套用:14 筆 → 0 筆。
行內的 [[X]] 是指名,不是路徑。它涵蓋三種東西:
[[投影]] → concepts/投影.md
[[經驗]] → experience.md(三個入口檔同理)
[[build-guardrail]] → skills/build-guardrail/SKILL.md
[[X]] 找不到對應的 concepts 檔」不等於死引用——2026-08-19 的
judge 掃出 10 筆,只有 1 筆是真的(回退程式碼但不回退知識 少了一個逗號),
其餘是 skills、三檔、以及 markdown 裡的程式碼片段誤判。
一個掃描如果不知道自己在掃什麼命名空間,它的每一筆命中都要人再判一次 ——而那正是它想省掉的工。
🔴 而那條教訓在 2026-09-26 又被踩了五次,因為它沒有載體:判官每一輪
重寫一次掃描器,於是每一輪重推、重踩同樣的命名空間假設(相對路徑要對著所在檔解析 ·
[[X]] 的三個命名空間 + history/NNN 前綴形 + 小節標題 · 行內程式碼要挖掉 ·
狀態標記的詞表 · 放寬的判準會反過來漏掉東西)。
🟢 它們現在住在 tools/knowie-scan.ts,而跑它的是一條護欄
(tests/integration/audit-knowledge-links.test.ts,npm test 會跑)。
每一項都回報母體,而母體為 0 會紅——「乾淨」與「路徑寫錯了」在讀數上長得一樣。
history/ 的孤兒歸到 🟡「要人再判」,不讓護欄紅:一筆病歷沒有人引用不一定是腐爛。
python3,而那是運氣不是契約(這個 repo 被「本機比 CI 寬鬆」咬過三次)。
一條教訓如果沒有載體,它下一次會以「新發現」的樣子回來。
🟡 而那一輪還掃到一個待拍板的結構問題:CLAUDE.md 裡 12 條蒸餾過的引言
有 8 條在 experience.md 裡找不到——它是「經驗」的第二個家,而它幾乎不連 history/。
那一題(哪一份是真相)記在 draft/CLAUDE.md 是經驗的第二個家,
要人拍板:搬動它會改變 AI 每個 session 讀到什麼。
真正的連結用 [](相對路徑),圖由連結導出,不儲存(見 principles P8)。