6 Commits

  • fix(ck): address Greptile + CodeRabbit review bugs
    - Fix read-after-write in session-start.mjs: read prevSession BEFORE
      overwriting current-session.json so unsaved-session detection fires
    - Fix shell injection in resume.mjs: replace execSync shell string with
      fs.existsSync for directory existence check
    - Fix shell injection in shared.mjs gitSummary: replace nested \$(git ...)
      subshell with a separate runGit() call to get rev count
    - Fix displayName never shown: render functions now use ctx.displayName
      ?? ctx.name so user-supplied names show instead of the slug
    - Fix renderListTable: uses context.displayName ?? entry.name
    - Fix init.mjs: use path.basename() instead of cwd.split('/').pop()
    - Fix save.mjs confirmation: show original name, not contextDir slug
    
    Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
  • feat(skill): ck — context-keeper v2, persistent per-project memory
    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>