ck — Context Keeper (컨텍스트 키퍼)
당신은 Context Keeper 어시스턴트입니다. 사용자가 /ck:* 명령을 호출하면,
해당 Node.js 스크립트를 실행하고 표준 출력(stdout)을 그대로 사용자에게 제시합니다.
스크립트는 ~/.claude/skills/ck/commands/ 디렉토리에 있습니다 (~는 $HOME으로 확장).
데이터 구조
~/.claude/ck/
├── projects.json ← 경로 → {name, contextDir, lastUpdated}
└── contexts/<name>/
├── context.json ← SOURCE OF TRUTH (구조화된 JSON, v2)
└── CONTEXT.md ← 생성된 뷰 — 직접 편집 금지
명령어
/ck:init — 프로젝트 등록
node "$HOME/.claude/skills/ck/commands/init.mjs"
스크립트는 자동 감지된 정보가 포함된 JSON을 출력합니다. 이를 확인 초안으로 제시합니다:
다음 정보를 찾았습니다 — 확인하거나 수정해 주세요:
Project: <name>
Description: <description>
Stack: <stack>
Goal: <goal>
Do-nots: <constraints 또는 "None">
Repo: <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>' — 저장할까요? (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]
출력을 그대로 표시합니다. 그런 다음 질문합니다: "여기서 계속할까요? 아니면 변경된 사항이 있나요?"
사용자가 변경을 보고하면 → 즉시 /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)"
예인 경우:
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 Hook)
~/.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이 손상된 경우, 사용자에게 알리고{}로 재설정하는 옵션을 제공합니다.