/checklist: a checklist de progresso no projeto
/checklist instala no diretório atual o que falta para a checklist e a exibe em um chat dedicado. Não sobrescreve nem altera nada do que já existe.
Como funciona:
- O diretório do projeto é o diretório atual. Todos os comandos partem dele.
<base>é o "Diretório base" impresso no topo desta skill. Os modelos estão em<base>/modelos/.- Cada caminho nos comandos deve estar entre aspas: a base e o diretório do projeto podem conter espaços.
- Execute as etapas em ordem, sem pedir confirmações, exceto quando a etapa o exigir.
- Cada
grepusa-a: no Claude Code ogreppode tratar como binário um arquivo não UTF-8 e não encontrar linhas que existem.
Etapa 1: verificações preliminares
- Execute
command -v node. Se não imprimir nada, escreva uma linha ("É necessário Node.js 18 ou superior: instale e execute /checklist") e pare. - Execute
git rev-parse --path-format=absolute --git-diregit rev-parse --path-format=absolute --git-common-dir. Se derem dois resultados diferentes, você está em um worktree secundário: escreva uma linha ("Você está em um worktree: o registro desapareceria com ele. Execute /checklist a partir da pasta principal do projeto") e pare. Se ambos os comandos falharem, não há git: prossiga. - Execute
pwd -Pe(cd ~ && pwd -P). Se derem o mesmo resultado, você está na pasta home: escreva uma linha ("Você está na pasta home: o bloco no CLAUDE.md valeria para todos os projetos. Execute /checklist na pasta do projeto") e pare.
A etapa termina quando o node existe e a pasta não é nem um worktree secundário nem a pasta home.
Etapa 2: verificação das quatro peças
Não escreva nada. Anote para cada uma se existe ou falta:
- o registro: existe
documentos/trabalhos.yaml; - o script: existe
ferramentas-locais/andamento/status.mjs; - o bloco:
grep -aqx '## Checklist de progresso' CLAUDE.mdtem sucesso (seCLAUDE.mdnão existir, o bloco falta); - as linhas de exclusão, apenas com git (
git rev-parse --is-inside-work-treeimprimetrue): o arquivo impresso porgit rev-parse --git-path info/excludecontém as linhas exatas**/documentos/trabalhos.yamle**/ferramentas-locais/andamento/. São apenas os arquivos da skill: as outras pastasdocumentos/do projeto permanecem visíveis ao git. Verifique cada uma comgrep -aqxF '**/documentos/trabalhos.yaml' "<arquivo exclude>"egrep -aqxF '**/ferramentas-locais/andamento/' "<arquivo exclude>". Se o arquivo não existir, faltam ambas.
A etapa termina quando você sabe quais peças faltam.
Etapa 3: nome do projeto
- Se o bloco existe no
CLAUDE.md, o nome é o que segue "Atualize a checklist de " até a aspa de fechamento», na primeira ocorrência. Comando:grep -ao 'Atualize a checklist de [^»]*' CLAUDE.md | head -1, sem o prefixo. Se o nome existir, não faça perguntas. Se o comando não imprimir nada ou o nome ficar vazio (linha modificada pelo usuário), vá para o ponto 2. - Caso contrário, faça uma pergunta com AskUserQuestion. Primeira opção, recomendada: o nome da pasta. Segunda opção: uma variante, ou seja, o título
#do README se existir e for diferente do nome da pasta, senão o nome da pasta com maiúsculas ou espaços diferentes. O usuário sempre pode escrever outro nome. - Se não puder fazer perguntas (por exemplo, em modo não interativo), use o nome da pasta e escreva uma linha informando.
A etapa termina quando você tem o nome, que aqui abaixo se chama <PROJETO>.
Etapa 4: instalação do que falta
Faça apenas o que a etapa 2 encontrou faltando. Nunca sobrescreva nem modifique o que já existe.
- Registro. Se faltar:
mkdir -p documentose[ -e documentos/trabalhos.yaml ] || sed "s/<HOJE>/$(date +%F)/g" "<base>/modelos/trabalhos.yaml" > documentos/trabalhos.yaml(a guarda protege um registro existente mesmo que a etapa 2 tenha errado). Se porém o script já existir, o projeto pode ter sua própria checklist que lê outro registro (por exemplotrabalhos.json): primeiro pergunte com AskUserQuestion se deve criardocumentos/trabalhos.yaml. Primeira opção, recomendada: não criá-lo. Se a resposta for não, ou se não puder fazer perguntas, não crie, escreva uma linha informando e pule também as linhas de exclusão (ponto 4), que esconderiam do git os arquivos da checklist do projeto. - Script. Se faltar:
mkdir -p ferramentas-locais/andamentoecp -n "<base>/modelos/status.mjs" ferramentas-locais/andamento/status.mjs. - Bloco no CLAUDE.md. Se faltar:
- leia
<base>/modelos/claude-md.mde substitua cada<PROJETO>pelo nome; - execute
mktemp -de escreva o bloco já substituído, com a ferramenta de escrita de arquivos, em<tmp>/bloco.md(<tmp>é a pasta impressa); - se
CLAUDE.mdexistir e não estiver vazio, prepare a cauda com estes dois comandos (não leia nem reescreva o arquivo):if [ -s CLAUDE.md ] && [ -n "$(tail -c1 CLAUDE.md)" ]; then printf '\n' >> CLAUDE.md; fi(adiciona a quebra de linha final se faltar)if [ -s CLAUDE.md ] && [ -n "$(tail -n1 CLAUDE.md)" ]; then printf '\n' >> CLAUDE.md; fi(adiciona a linha vazia se a última linha não estiver vazia) - anexe o bloco:
cat "<tmp>/bloco.md" >> CLAUDE.md(cria o arquivo se não existir). O texto do usuário nunca é reescrito. - Não use
sed: o nome pode conter/ou&.
- leia
- Linhas de exclusão, apenas com git. Seja
<exclude>o caminho impresso porgit rev-parse --git-path info/exclude.mkdir -p "$(dirname "<exclude>")".- Adicione a quebra de linha final se faltar:
if [ -s "<exclude>" ] && [ -n "$(tail -c1 "<exclude>")" ]; then printf '\n' >> "<exclude>"; fi. - Para cada linha que falta entre
**/documentos/trabalhos.yamle**/ferramentas-locais/andamento/:printf '%s\n' '**/documentos/trabalhos.yaml' >> "<exclude>"(ou'**/ferramentas-locais/andamento/').
- Sem git, escreva uma linha de aviso: "Aqui não há git: a linha do repositório no widget ficará vazia".
A etapa termina quando cada peça faltante foi criada. Se não faltava nada, a etapa termina imediatamente.
Etapa 5: abertura do chat da checklist
Faça isso tanto após uma instalação quanto quando já estava tudo pronto.
- Se
mcp__ccd_session__start_sessionemcp__ccd_session_mgmt__detach_sessionestiverem entre as ferramentas diferidas, carregue-as com ToolSearch. - Chame
start_sessioncom:initiation:user_askedcontext:freshuse_worktree:falseeffort:low(o chat executa um script e compõe um widget: não exige o esforço da sessão de onde parte)title: "Checklist: "prompt: "Executenode ferramentas-locais/andamento/status.mjse mostre a checklist conforme o CLAUDE.md"background: "Checklist de progresso do projeto : o script éferramentas-locais/andamento/status.mjs. O CLAUDE.md do projeto informa qual é o registro, como mostrar a checklist e quando atualizar o registro."
- Imediatamente após, chame
detach_sessioncom o id retornado: é um chat principal, não uma sub-chat. - Se
start_sessionfaltar (CLI) ou recusar: executenode ferramentas-locais/andamento/status.mjse mostre a checklist neste chat, conforme<base>/modelos/claude-md.md: comshow_widget, ou em tabela markdown seshow_widgetfaltar. - Se
start_sessionfuncionar mas o desacoplamento faltar ou recusar, escreva uma linha: "Desacople-o da barra lateral com Detach to top level". - Cada execução abre um novo chat: não procure chats anteriores.
A etapa termina quando o chat está aberto e desacoplado, ou a checklist foi mostrada neste chat.
Etapa 6: mensagem final
Escreva duas ou três linhas:
- o que você adicionou, ou "Já estava tudo pronto";
- os avisos, se houver;
- onde encontrar o chat da checklist.
Escreva também que para adicionar ou fechar trabalhos basta falar no chat: a regra no CLAUDE.md faz atualizar o registro.
A etapa termina quando a mensagem é escrita.