---
id: daily-ck
name: "ck"
url: https://skills.yangsir.net/skill/daily-ck
author: affaan-m
domain: ai-agent-memory-knowledge
tags: ["context-management", "automation", "productivity", "cli", "devops-tools"]
install_count: 4500
rating: 4.40 (24 reviews)
github: https://github.com/affaan-m/everything-claude-code
---

# ck

> 管理Claude Code的上下文状态，支持保存、恢复和切换不同的对话上下文，避免长时间对话中的信息丢失

**Stats**: 4,500 installs · 4.4/5 (24 reviews)

## Before / After 对比

### 上下文持久化

**Before**:

长时间对话后上下文信息丢失，需要重复描述项目背景、代码结构和之前的讨论内容，严重影响工作效率

**After**:

随时保存当前对话上下文，支持在不同任务间快速切换，重新加载上下文后立即恢复工作状态，无需重复说明背景

| Metric | Before | After | Change |
|---|---|---|---|
| 上下文恢复时间 | 15分钟 | 1分钟 | -93% |

## Readme

# ck

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

Weekly Installs512Repository[affaan-m/everyt…ude-code](https://github.com/affaan-m/everything-claude-code)GitHub Stars144.9KFirst Seen10 days agoSecurity Audits[Gen Agent Trust HubPass](/affaan-m/everything-claude-code/ck/security/agent-trust-hub)[SocketPass](/affaan-m/everything-claude-code/ck/security/socket)[SnykPass](/affaan-m/everything-claude-code/ck/security/snyk)Installed oncodex477opencode455cursor450github-copilot449antigravity449gemini-cli448

---
*Source: https://skills.yangsir.net/skill/daily-ck*
*Markdown mirror: https://skills.yangsir.net/api/skill/daily-ck/markdown*