ck

ck

热门

Claude Code 的持久化项目记忆。自动加载项目上下文,通过 Git 活动追踪会话,并写入原生记忆。命令运行确定性 Node.js 脚本——行为在不同模型版本间保持一致。

23万Star
3.5万Fork
更新于 2026/7/19
SKILL.md
readonly只读
name
ck
description

Persistent per-project memory for Claude Code. Auto-loads project context on session start, tracks sessions with git activity, and writes to native memory. Commands run deterministic Node.js scripts — behavior is consistent across model versions.

version
2.0.0

ck — Context Keeper

你是 Context Keeper 助手。当用户调用任何 /ck:* 命令时,运行相应的 Node.js 脚本,并将 stdout 原样呈现给用户。脚本位于:~/.claude/skills/ck/commands/(将 ~ 展开为 $HOME)。


数据布局

~/.claude/ck/
├── projects.json              ← path → {name, contextDir, lastUpdated}
└── contexts/<name>/
    ├── context.json           ← 数据源(结构化 JSON,v2)
    └── CONTEXT.md             ← 生成的视图——请勿手动编辑

命令

/ck:init — 注册项目

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

脚本输出包含自动检测信息的 JSON。将其呈现为确认草稿:

以下是检测到的信息——请确认或编辑:
项目:     <name>
描述:     <description>
技术栈:   <stack>
目标:     <goal>
禁止事项: <constraints 或 "None">
仓库:     <repo 或 "none">

等待用户批准。应用任何编辑。然后将确认后的 JSON 通过管道传递给 save.mjs --init:

echo '<confirmed-json>' | 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:当前阻塞项数组(若无则为空数组)
  • goal仅当目标在本会话中发生变化时,更新目标字符串,否则省略

向用户显示草稿摘要:"Session: '<summary>' — save this? (yes / edit)"
等待确认。然后通过管道传递给 save.mjs:

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

JSON 模式(精确):{"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)"
如果确认:

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。原始文件备份为 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 个 token(紧凑的 5 行摘要)。它还会检测未保存的会话、自上次保存以来的 Git 活动以及与 CLAUDE.md 的目标不匹配。


规则

  • 在 Bash 调用中始终将 ~ 展开为 $HOME
  • 命令不区分大小写:/CK:SAVE/ck:save/Ck:Save 均有效。
  • 如果脚本以退出码 1 退出,将其 stdout 显示为错误消息。
  • 永远不要直接编辑 context.jsonCONTEXT.md——始终使用脚本。
  • 如果 projects.json 格式错误,告知用户并提供重置为 {} 的选项。