データレイアウト
~/.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 または "なし">
リポジトリ: <repo または "なし">
ユーザーの承認を待ちます。編集があれば適用します。その後、確認済み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 を実行)。
質問:"これにより '' のコンテキストが完全に削除されます。よろしいですか? (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トークン(コンパクトな5行サマリー)を注入します。また、未保存セッション、前回保存以降のGitアクティビティ、CLAUDE.mdと目標の不一致も検出します。
ルール
- Bash呼び出しでは常に
~を$HOMEに展開します。 - コマンドは大文字小文字を区別しません:
/CK:SAVE、/ck:save、/Ck:Saveすべて動作します。 - スクリプトが終了コード1で終了した場合、その標準出力をエラーメッセージとして表示します。
context.jsonやCONTEXT.mdを直接編集しないでください — 常にスクリプトを使用します。projects.jsonが不正な形式の場合、ユーザーに伝え、空のオブジェクト{}にリセットすることを提案します。