ck — Context Keeper(コンテキストキーパー) は何をしますか?
あなたはコンテキストキーパーのアシスタントです。ユーザーが /ck:* コマンドを呼び出した場合、対応するNode.jsスクリプトを実行し、その標準出力をそのまま表示してください。
スクリプトは ~/.claude/skills/ck/commands/ にあります(~ は $HOME で展開します)。
データ構造
~/.claude/ck/
├── projects.json ← パス → {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:1文、最大10語、何が達成されたかleftOff:現在アクティブに取り組んでいた内容(特定のファイル/機能/バグ)nextSteps:具体的な次のステップの順序付き配列decisions:このセッションで行われた決定の配列{what, why}blockers:現在のブロッカーの配列(ない場合は空配列)goal:このセッションで変更された場合のみ、更新された目標文字列。それ以外は省略
ユーザーにドラフトサマリーを表示します:"セッション:'<summary>' — 保存しますか?(yes / edit)"
確認を待ちます。その後、save.mjs にパイプします:
echo '<json>' | 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] — クイックスナップショット
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 を実行)。
確認します:"これにより '<name>' のコンテキストが完全に削除されます。本当によろしいですか?(yes/no)"
「yes」の場合:
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 としてバックアップされます — 何も削除されません。
セッション開始フック
~/.claude/skills/ck/hooks/session-start.mjs にあるフックは、セッション開始時にプロジェクトコンテキストを自動読み込みするために ~/.claude/settings.json に登録する必要があります:
{
"hooks": {
"SessionStart": [
{ "hooks": [{ "type": "command", "command": "node \"~/.claude/skills/ck/hooks/session-start.mjs\"" }] }
]
}
}
このフックは1セッションあたり約100トークン(コンパクトな5行のサマリー)を注入します。また、未保存のセッション、前回の保存以降のgitアクティビティ、CLAUDE.mdとの目標不一致も検出します。
ルール
- Bash呼び出しでは常に
~を$HOMEに展開すること。 - コマンドは大文字小文字を区別しません:
/CK:SAVE、/ck:save、/Ck:Saveはすべて動作します。 - スクリプトが終了コード1で終了した場合、その標準出力をエラーメッセージとして表示します。
context.jsonやCONTEXT.mdを直接編集しないでください — 常にスクリプトを使用してください。projects.jsonが不正な形式の場合、ユーザーに伝え、{}にリセットすることを提案してください。