mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-03-30 13:43:26 +08:00
Adds the ck (Context Keeper) skill — deterministic Node.js scripts that give Claude Code persistent, per-project memory across sessions. Architecture: - commands/ — 8 Node.js scripts handle all command logic (init, save, resume, info, list, forget, migrate, shared). Claude calls scripts and displays output — no LLM interpretation of command logic. - hooks/session-start.mjs — injects ~100 token compact summary on session start (not kilobytes). Detects unsaved sessions, git activity since last save, goal mismatch vs CLAUDE.md. - context.json as source of truth — CONTEXT.md is generated from it. Full session history, session IDs, git activity per save. Commands: /ck:init /ck:save /ck:resume /ck:info /ck:list /ck:forget /ck:migrate Source: https://github.com/sreedhargs89/context-keeper Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
148 lines
4.7 KiB
Markdown
148 lines
4.7 KiB
Markdown
---
|
|
name: ck
|
|
description: 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.
|
|
origin: community
|
|
version: 2.0.0
|
|
author: sreedhargs89
|
|
repo: https://github.com/sreedhargs89/context-keeper
|
|
---
|
|
|
|
# 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
|
|
```bash
|
|
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:
|
|
```bash
|
|
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:
|
|
```bash
|
|
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
|
|
```bash
|
|
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
|
|
```bash
|
|
node "$HOME/.claude/skills/ck/commands/info.mjs" [arg]
|
|
```
|
|
Display output verbatim. No follow-up question.
|
|
|
|
---
|
|
|
|
### `/ck:list` — Portfolio View
|
|
```bash
|
|
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:
|
|
```bash
|
|
node "$HOME/.claude/skills/ck/commands/forget.mjs" [name]
|
|
```
|
|
Display confirmation verbatim.
|
|
|
|
---
|
|
|
|
### `/ck:migrate` — Convert v1 Data to v2
|
|
```bash
|
|
node "$HOME/.claude/skills/ck/commands/migrate.mjs"
|
|
```
|
|
For a dry run first:
|
|
```bash
|
|
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:
|
|
|
|
```json
|
|
{
|
|
"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 `{}`.
|