# List Tasks

> develop/tasks.json に登録されているタスクの一覧をテーブルで表示し、todo があれば次に着手する1件を推薦する。ユーザーが「タスク一覧を見せて」「今どのタスクが残ってる？」「次は何をやるべき？」「tasks.json の中身を教えて」と言ったときに使う。読み取り専用で、タスクの実行も登録もしない。

- Skill: `sinnlosses/list-tasks` (Agent Skill)
- Install (CLI): `npx skillmds@latest add sinnlosses/list-tasks`
- Raw SKILL.md: https://api.skillmd.com/api/skills/sinnlosses/list-tasks/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: sinnlosses (https://skillmd.com/u/sinnlosses)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/sinnlosses/list-tasks

---


`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` したりしない。

```bash
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`） |

## 表示のしかた

1. 上のコマンドを実行する。`EMPTY` なら「登録されているタスクは0件」、`MISSING` なら
   「`develop/tasks.json` が無い（このプロジェクトはまだタスク運用を始めていない）」、
   `INVALID` なら「`tasks.json` が読めない」と、付いてくる理由をそのまま添えて終わる
   （**データの不備なので、このスキルは直さない**）。**`EMPTY`・`MISSING`・`INVALID`・TSV の
   どれでもない出力で終わったら**（`python3` が無い、エラーで落ちたなど）、**tasks.json を
   全文読んで代用せず**、`python3` が使えない旨とエラー出力を伝えて終わる。代用すると、
   節約の仕組みが死んでいることに誰も気づけない。
2. 未完了タスクを**テーブル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-124`       | `T-124 待ち` |
   | `status` が `doing`   | `作業中`     |
   | `loopable` が `Y`/`?` | `可`         |
   | `loopable` が `N`     | `要判断`     |

3. テーブルの下に**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）」と、
   欠けた名前つきで添える（`?` の出どころがこれだと分かるように。直す作業はしない）。
4. `todo` が1件以上あれば、続けて「オススメ」を出す（次節）。0件なら出さない。

## オススメの提示

`todo` があるときは、テーブルの下に**次に着手する1件の推薦**を添える。**推薦するだけで、
着手はしない**（実行は `/next-task`）。

推薦するのは `着手可否` が `READY` のタスク。**`BLOCKED:` のタスクは推薦しない**（依存が
終わっていないので着手できない）。順位は上から順に見て、先に決着したところで確定する。

1. **他のタスクをブロックしている数が多い**もの（TSVの `依存` 列を全行ぶん数えて、その
   タスクIDを依存に挙げている `todo`/`doing` の件数）。詰まりを先に解くほど後が動く
2. **`difficulty` が低い**もの（`haiku` → `sonnet` → `opus`）。軽いものから片付ける
3. それでも並ぶなら、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.md`
- `develop/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件だけを読む。

