Catalog
affaan-m/ck

affaan-m

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.

global
0installs0uses~1.2k
v1.1Saved Apr 20, 2026

ck — Context Keeper

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).


Data Layout

~/.claude/ck/
├── projects.json              ← path → {name, contextDir, lastUpdated}
└── contexts/<name>/
    ├── context.json           ← SOURCE OF TRUTH (structured JSON, v2)
    └── CONTEXT.md             ← generated view — do not hand-edit

Commands

/ck:init — Register a Project

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

The script outputs JSON with auto-detected info. Present it as a confirmation draft:

Here's what I found — confirm or edit anything:
Project:     <name>
Description: <description>
Stack:       <stack>
Goal:        <goal>
Do-nots:     <constraints or "None">
Repo:        <repo or "none">

Wait for user approval. Apply any edits. Then pipe confirmed JSON to save.mjs --init:

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

Confirmed JSON schema: {"name":"...","path":"...","description":"...","stack":["..."],"goal":"...","constraints":["..."],"repo":"..." }


/ck:save — Save Session State

This is the only command requiring LLM analysis. Analyze the current conversation:

  • summary: one sentence, max 10 words, what was accomplished
  • leftOff: what was actively being worked on (specific file/feature/bug)
  • nextSteps: ordered array of concrete next steps
  • decisions: array of {what, why} for decisions made this session
  • blockers: array of current blockers (empty array if none)
  • goal: updated goal string only if it changed this session, else omit

Show a draft summary to the user: "Session: '<summary>' — save this? (yes / edit)" Wait for confirmation. Then pipe to save.mjs:

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

JSON schema (exact): {"summary":"...","leftOff":"...","nextSteps":["..."],"decisions":[{"what":"...","why":"..."}],"blockers":["..."]} Display the script's stdout confirmation verbatim.


/ck:resume [name|number] — Full Briefing

node "$HOME/.claude/skills/ck/commands/resume.mjs" [arg]

Display output verbatim. Then ask: "Continue from here? Or has anything changed?" If user reports changes → run /ck:save immediately.


/ck:info [name|number] — Quick Snapshot

node "$HOME/.claude/skills/ck/commands/info.mjs" [arg]

Display output verbatim. No follow-up question.


/ck:list — Portfolio View

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

Display output verbatim. If user replies with a number or name → run /ck:resume.


/ck:forget [name|number] — Remove a Project

First resolve the project name (run /ck:list if needed). Ask: "This will permanently delete context for '<name>'. Are you sure? (yes/no)" If yes:

node "$HOME/.claude/skills/ck/commands/forget.mjs" [name]

Display confirmation verbatim.


/ck:migrate — Convert v1 Data to v2

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

For a dry run first:

node "$HOME/.claude/skills/ck/commands/migrate.mjs" --dry-run

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.


SessionStart Hook

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:

{
  "hooks": {
    "SessionStart": [
      { "hooks": [{ "type": "command", "command": "node \"~/.claude/skills/ck/hooks/session-start.mjs\"" }] }
    ]
  }
}

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.


Rules

  • Always expand ~ as $HOME in Bash calls.
  • Commands are case-insensitive: /CK:SAVE, /ck:save, /Ck:Save all work.
  • If a script exits with code 1, display its stdout as an error message.
  • Never edit context.json or CONTEXT.md directly — always use the scripts.
  • If projects.json is malformed, tell the user and offer to reset it to {}.
Files10
10 files · 49.1 KB

Select a file to preview

Overall Score

76/100

Grade

B

Good

Safety

78

Quality

74

Clarity

80

Completeness

70

Summary

Context Keeper (ck) is a persistent memory system for Claude Code that auto-loads project context on session start, tracks multi-session work with git-aware state management, and stores structured JSON metadata about projects. Users invoke `/ck:*` commands to initialize projects, save session state, resume work, and manage project portfolios across multiple coding sessions.

Detected Capabilities

Read and write JSON project metadata to ~/.claude/ck/ directoryExecute deterministic Node.js scripts in commands/ directoryParse git activity to track unsaved sessionsGenerate and manage structured session summariesAuto-load context via SessionStart hook in settings.jsonDetect goal mismatches and unsaved changesMigrate v1 context.md files to v2 context.json format

Trigger Keywords

Phrases that MCP clients use to match this skill to user intent.

resume project worksave session stateproject context memorymulti-session trackingcontext keeper setup

Risk Signals

INFO

Direct filesystem writes to ~/.claude/ck/ directory without explicit validation shown

SKILL.md: /ck:init, /ck:save, /ck:forget command descriptions
INFO

Node.js script execution with user-provided arguments (project names, JSON strings)

SKILL.md: /ck:resume, /ck:forget, /ck:info commands with [name|number] parameter
WARNING

JSON piped to scripts via echo without validation of user input

SKILL.md: /ck:save and /ck:init save.mjs piping instructions
INFO

Recursive data migration with backup pattern but no explicit recovery documentation

SKILL.md: /ck:migrate command backs up to .v1-backup but no restore procedure shown
INFO

SessionStart hook modifies ~/.claude/settings.json requires manual configuration

SKILL.md: SessionStart Hook section

Referenced Domains

External domains referenced in skill content, detected by static analysis.

github.com

Use Cases

  • Resume work on a project across multiple Claude sessions with full context
  • Track decisions, blockers, and progress across long-running development tasks
  • Maintain a portfolio of active projects with quick snapshot access
  • Migrate from v1 to v2 context storage format
  • Auto-inject project context at the start of each new session

Quality Notes

  • Strength: Clear command reference with exact JSON schema specifications for each command — agent knows precisely what data structure to produce
  • Strength: Well-documented data layout with directory structure and file purpose comments
  • Strength: Comprehensive rules section covering edge cases (malformed JSON, script exit codes, case-insensitivity)
  • Weakness: No error handling guidance for when scripts fail — what should the agent do if save.mjs exits with code 1?
  • Weakness: Migration instructions mention 'dry-run' but don't explain what happens to the output or how user should verify before committing
  • Weakness: No documentation of what happens if a project name is ambiguous (multiple matches) — resume/info/forget would need tie-breaking logic
  • Weakness: SessionStart hook configuration example is incomplete — doesn't explain where in settings.json this should be placed or how to verify it works
  • Strength: Clear separation between LLM-required analysis (/ck:save) and deterministic script execution (all others)
  • Strength: Explicit instruction to present script stdout verbatim — clear hand-off between agent and user
Model: claude-haiku-4-5-20251001Analyzed: Apr 20, 2026

Reviews

Add this skill to your library to leave a review.

No reviews yet

Be the first to share your experience.

Version History

v1.1

Content updated

2026-04-20

Latest
v1.0

No changelog

2026-04-12

Add affaan-m/ck to your library

Command Palette

Search for a command to run...