Source profileQuality 69/100Review permissions

affaan-m/ECC/skills/ck/SKILL.md

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.

Source repository stars
234,327
Declared platforms
1
Static risk flags
1
Last source update
2026-07-27
Source checked
2026-07-28

Decision brief

What it does—and where it fits

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).

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeDeclaredSource recordInstall path and trigger
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/affaan-m/ECC --skill "skills/ck"
    Safe inspection promptEditorial

    Inspect the Agent Skill "ck" from https://github.com/affaan-m/ECC/blob/4e973d3eaf92d97f8d2e2d8abb39d8bdc8711b38/skills/ck/SKILL.md at commit 4e973d3eaf92d97f8d2e2d8abb39d8bdc8711b38. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      Data Layout

      Review the “Data Layout” section in the pinned source before continuing.

      Review and apply the “Data Layout” source section.
    2. 02

      Commands

      The script outputs JSON with auto-detected info. Present it as a confirmation draft:

      summary: one sentence, max 10 words, what was accomplishedleftOff: what was actively being worked on (specific file/feature/bug)nextSteps: ordered array of concrete next steps
    3. 03

      /ck:init — Register a Project

      The script outputs JSON with auto-detected info. Present it as a confirmation draft:

      The script outputs JSON with auto-detected info. Present it as a confirmation draft:Wait for user approval. Apply any edits. Then pipe confirmed JSON to save.mjs --init:Confirmed JSON schema: {"name":"...","path":"...","description":"...","stack":["..."],"goal":"...","constraints":["..."],"repo":"..." }
    4. 04

      /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:…

      summary: one sentence, max 10 words, what was accomplishedleftOff: what was actively being worked on (specific file/feature/bug)nextSteps: ordered array of concrete next steps
    5. 05

      /ck:resume [name|number] — Full Briefing

      Display output verbatim. Then ask: "Continue from here? Or has anything changed?" If user reports changes → run /ck:save immediately.

      Display output verbatim. Then ask: "Continue from here? Or has anything changed?" If user reports changes → run /ck:save immediately.

    Permission review

    Static risk signals and limitations

    Runs scripts

    medium · line 4

    The documentation asks the agent to run terminal commands or scripts.

    run the corresponding Node.js script and present its stdout to the user verbatim.

    Runs scripts

    medium · line 25

    The documentation asks the agent to run terminal commands or scripts.

    node "$HOME/.claude/skills/ck/commands/init.mjs"

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score69/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars234,327SourceRepository attention, not individual Skill quality
    Compatibility1 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    affaan-m/ECC
    Skill path
    skills/ck/SKILL.md
    Commit
    4e973d3eaf92d97f8d2e2d8abb39d8bdc8711b38
    License
    MIT
    Collected
    2026-07-28
    Default branch
    main
    View the original SKILL.md

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

    Alternatives

    Compare before choosing