Everything-claude-code 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.

install
source · Clone the upstream repo
git clone https://github.com/affaan-m/everything-claude-code
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/affaan-m/everything-claude-code "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/ck" ~/.claude/skills/affaan-m-everything-claude-code-ck && rm -rf "$T"
manifest: skills/ck/SKILL.md
source content

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
    {}
    .