立即執行
目標:$ARGUMENTS
KB 中的所有文件都儲存在一個「集合」中:即 kb/ 下的一個目錄,並附有本地的 COLLECTION.md,例如 kb/notes/、kb/reference/、kb/instructions/,或一個已安裝的函式庫集合,例如 kb/commonplace/notes/。每個接受寫入的集合都有一個 COLLECTION.md,其中包含其登記簿、品質目標、提供的型別以及連結慣例。
帶有前端資訊的文件會攜帶一個路徑值的 type:,指向一個型別規範文件,例如 type: kb/types/note.md 或 type: kb/reference/types/adr.md。沒有前端資訊的檔案被視為隱含的 text。
第一步 - 解析引數
編輯模式:第一個引數是現有 .md 檔案的路徑。讀取它,從路徑推斷集合,並從其前端資訊讀取 type: 路徑。如果它有前端資訊但沒有 type:,則停止,並在編輯前修復此結構性問題。如果它沒有前端資訊,則將其視為隱含的 text。在進行結構性編輯之前,先開啟由 type: 命名的型別規範文件。
新建模式:所有其他情況。從引數中提取集合、型別和主題。預設值:集合為 notes,型別為 kb/types/note.md。如果請求的型別是「instructions」且未明確指定集合,則使用集合 instructions。
對於新建,將目標集合解析為 kb/ 下的一個目錄,並附有本地的 COLLECTION.md;簡稱(如 notes)表示 kb/notes/。讀取該集合的 ## Types 部分,並選擇一個列出的型別路徑。如果請求的型別未列出,且使用者未給出明確路徑,則停止並列出可用的型別。如果使用者給出明確的 kb/.../*.md 型別路徑,則在將其用於型別規範文件之前,先打開該文件並驗證。
第二步 - 載入集合慣例
讀取目標集合的 COLLECTION.md,以取得該集合的寫作慣例,包括外部連結規則。找到外部連結部分(標題不固定 — 尋找那個命名目的地和標籤的部分),並將其視為權威。它告訴你這個來源集合可以連結到哪些目的地集合、哪些目的地被排除、哪些標籤被授權用於哪些來源->目的地配對,以及每個標籤所服務的讀者需求。內部格式各不相同(每個目的地的區塊、帶有目的地欄位的單一標籤表、散文) — 為了內容而讀取,而不是為了格式。沒有單獨的連結文件可供查閱。
硬性失敗:如果目標集合沒有 COLLECTION.md。每個接受寫入的集合都必須有 COLLECTION.md;其登記簿、品質目標和連結規則正是區分集合的要素。不要使用預設慣例繼續進行。
第三步 - 載入型別規範
讀取選定的型別規範文件。其前端資訊必須包含 type: kb/types/type-spec.md、name、description 和 schema。它的主體提供了工件形狀,並可能包含一個模板區塊。將該主體視為結構性撰寫合約。
不要從缺少的型別路徑回退到 note。
對於 text,只有在使用者明確想要非結構化捕獲時,才撰寫沒有前端資訊的原始 Markdown。否則使用 kb/types/note.md。
第四步 - 寫入前搜尋
Write 不執行主動探索——那是 cp-skill-connect 的工作。Write 建立一則筆記,並僅提交作者已有的連結,加上一個廉價的重複防護:
- 近似重複檢查。 使用
rg搜尋目標集合中是否存在新筆記的獨特標題詞語(例如rg -i "key term" kb/notes/ --glob "*.md")。這是一個有針對性的詞語搜尋——不要列舉整個集合;完整的列表需要線性上下文,對於單一筆記的重複檢查來說是錯誤的工具。如果近似重複已經存在,則優先編輯它,而不是建立第二則筆記。 - 已載入的上下文。 為本次寫作而拉入工作階段的筆記、來源和匯入的內容,是首要的連結候選項。如果它值得閱讀,就值得考慮作為一個連結。
- 使用者命名的目標。 使用者在提示中提到的連結目標。
在編輯模式下,也要對目標筆記執行反向連結查詢——一次查詢,不進行主體搜尋——這樣編輯就不會孤立依賴項。
所有超出此範圍的探索——跨集合的描述掃描、跨目的地探查、主體搜尋、標籤遍歷、連結跟隨、反向邊推理——都屬於 cp-skill-connect,而不是此處。Write 保持專注於撰寫單一筆記。
第五步 - 草稿與儲存
遵循型別規範文件和集合慣例。除非編輯現有檔案,否則從 # Title 推導出小寫連字符的檔名。對於型別化工件,將 type: 設定為確切的全域倉儲相對型別規範路徑,而不是型別名稱。
僅在明確有理由時才設定特質。可用的特質及其含義在目標型別的規範中定義(例如 kb/types/note.md 中的特質表)——從那裡獲取詞彙,而不是從記憶中的列表獲取。
在編輯期間保留現有的前端資訊和連結,除非請求的變更需要更改它們。
第六步 - 驗證
驗證你撰寫或編輯的筆記:
commonplace-validate path/to/file.md
在停止前修復結構性失敗。
然後建議 cp-skill-connect 作為下一步。第四步僅提交作者已有的連結(已載入的上下文、使用者命名的)加上一個重複防護;該筆記在圖譜中的其餘部分——跨集合的描述掃描、跨目的地候選項、主體搜尋命中、標籤遍歷、連結跟隨、反向邊候選項——只會在 connect 技能下出現。這個建議不是可選的修飾。
通用機制
這些機制適用於所有型別化工件,無論集合為何。
前端資訊 使筆記可查詢。沒有前端資訊意味著隱含的 text;任何具有前端資訊的檔案都必須包含一個路徑值的 type:。大多數庫筆記還需要 description(雙引號,50-200 字元),以及可選的 traits、tags 和 status。
描述 是檢索過濾器,而不是摘要。測試標準:如果一個代理搜尋了這個筆記的概念並得到 5 個結果,這個描述能幫助選出這一個嗎?複述標題不會增加任何檢索價值。
詞彙。 使用根目錄 AGENTS.md 中宣告的有效詞彙。在撰寫或進行實質性編輯散文時,在第一次有意義的提及中,當讀者可能不熟悉該術語時,要解釋並連結有效詞彙。不要為了只添加詞彙連結而改動未經觸及的段落。
連結。 使用來自來源檔案的相對 Markdown 路徑。每個連結必須指向一個真實的檔案。
位置編碼承諾。內聯 散文連接詞(since [X](./x.md)、because [X](./x.md)、but [X](./x.md))是最強的——目標是當前論點的前提。頁尾 連結帶有明確的標籤和上下文短語:- [title](./path.md) — label: context phrase。
集合的 COLLECTION.md 授權每個目的地的標籤,並命名每個標籤所服務的讀者需求。選擇一個其讀者需求與連結目的匹配的標籤;撰寫上下文短語以回答「[來源] 連接到 [目標],因為 [具體原因]。」如果沒有授權的標籤合適,則該候選項超出此集合的範圍——丟棄該連結,或將其提交給集合作者以擴展授權。
檔名 為小寫、連字符、.md,從 # Title 推導,最多 70 個字元。
提煉追蹤:當從筆記提煉到一個聚焦的工件時,在每個來源筆記的頁尾添加 Distilled into:。被提煉的工件不反向連結。
重新命名:切勿手動重新命名。使用 commonplace-relocate-note 來更新反向連結。