Catalog
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. Use when a project needs context to survive across Claude Code sessions instead of being re-explained each time.

NewUpdated Sep 9, 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

Grades are signals, not a certification. Always review a skill yourself before use.

Safety

74

Quality

78

Clarity

82

Completeness

68

Summary

Context Keeper (ck) is a persistent per-project memory system for Claude Code that auto-loads project context on session start, tracks sessions with git activity, and persists structured JSON context. It provides seven commands (init, save, resume, info, list, forget, migrate) that run deterministic Node.js scripts to manage project state without model-version drift. The skill integrates a SessionStart hook to auto-inject compact context summaries into new sessions.

Detected Capabilities

file readfile writedirectory traversalJSON parsingNode.js script executiongit integrationenvironment variable accessprocess execution

Trigger Keywords

Phrases that agents use to match this skill to user intent.

multi-session project memoryclaude code context persistencesession briefing auto-loadproject context trackingdecision logdevelopment progress resumecontext migration

Risk Signals

WARNING

Scripts execute in ~/.claude/skills/ck/ directory with access to user home filesystem via $HOME expansion

SKILL.md: Commands section and SessionStart hook
WARNING

No explicit validation of JSON input before piping to save.mjs — potential for malformed data or injection

SKILL.md: /ck:save and /ck:init command examples
WARNING

Forget command permanently deletes project context with only user confirmation — no dry-run or recovery mechanism documented

SKILL.md: /ck:forget section
INFO

SessionStart hook runs automatically on every session start without explicit user invocation

SKILL.md: SessionStart Hook section
INFO

Git activity detection mentioned but not explained — scope of git operations unclear

SKILL.md: line referencing 'git activity since last save'

Referenced Domains

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

github.com

Use Cases

  • Persist multi-session project context for Claude Code without re-explaining architecture or goals
  • Track active development progress and decisions across Claude Code sessions
  • Auto-load project briefings on session start to reduce setup time
  • Manage context for multiple concurrent projects with quick portfolio switching
  • Migrate legacy context formats to structured JSON v2 schema

Quality Notes

  • ✓ Clear command interface with consistent naming pattern (/ck:*)
  • ✓ Data layout is well-documented with ASCII directory tree
  • ✓ JSON schemas are explicitly defined for each command (init, save, resume)
  • ✓ Rules section documents caveats: case-insensitivity, error handling, restrictions on manual edits
  • ✓ SessionStart hook integration documented with exact JSON config
  • ✗ Supporting Node.js scripts (commands/*.mjs, hooks/*.mjs) exist in manifest but content not provided for review — cannot verify error handling or injection guards
  • ✗ Migration strategy documented but edge cases unclear (what if v1 and v2 contexts coexist? corrupted backups?)
  • ✗ No documentation of context.json size limits or performance degradation with large projects
  • ✗ /ck:forget lacks dry-run or undo mechanism; permanent deletion is high-risk
  • ✗ Error handling examples incomplete — 'if script exits with code 1, display stdout' assumes script output is user-safe but doesn't validate
Model: claude-haiku-4-5-20251001Analyzed: Sep 9, 2026

Reviews

Add this skill to your library to leave a review.

No reviews yet

Be the first to share your experience.

Version History

  1. v2.0

    Contract changed: description

    ✦ AIClarifies skill activation trigger: added guidance that skill should be used when project context must persist across Claude Code sessions.

    triggering2026-09-09

    LATEST
  2. v1.2

    Content updated

    ✦ AINo material changes detected.

    2026-07-14

    View This Version
  3. v1.1

    Content updated

    ✦ AIAdds 8 command modules and session-start hook for state management and persistence workflows.

    2026-04-20

    View This Version
  4. v1.0

    2026-04-12

    View This VersionInitial version

Use affaan-m/ck in your dev environment

Command Palette

Search for a command to run...