develop/tasks.json の中身をテーブル1つに要約して表示し、todo があれば次の1件を
推薦するスキル。列は1つ1値に分け、summary は切らずに全文出す(下の「表示のしかた」)。
何も書き換えない。タスクを実行しない。 実行は /next-task、登録は /plan-tasks。
運用のルールは task-workflow スキルの WORKFLOW.md(以下「正典」)。
アーカイブ判定の予算(done 5件以上、または 15000文字超)は規約で固定されていて、プロジェクト
ごとの設定は無い(正典「ファイル配置と CLAUDE.md」)。このスキルは検証コマンドを使わないので、
CLAUDE.md も読まない。
タスク本文を読み込まない
1タスクの task 本文は数KBあり、全件読むとそれだけでコンテキストを大きく消費する。
一行要約は summary フィールドに入っているので、下のコマンドの出力だけを使う。
develop/tasks.json を Read ツールで開いたり cat したりしない。
python3 ${CLAUDE_SKILL_DIR}/../task-workflow/scripts/status.py develop/tasks.json
出力は TSV。列は id / status / difficulty / loopable / dependencies / 着手可否 / passes / summary。loopable 列の ? は、フィールドが無い旧タスク(Y 扱い。正典「loopable」)。
末尾に付く行:
| 行 | 中身 |
|---|---|
counts |
todo/doing/done の件数 |
todo_loopable |
todo のうち loopable: "N" の件数 |
long_summary |
未完了で summary が80桁を超えたタスクのID(正典「summary」違反の候補) |
done_failed |
passes: false のまま done になったタスクのID(着手しない判断) |
missing_field |
TSV に要るフィールドが欠けたタスクのID と欠けた名前(? で出してある) |
done_size |
done が占める文字数と、ファイルの実バイト数(単位が違うので混ぜない) |
archive |
tasks.json のアーカイブ判定(YES/NO) |
progress |
develop/progress.md のアーカイブ判定(YES/NO、並び順が逆なら ERROR) |
表示のしかた
上のコマンドを実行する。
EMPTYなら「登録されているタスクは0件」、MISSINGなら 「develop/tasks.jsonが無い(このプロジェクトはまだタスク運用を始めていない)」、INVALIDなら「tasks.jsonが読めない」と、付いてくる理由をそのまま添えて終わる (データの不備なので、このスキルは直さない)。EMPTY・MISSING・INVALID・TSV の どれでもない出力で終わったら(python3が無い、エラーで落ちたなど)、tasks.json を 全文読んで代用せず、python3が使えない旨とエラー出力を伝えて終わる。代用すると、 節約の仕組みが死んでいることに誰も気づけない。未完了タスクをテーブル1つで出す。行は
todo(着手可能なものが先)→doingの順。ID 状態 難易度 loop 内容 T-130 着手可 haiku 可 speak のログに expression を残す T-125 T-124 待ち sonnet 要判断 新しいキャラクターパックを画面から作れるようにし、作成後はそのまま編集に入れるところまで通す T-124 作業中 sonnet 可 キャラクターパックのスキーマを決める - 1列1値。
可 opus/Yのように1つのセルへ2つ以上を畳まない(読めない)。状態・loopの書き分けは下の表のとおり 内容列は TSV のsummary(8列目)をそのまま貼る。 切り詰めない・要約し直さない (書き方の正典は「summary」節)。行が端末幅を超えて折り返してよい—— 読み手が全文を見たいと言っているので、幅より中身を優先する。(summaryなし)はそのまま出し、テーブルの下の1行で「summaryフィールドが無いタスク」と添える依存の列は作らない(状態が待ち先のIDを持つので二重になる)doneの行は出さない。 「次に何をやるか」を決めるための一覧で、doneはdocs/history/tasks.mdにある。件数だけ下の行で伝える
TSV 書き方 READY着手可BLOCKED:T-124T-124 待ちstatusがdoing作業中loopableがY/?可loopableがN要判断- 1列1値。
テーブルの下に1行だけ添える。件数(
todo/doing/done)、todo_loopableのNが 1件以上ならそのうち/loopでは進まない件数、archive行かprogress行がYESなら アーカイブのトリガーに該当すること(どちらの側かを添える)を書く (判定を書くだけで、移す作業はしない)。long_summaryが1件以上なら、続けてもう1行だけ添える: 「summaryが長すぎる(正典「summary」の一行に収まっていない): T-xxx, T-yyy」。 長いsummaryはタスクが大きすぎる合図なので、そのまま報告する(直す作業はしない)。done_failedが1件以上なら、同じ行に「着手しない判断で閉じた: T-zzz」と添える。missing_fieldが1件以上なら、さらに1行で「フィールドが欠けている: T-xxx(difficulty)」と、 欠けた名前つきで添える(?の出どころがこれだと分かるように。直す作業はしない)。todoが1件以上あれば、続けて「オススメ」を出す(次節)。0件なら出さない。
オススメの提示
todo があるときは、テーブルの下に次に着手する1件の推薦を添える。推薦するだけで、
着手はしない(実行は /next-task)。
推薦するのは 着手可否 が READY のタスク。BLOCKED: のタスクは推薦しない(依存が
終わっていないので着手できない)。順位は上から順に見て、先に決着したところで確定する。
- 他のタスクをブロックしている数が多いもの(TSVの
依存列を全行ぶん数えて、その タスクIDを依存に挙げているtodo/doingの件数)。詰まりを先に解くほど後が動く difficultyが低いもの(haiku→sonnet→opus)。軽いものから片付ける- それでも並ぶなら、TSVで先に出てきたもの(登録順)
出す形は次の2行だけ。テーブルや見出しを増やさない。
オススメ: T-012(difficulty: haiku)— T-015 と T-018 の依存を解くので、ここから開けると後が動く
着手するなら /next-task。
- 理由は1行。上の順位のうち、実際に決め手になったものだけを書く(「ブロックを解く」 「一番軽い」「READY がこれだけ」など)
- 推薦したタスクの
loopableがNなら、理由の後ろに 「ユーザーの判断が要るので/loopでは進まない」と添える(正典「loopable」) READYが0件(todoは残っているが全てBLOCKED:)なら、推薦の代わりに1行で 「着手できるtodoは無い。T-xxxが終わるとT-yyyが開く」と、待ち先のIDを書くdoingのタスクがあるときは、推薦の前に1行で「T-xxxがdoingのまま」と添える。 やりかけを先に片付けるほうが筋
出さないもの
- タスク本文(
## 背景・## やることなどの中身)。要約だけが仕事 evidenceの内容。doneの詳細を見たいときはdocs/history/tasks.mddevelop/progress.mdの内容。あれは別のファイルで、このスキルは触らない- 2件目以降の実行計画。オススメは1件だけで、順番を組み立てるのは仕事ではない
- 推薦したタスクの実装方針・進め方。本文を読まずに推薦しているので、中身の話はできない
特定のタスクの本文を読みたいと言われたら、このスキルの範囲外。
python3 -c "import json; print([t for t in json.load(open('develop/tasks.json')) if t['id']=='T-XXX'][0]['task'])"
でその1件だけを読む。