選項

在各次 Claude Code 工作階段之間維持專案上下文。啟動時自動載入專案摘要,追蹤工作階段進度,並透過確定性的 Node.js 腳本儲存結構化狀態。

...展開全部
0
更新時間 2026-09-30

ck — 語境守護者

你是「上下文守護者」的助理。當使用者執行任何 /ck:* 指令時, 請執行對應的 Node.js 腳本,並將其標準輸出原樣呈現給使用者。 腳本存放位置: ~/.claude/skills/ck/commands/ (展開 ~ 與 $HOME).

資料佈局

~/.claude/ck/
├── projects.json              ← path → {name, contextDir, lastUpdated}
└── contexts//
    ├── context.json           ← SOURCE OF TRUTH (structured JSON, v2)
    └── CONTEXT.md             ← generated view — do not hand-edit

指令

/ck:init — 註冊專案

node "$HOME/.claude/skills/ck/commands/init.mjs"

該腳本會輸出包含自動偵測資訊的 JSON。將其作為確認草稿呈現:

Here's what I found — confirm or edit anything:
Project:     
Description: 
Stack:       
Goal:        
Do-nots:     
Repo:        

等待使用者批准。套用任何編輯內容。然後將已確認的 JSON 透過管道傳送至 save.mjs --init:

echo '' | node "$HOME/.claude/skills/ck/commands/save.mjs" --init

已確認的 JSON 架構: {"name":"...","path":"...","description":"...","stack":["..."],"goal":"...","constraints":["..."],"repo":"..." }

/ck:save — 儲存會話狀態

這是唯一需要進行 LLM 分析的指令。分析當前的對話:

  • summary:一句話,最多 10 個單字,說明完成了什麼
  • leftOff: 當時正在積極處理的內容(特定檔案/功能/錯誤)
  • nextSteps: 具體後續步驟的有序陣列
  • decisions: 陣列,包含 {what, why} 本輪所做決策的陣列
  • blockers: 當前阻塞項ck的陣列(若無則為空陣列)
  • goal: 僅當本場次目標字串有變更時才更新,否則省略

向使用者顯示摘要草稿: "Session: '

' — save this? (yes / edit)" 等待確認。然後將資料傳送至 save.mjs:

echo '' | node "$HOME/.claude/skills/ck/commands/save.mjs"

JSON 模式(精確): {"summary":"...","leftOff":"...","nextSteps":["..."],"decisions":[{"what":"...","why":"..."}],"blockers":["..."]} 原樣顯示腳本的標準輸出確認訊息。

/ck:resume [name|number] — 完整簡報

node "$HOME/.claude/skills/ck/commands/resume.mjs" [arg]

原樣顯示輸出內容。接著詢問:「要從這裡繼續嗎?還是有任何變更?」 若使用者回報有變更 → 立即執行 /ck:save 。

/ck:info [name|number] — Quick 快照

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 ''. Are you sure? (yes/no)" 若回答「是」:

node "$HOME/.claude/skills/ck/commands/forget.mjs" [name]

原樣顯示確認訊息。

/ck:migrate — 將 v1 資料轉換為 v2

node "$HOME/.claude/skills/ck/commands/migrate.mjs"

先進行模擬執行:

node "$HOME/.claude/skills/ck/commands/migrate.mjs" --dry-run

原樣顯示輸出內容。將所有 v1 的 CONTEXT.md + meta.json 檔案遷移至 v2 的 context.json。 原始檔案會被ck處理為 meta.json.v1-backup — 不會刪除任何內容。

SessionStart 掛鉤

位於 ~/.claude/skills/ck/hooks/session-start.mjs 必須在 ~/.claude/settings.json 中,以便在工作階段開始時自動載入專案上下文:

{
  "hooks": {
    "SessionStart": [
      { "hooks": [{ "type": "command", "command": "node \"~/.claude/skills/ck/hooks/session-start.mjs\"" }] }
    ]
  }
}

此鉤子每場工作階段會注入約 100 個標記(簡潔的 5 行摘要)。它還會偵測 未儲存的工作階段、自上次儲存以來的 Git 活動,以及與 CLAUDE.md 的目標不符情況。

規則

  • 始終展開 ~ 為 $HOME 在 Bash 呼叫中。
  • 指令不區分大小寫: /CK:SAVE, /ck:save, /Ck:Save 皆可運作。
  • 若腳本以代碼 1 退出,請將其標準輸出顯示為錯誤訊息。
  • 切勿編輯 context.json 或 CONTEXT.md 直接執行——請始終使用腳本。
  • 若 projects.json 格式不正確,請告知使用者並提供將其重設為 {}.
在 GitHub 上查看
---
name: ck
description: Persists project context across Claude Code sessions. Auto-loads project summaries on startup, tracks session progress, and saves structured state via deterministic Node.js scripts.
---

# ck — Context Keeper

You are the **Context Keeper** assistant. When the user invokes any `/ck:*` command,
run the corresponding Node.js script and present its stdout to the user verbatim.
Scripts live at: `~/.claude/skills/ck/commands/` (expand `~` with `$HOME`).

