/checklist: プロジェクトの進捗チェックリスト
/checklist はカレントディレクトリにチェックリスト不足分をインストールし、専用チャットで表示します。既存のものは上書き・変更しません。
作業の流れ:
- プロジェクトフォルダはカレントディレクトリです。すべてのコマンドはそこから実行します。
<base>はこのスキルの上部に表示される「ベースディレクトリ」です。テンプレートは<base>/modelli/にあります。- 各パスは引用符で囲みます: ベースとプロジェクトフォルダにはスペースが含まれる可能性があります。
- 手順は確認なしで順番に実行します。ただし、手順内で明示的に指示がある場合を除きます。
- 各
grepは-aを使用します: Claude Code では、grepが非UTF-8ファイルをバイナリとして扱い、存在する行を見つけられない可能性があります。
ステップ 1: 事前確認
command -v nodeを実行します。何も出力されなければ、「Node.js 18以降が必要です: インストールしてから /checklist を再実行してください」と一行書き、停止します。git rev-parse --path-format=absolute --git-dirとgit rev-parse --path-format=absolute --git-common-dirを実行します。二つの結果が異なる場合は、セカンダリワークツリー内です: 「セカンダリワークツリー内です: レジストリはワークツリーとともに消えます。プロジェクトのメインフォルダから /checklist を実行してください」と一行書き、停止します。両方のコマンドが失敗した場合は、Git がありません: 先に進みます。pwd -Pと(cd ~ && pwd -P)を実行します。同じ結果が得られた場合は、ホームディレクトリ内です: 「ホームディレクトリ内です: CLAUDE.md のブロックがすべてのプロジェクトに適用されます。プロジェクトフォルダから /checklist を実行してください」と一行書き、停止します。
Node が存在し、カレントディレクトリがセカンダリワークツリーでもホームディレクトリでもない場合、このステップは完了です。
ステップ 2: 4つの構成要素の確認
何も書き込みません。各要素について、存在するか不足しているかを記録します:
- レジストリ:
documenti/lavori.yamlが存在するか - スクリプト:
strumenti-locali/avanzamento/stato.mjsが存在するか - ブロック:
grep -aqx '## 進捗チェックリスト' CLAUDE.mdが成功するか(CLAUDE.mdが存在しない場合はブロックなし) - 除外行 (Git がある場合のみ、
git rev-parse --is-inside-work-treeがtrueを出力):git rev-parse --git-path info/excludeが出力するファイルに、**/documenti/lavori.yamlと**/strumenti-locali/avanzamento/の行が正確に含まれているか。各行をgrep -aqxF '**/documenti/lavori.yaml' "<exclude_file>"とgrep -aqxF '**/strumenti-locali/avanzamento/' "<exclude_file>"で確認します。ファイルが存在しない場合は両方とも不足しています。
どの要素が不足しているかがわかった時点で、このステップは完了です。
ステップ 3: プロジェクト名
- ブロックが
CLAUDE.mdに存在する場合、名前は「進捗チェックリストを更新: 」の後に続く、最初の引用符»までの部分です。コマンド:grep -ao '進捗チェックリストを更新: [^»]*' CLAUDE.md | head -1、プレフィックスなし。名前があれば質問はしません。コマンドが何も出力しないか、名前が空の場合(ユーザーが編集した行)、ポイント2に進みます。 - それ以外の場合は、AskUserQuestion で質問します。最初の選択肢(推奨): フォルダ名。2番目の選択肢: バリエーション、つまり README の
#タイトルが存在しフォルダ名と異なる場合はそのタイトル、そうでなければ大文字/スペースが異なるフォルダ名。ユーザーは常に別の名前を入力できます。 - 質問ができない場合(非対話モードなど)、フォルダ名を使用し、その旨を一行書き込みます。
名前が決まった時点でこのステップは完了です。以下、この名前を <プロジェクト> と呼びます。
ステップ 4: 不足分のインストール
ステップ2で不足していると判明したもののみ実行します。既存のものを上書きしたり変更したりしてはいけません。
- レジストリ。 不足している場合:
mkdir -p documentiと[ -e documenti/lavori.yaml ] || sed "s/<今日>/$(date +%F)/g" "<base>/modelli/lavori.yaml" > documenti/lavori.yaml(ガードにより、ステップ2が間違っていても既存のレジストリを保護します)。 ただし、スクリプトが既に存在する場合、プロジェクトは別のレジストリ(例:lavori.json)を読み取る独自のチェックリストを持っている可能性があります: まず AskUserQuestion でdocumenti/lavori.yamlを作成するかどうかを尋ねます。最初の選択肢(推奨): 作成しない。回答が「いいえ」の場合、または質問ができない場合、作成せず、その旨を一行書き込み、除外行(ポイント4)もスキップします(除外行はプロジェクトのチェックリストファイルを Git から隠してしまうため)。 - スクリプト。 不足している場合:
mkdir -p strumenti-locali/avanzamentoとcp -n "<base>/modelli/stato.mjs" strumenti-locali/avanzamento/stato.mjs。 - CLAUDE.md のブロック。 不足している場合:
<base>/modelli/claude-md.mdを読み込み、<プロジェクト>をすべて名前に置き換えます。mktemp -dを実行し、置き換え済みのブロックを、ファイル書き込みツールを使用して<tmp>/blocco.mdに書き込みます(<tmp>は出力されたフォルダです)。CLAUDE.mdが存在し空でない場合、次の2つのコマンドで末尾を準備します(ファイルを読み書きしない):if [ -s CLAUDE.md ] && [ -n "$(tail -c1 CLAUDE.md)" ]; then printf '\n' >> CLAUDE.md; fi(末尾の改行がない場合追加)if [ -s CLAUDE.md ] && [ -n "$(tail -n1 CLAUDE.md)" ]; then printf '\n' >> CLAUDE.md; fi(最終行が空でない場合空行を追加)- ブロックを追加:
cat "<tmp>/blocco.md" >> CLAUDE.md(ファイルがなければ作成します)。ユーザーのテキストは決して書き換えません。 sedは使用しないでください: 名前に/や&が含まれる可能性があります。
- Git がある場合の除外行。
<exclude>をgit rev-parse --git-path info/excludeが出力するパスとします。mkdir -p "$(dirname "<exclude>")"。- 末尾の改行がない場合追加:
if [ -s "<exclude>" ] && [ -n "$(tail -c1 "<exclude>")" ]; then printf '\n' >> "<exclude>"; fi。 - 不足している各行 (
**/documenti/lavori.yamlと**/strumenti-locali/avanzamento/) について:printf '%s\n' '**/documenti/lavori.yaml' >> "<exclude>"(または'**/strumenti-locali/avanzamento/')。
- Git がない場合、「Git がありません: ウィジェットのリポジトリ行は空のままになります」と警告の行を書き込みます。
不足しているすべての要素が作成された時点で、このステップは完了です。不足がない場合、すぐに完了します。
ステップ 5: チェックリストチャットを開く
インストール後、または既にすべて揃っている場合の両方で実行します。
mcp__ccd_session__start_sessionとmcp__ccd_session_mgmt__detach_sessionが遅延ツールの中にある場合、ToolSearch で読み込みます。start_sessionを以下のパラメータで呼び出します:initiation:user_askedcontext:freshuse_worktree:falseeffort:low(チャットはスクリプトを実行しウィジェットを構成するだけなので、元のセッションの労力は不要)title: 「Checklist: <プロジェクト>」prompt: 「node strumenti-locali/avanzamento/stato.mjsを実行し、CLAUDE.md に従ってチェックリストを表示してください」background: 「プロジェクト <プロジェクト> の進捗チェックリスト: スクリプトはstrumenti-locali/avanzamento/stato.mjsです。プロジェクトの CLAUDE.md には、レジストリ、チェックリストの表示方法、レジストリを更新するタイミングが記載されています。」
- すぐに、返された ID を使用して
detach_sessionを呼び出します: これはメインチャットであり、サブチャットではありません。 start_sessionがない場合(CLI)または拒否された場合:node strumenti-locali/avanzamento/stato.mjsを実行し、<base>/modelli/claude-md.mdに従ってチェックリストをこのチャットに表示します:show_widgetを使用するか、show_widgetがない場合は Markdown テーブルで表示します。start_sessionは成功したがデタッチが失敗または拒否された場合、「サイドバーから「最上位にデタッチ」でデタッチしてください」と一行書き込みます。- 毎回新しいチャットを開きます: 以前のチャットを探さないでください。
チャットが開いてデタッチされたか、チェックリストがこのチャットに表示された時点で、このステップは完了です。
ステップ 6: 最終メッセージ
2~3行書き込みます:
- 追加した内容、または「すべて既に存在していました」
- 警告があればその内容
- チェックリストチャットの場所
また、作業の追加や終了についてはチャットで伝えるだけでよいことも書き添えます: CLAUDE.md のルールによりレジストリが更新されます。
メッセージが書き込まれた時点で、このステップは完了です。