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
origin:community
New~1.2k
v1.2Saved Jul 14, 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

78/100

Grade

B

Good

Safety

82

Quality

76

Clarity

81

Completeness

70

Summary

Context Keeper is a persistent per-project memory system for Claude Code that auto-loads session context, tracks git activity, and maintains structured project state via Node.js scripts. The skill provides commands for initializing projects, saving/resuming sessions, and managing multi-project contexts stored in ~/.claude/ck/.

Detected Capabilities

file readfile writeJSON parsing and generationnode.js script executiongit integrationsession hook injectionenvironment variable expansionfile system traversal

Trigger Keywords

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

resume project contextpersist session notessave work progresstrack decisionsproject memorycontext between sessionsunsaved work detectionmulti-project switching

Risk Signals

INFO

Node.js script execution via user-provided arguments (forget.mjs, resume.mjs, info.mjs take [name|number])

Commands: /ck:resume, /ck:info, /ck:forget with dynamic arguments
INFO

File writes to user home directory (~/.claude/ck/)

Data Layout section, save.mjs
WARNING

Session hook registration modifies ~/.claude/settings.json

SessionStart Hook section
INFO

Project context data includes git repo URLs (potentially external)

Confirmed JSON schema in /ck:init

Referenced Domains

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

github.com

Use Cases

  • Maintain continuity across Claude Code sessions for long-running projects
  • Automatically resume project context with file locations, decisions, and blockers from previous work
  • Track and summarize session progress without manual note-taking
  • Manage multiple projects with distinct contexts and switching between them quickly
  • Detect unsaved work and git activity changes between sessions

Quality Notes

  • Well-structured with clear command documentation and exact JSON schemas for each operation
  • Data layout diagram clarifies project organization and storage
  • Explicit rules section addresses edge cases (malformed JSON, direct file edits prohibited, case-insensitivity)
  • Each command has clear input/output format and confirmation flow
  • SessionStart Hook integration requires explicit user setup — appropriate guardrail
  • Comprehensive `/ck:migrate` command for version upgrades with dry-run and backup
  • Calls out that `/ck:save` is the only command requiring LLM analysis
  • Node.js scripts are referenced but not documented in skill itself — shared.mjs is 14.9 KB black box
  • No documented error handling for script failures beyond 'display stdout as error'
  • Dry-run mode provided for potentially destructive migrate operation
Model: claude-haiku-4-5-20251001Analyzed: Jul 14, 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.2

Content updated

2026-07-14

Latest
v1.1

Content updated

2026-04-20

v1.0

No changelog

2026-04-12

Use affaan-m/ck in your dev environment

Command Palette

Search for a command to run...