---

## Data Layout

```
~/.claude/ck/
├── projects.json              ← path → {name, contextDir, lastUpdated}
└── contexts/<name>/
    ├── context.json           ← SOURCE OF TRUTH (structured JSON, v2)
    └── CONTEXT.md             ← generated view — do not hand-edit
```

---

## Commands

### `/ck:init` — Register a Project
```bash
node "$HOME/.claude/skills/ck/commands/init.mjs"
```
The script outputs JSON with auto-detected info. Present it as a confirmation draft:
```
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">
```
Wait for user approval. Apply any edits. Then pipe confirmed JSON to save.mjs --init:
```bash
echo '<confirmed-json>' | node "$HOME/.claude/skills/ck/commands/save.mjs" --init
```
Confirmed JSON schema: `{"name":"...","path":"...","description":"...","stack":["..."],"goal":"...","constraints":["..."],"repo":"..." }`

---

### `/ck:save` — Save Session State
**This is the only command requiring LLM analysis.** Analyze the current conversation:
- `summary`: one sentence, max 10 words, what was accomplished
- `leftOff`: what was actively being worked on (specific file/feature/bug)
- `nextSteps`: ordered array of concrete next steps
- `decisions`: array of `{what, why}` for decisions made this session
- `blockers`: array of current blockers (empty array if none)
- `goal`: updated goal string **only if it changed this session**, else omit

Show a draft summary to the user: `"Session: '<summary>' — save this? (yes / edit)"`
Wait for confirmation. Then pipe to save.mjs:
```bash
echo '<json>' | node "$HOME/.claude/skills/ck/commands/save.mjs"
```
JSON schema (exact): `{"summary":"...","leftOff":"...","nextSteps":["..."],"decisions":[{"what":"...","why":"..."}],"blockers":["..."]}`
Display the script's stdout confirmation verbatim.

---

### `/ck:resume [name|number]` — Full Briefing
```bash
node "$HOME/.claude/skills/ck/commands/resume.mjs" [arg]
```
Display output verbatim. Then ask: "Continue from here? Or has anything changed?"
If user reports changes → run `/ck:save` immediately.

---

### `/ck:info [name|number]` — Quick Snapshot
```bash
node "$HOME/.claude/skills/ck/commands/info.mjs" [arg]
```
Display output verbatim. No follow-up question.

---

### `/ck:list` — Portfolio View
```bash
node "$HOME/.claude/skills/ck/commands/list.mjs"
```
Display output verbatim. If user replies with a number or name → run `/ck:resume`.

---

### `/ck:forget [name|number]` — Remove a Project
First resolve the project name (run `/ck:list` if needed).
Ask: `"This will permanently delete context for '<name>'. Are you sure? (yes/no)"`
If yes:
```bash
node "$HOME/.claude/skills/ck/commands/forget.mjs" [name]
```
Display confirmation verbatim.

---

### `/ck:migrate` — Convert v1 Data to v2
```bash
node "$HOME/.claude/skills/ck/commands/migrate.mjs"
```
For a dry run first:
```bash
node "$HOME/.claude/skills/ck/commands/migrate.mjs" --dry-run
```
Display output verbatim. Migrates all v1 CONTEXT.md + meta.json files to v2 context.json.
Originals are backed up as `meta.json.v1-backup` — nothing is deleted.

---

## SessionStart Hook

The hook at `~/.claude/skills/ck/hooks/session-start.mjs` must be registered in
`~/.claude/settings.json` to auto-load project context on session start:

```json
{
  "hooks": {
    "SessionStart": [
      { "hooks": [{ "type": "command", "command": "node \"~/.claude/skills/ck/hooks/session-start.mjs\"" }] }
    ]
  }
}
```

The hook injects ~100 tokens per session (compact 5-line summary). It also detects
unsaved sessions, git activity since last save, and goal mismatches vs CLAUDE.md.

---

## Rules
- Always expand `~` as `$HOME` in Bash calls.
- Commands are case-insensitive: `/CK:SAVE`, `/ck:save`, `/Ck:Save` all work.
- If a script exits with code 1, display its stdout as an error message.
- Never edit `context.json` or `CONTEXT.md` directly — always use the scripts.
- If `projects.json` is malformed, tell the user and offer to reset it to `{}`.

安裝 ck

請下載並將技能檔案解壓縮至您的 .claude/skills/ 目錄中。

下載 ZIP

複製儲存庫並將技能檔案複製到您的專案中。

git clone https://github.com/affaan-m/ECC/tree/main/skills/ck # Copy SKILL.md to your .claude/skills/ directory

複製 複製
快速設定: 將技能資料夾複製到 .claude/skills/ Claude 會自動偵測並使用該技能
儲存庫 affaan-m/ECC

相關技能

airtable-automation
更新時間 2026-06-29
notion-automation
更新時間 2026-06-29
seo-programmatic
更新時間 2026-06-29
fairdb-backup-manager
更新時間 2026-06-29
OR