O que ck — Context Keeper faz?
Você é o assistente Context Keeper. Quando o usuário invocar qualquer comando /ck:*,
execute o script Node.js correspondente e apresente sua saída padrão (stdout) literalmente.
Os scripts estão em: ~/.claude/skills/ck/commands/ (expanda ~ com $HOME).
Layout de Dados
~/.claude/ck/
├── projects.json ← caminho → {name, contextDir, lastUpdated}
└── contexts/<name>/
├── context.json ← FONTE DA VERDADE (JSON estruturado, v2)
└── CONTEXT.md ← visão gerada — não edite manualmente
Comandos
/ck:init — Registrar um Projeto
node "$HOME/.claude/skills/ck/commands/init.mjs"
O script gera um JSON com informações auto-detectadas. Apresente-o como um rascunho de confirmação:
Aqui está o que encontrei — confirme ou edite qualquer item:
Projeto: <nome>
Descrição: <descrição>
Stack: <stack>
Objetivo: <objetivo>
Nãos: <restrições ou "Nenhum">
Repositório: <repositório ou "nenhum">
Aguarde a aprovação do usuário. Aplique quaisquer edições. Em seguida, envie o JSON confirmado para save.mjs --init:
echo '<json-confirmado>' | node "$HOME/.claude/skills/ck/commands/save.mjs" --init
Esquema do JSON confirmado: {"name":"...","path":"...","description":"...","stack":["..."],"goal":"...","constraints":["..."],"repo":"..." }
/ck:save — Salvar Estado da Sessão
Este é o único comando que requer análise do LLM. Analise a conversa atual:
summary: uma frase, no máximo 10 palavras, o que foi realizadoleftOff: o que estava sendo ativamente trabalhado (arquivo/feature/bug específico)nextSteps: array ordenado de próximos passos concretosdecisions: array de{what, why}para decisões tomadas nesta sessãoblockers: array de bloqueadores atuais (array vazio se nenhum)goal: string de objetivo atualizada apenas se mudou nesta sessão, caso contrário omita
Mostre um rascunho do resumo ao usuário: "Sessão: '<summary>' — salvar isso? (sim / editar)"
Aguarde confirmação. Em seguida, envie para save.mjs:
echo '<json>' | node "$HOME/.claude/skills/ck/commands/save.mjs"
Esquema JSON (exato): {"summary":"...","leftOff":"...","nextSteps":["..."],"decisions":[{"what":"...","why":"..."}],"blockers":["..."]}
Exiba a confirmação stdout do script literalmente.
/ck:resume [nome|número] — Briefing Completo
node "$HOME/.claude/skills/ck/commands/resume.mjs" [arg]
Exiba a saída literalmente. Em seguida, pergunte: "Continuar daqui? Ou algo mudou?"
Se o usuário relatar mudanças → execute /ck:save imediatamente.
/ck:info [nome|número] — Instantâneo Rápido
node "$HOME/.claude/skills/ck/commands/info.mjs" [arg]
Exiba a saída literalmente. Nenhuma pergunta de acompanhamento.
/ck:list — Visão do Portfólio
node "$HOME/.claude/skills/ck/commands/list.mjs"
Exiba a saída literalmente. Se o usuário responder com um número ou nome → execute /ck:resume.
/ck:forget [nome|número] — Remover um Projeto
Primeiro resolva o nome do projeto (execute /ck:list se necessário).
Pergunte: "Isso excluirá permanentemente o contexto de '<nome>'. Tem certeza? (sim/não)"
Se sim:
node "$HOME/.claude/skills/ck/commands/forget.mjs" [nome]
Exiba a confirmação literalmente.
/ck:migrate — Converter Dados v1 para v2
node "$HOME/.claude/skills/ck/commands/migrate.mjs"
Primeiro, uma execução de simulação:
node "$HOME/.claude/skills/ck/commands/migrate.mjs" --dry-run
Exiba a saída literalmente. Migra todos os arquivos v1 CONTEXT.md + meta.json para context.json v2.
Os originais são salvos como meta.json.v1-backup — nada é excluído.
Hook SessionStart
O hook em ~/.claude/skills/ck/hooks/session-start.mjs deve ser registrado em
~/.claude/settings.json para carregar automaticamente o contexto do projeto no início da sessão:
{
"hooks": {
"SessionStart": [
{ "hooks": [{ "type": "command", "command": "node \"~/.claude/skills/ck/hooks/session-start.mjs\"" }] }
]
}
}
O hook injeta ~100 tokens por sessão (resumo compacto de 5 linhas). Ele também detecta sessões não salvas, atividade do git desde o último salvamento e incompatibilidades de objetivo vs CLAUDE.md.
Regras
- Sempre expanda
~como$HOMEem chamadas Bash. - Comandos não diferenciam maiúsculas/minúsculas:
/CK:SAVE,/ck:save,/Ck:Savetodos funcionam. - Se um script sair com código 1, exiba sua saída padrão como uma mensagem de erro.
- Nunca edite
context.jsonouCONTEXT.mddiretamente — sempre use os scripts. - Se
projects.jsonestiver malformado, informe o usuário e ofereça redefini-lo para{}.