npx skills add ...
npx skills add affaan-m/ecc --skill ck
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. Use when a project needs context to survive across Claude Code sessions instead of being re-explained each time.
npx skills add affaan-m/ecc --skill ck
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).
/ck:init — Register a ProjectThe script outputs JSON with auto-detected info. Present it as a confirmation draft:
Wait for user approval. Apply any edits. Then pipe confirmed JSON to save.mjs --init:
Confirmed JSON schema: {"name":"...","path":"...","description":"...","stack":["..."],"goal":"...","constraints":["..."],"repo":"..." }
/ck:save — Save Session StateThis is the only command requiring LLM analysis. Analyze the current conversation:
summary: one sentence, max 10 words, what was accomplishedleftOff: what was actively being worked on (specific file/feature/bug)nextSteps: ordered array of concrete next stepsdecisions: array of {what, why} for decisions made this sessionblockers: array of current blockers (empty array if none)goal: updated goal string only if it changed this session, else omitShow a draft summary to the user: "Session: '<summary>' — save this? (yes / edit)"
Wait for confirmation. Then pipe to save.mjs:
JSON schema (exact): {"summary":"...","leftOff":"...","nextSteps":["..."],"decisions":[{"what":"...","why":"..."}],"blockers":["..."]}
Display the script's stdout confirmation verbatim.
/ck:resume [name|number] — Full BriefingDisplay output verbatim. Then ask: "Continue from here? Or has anything changed?"
If user reports changes → run /ck:save immediately.
/ck:info [name|number] — Quick SnapshotDisplay output verbatim. No follow-up question.
/ck:list — Portfolio ViewDisplay output verbatim. If user replies with a number or name → run /ck:resume.
/ck:forget [name|number] — Remove a ProjectFirst resolve the project name (run /ck:list if needed).
Ask: "This will permanently delete context for '<name>'. Are you sure? (yes/no)"
If yes:
Display confirmation verbatim.
/ck:migrate — Convert v1 Data to v2For a dry run first:
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.
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:
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.
~ as $HOME in Bash calls./CK:SAVE, /ck:save, /Ck:Save all work.context.json or CONTEXT.md directly — always use the scripts.projects.json is malformed, tell the user and offer to reset it to {}.