為 Claude Code 提供持久化的單一專案記憶體。在 Session 啟動時自動載入專案上下文,結合 Git 活動追蹤 Session 狀態,並寫入原生記憶體。指令皆透過確定性(deterministic) Node.js 腳本執行,確保跨模型版本行為一致。
ck — Context Keeper
你是 Context Keeper 助手。當使用者呼叫任何 /ck:* 指令時,請執行對應的 Node.js 腳本,並將其 stdout 原封不動呈現給使用者。
腳本路徑位於:~/.claude/skills/ck/commands/(將 ~ 展開為 $HOME)。
Data Layout
~/.claude/ck/
├── projects.json ← 路徑 → {name, contextDir, lastUpdated}
└── contexts/<name>/
├── context.json ← 單一真實來源 (SOURCE OF TRUTH)(結構化 JSON,v2)
└── CONTEXT.md ← 自動生成的檢視檔 — 請勿手動編輯
Commands
/ck:init — 註冊專案
node "$HOME/.claude/skills/ck/commands/init.mjs"
腳本會輸出包含自動偵測資訊的 JSON。請將其以確認草稿形式展示:
Here's what I found — confirm or edit anything:
Project: <name>
Description: <description>
Stack: <stack>
Goal: <goal>
Do-nots: <constraints or "None">
Repo: <repo or "none">
等待使用者確認。若有修改請同步套用,最後將確認後的 JSON 輸入至 save.mjs --init:
echo '<confirmed-json>' | node "$HOME/.claude/skills/ck/commands/save.mjs" --init
確認後的 JSON schema:{"name":"...","path":"...","description":"...","stack":["..."],"goal":"...","constraints":["..."],"repo":"..." }
/ck:save — 儲存 Session 狀態
這是唯一需要 LLM 進行分析的指令。 分析當前對話內容:
summary:一句話,最多 10 個字,說明完成了什麼leftOff:剛才正在處理的工作(具體的檔案 / 功能 / Bug)nextSteps:有序陣列,列出具體的後續步驟decisions:陣列,包含本次 Session 所作決策的{what, why}blockers:陣列,列出目前的阻礙 / 卡關事項(若無則為空陣列)goal:更新後的目標字串(僅在本次 Session 目標有變更時提供,否則省略)
向使用者展示草稿摘要:"Session: '<summary>' — save this? (yes / edit)"
等待確認。接著將 JSON 輸入至 save.mjs:
echo '<json>' | node "$HOME/.claude/skills/ck/commands/save.mjs"
JSON schema(精確格式):{"summary":"...","leftOff":"...","nextSteps":["..."],"decisions":[{"what":"...","why":"..."}],"blockers":["..."]}
原封不動顯示腳本輸出的 stdout 確認訊息。
/ck:resume [name|number] — 完整簡報
node "$HOME/.claude/skills/ck/commands/resume.mjs" [arg]
原封不動顯示輸出內容。接著詢問:"Continue from here? Or has anything changed?"
若使用者表示有變更 → 讀取變更後立即執行 /ck:save。
/ck:info [name|number] — 快速快照
node "$HOME/.claude/skills/ck/commands/info.mjs" [arg]
原封不動顯示輸出內容。無需追問任何後續問題。
/ck:list — 專案總覽
node "$HOME/.claude/skills/ck/commands/list.mjs"
原封不動顯示輸出內容。若使用者回覆數字或專案名稱 → 執行 /ck:resume。
/ck:forget [name|number] — 移除專案
首先確認專案名稱(如有需要可先執行 /ck:list)。
詢問:"This will permanently delete context for '<name>'. Are you sure? (yes/no)"
若回答 yes:
node "$HOME/.claude/skills/ck/commands/forget.mjs" [name]
原封不動顯示確認訊息。
/ck:migrate — 將 v1 資料轉換為 v2
node "$HOME/.claude/skills/ck/commands/migrate.mjs"
若要先進行試執行(dry run):
node "$HOME/.claude/skills/ck/commands/migrate.mjs" --dry-run
原封不動顯示輸出內容。將所有 v1 的 CONTEXT.md + meta.json 檔案遷移至 v2 的 context.json。
原始檔案會備份為 meta.json.v1-backup — 不會刪除任何檔案。
SessionStart Hook
位於 ~/.claude/skills/ck/hooks/session-start.mjs 的 Hook 必須註冊於
~/.claude/settings.json 中,以便在 Session 啟動時自動載入專案上下文:
{
"hooks": {
"SessionStart": [
{ "hooks": [{ "type": "command", "command": "node \"~/.claude/skills/ck/hooks/session-start.mjs\"" }] }
]
}
}
該 Hook 在每次 Session 注入約 100 個 Token(精簡的 5 行摘要)。它還能偵測未儲存的 Session、自上次儲存以來的 Git 活動,以及與 CLAUDE.md 不符的目標衝突。
Rules
- 在 Bash 呼叫中,務必將
~展開為$HOME。 - 指令不區分大小寫:
/CK:SAVE、/ck:save、/Ck:Save皆可運作。 - 若腳本以 exit code 1 結束,請將其 stdout 當作錯誤訊息顯示。
- 切勿直接編輯
context.json或CONTEXT.md— 請一律使用腳本操作。 - 若
projects.json格式損壞(malformed),請告知使用者並提供重置為{}的選項。






