Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .claude/commands/task-card.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,11 @@ allowed-tools: Read, Grep, Glob, Bash
- 受入条件(DoD): <機械的に検証できる形で。ビルド・テスト以外の固有条件を書く>
- 参照: Spec.md §x.y / MES.md No.X-XX-XX-XX / docs-dev/CodeMap.md の該当行
- 想定層: L1(設計判断あり) / L2(仕様確定済の実装) / L3(機械的)
- effort: xhigh / high / medium / low(Orchestration.md §3.4 の表から選ぶ)
- 想定変更ファイル数: N
```

## 自己チェック(出力の最後に1行で)

- 変更対象が3ファイルを超える、または「調査で確定」が2項目以上 → **粒度が粗い。分割案を併記する。**
- 認証/在庫更新/実績・原価計算/CSV取込/データモデル変更を含む → 想定層は L1 とし、その理由を書く。
- 認証/在庫更新/実績・原価計算/CSV取込/データモデル変更を含む → 想定層は L1・effort は xhigh とし、その理由を書く。
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ Entity(`Core/Entities`)→ `MesAppDbContext` の `DbSet` と `Configurations
## 進め方の要点(詳細は Orchestration.md)

- 1セッション=1タスク。無関係な作業に移るときは `/clear`、同じファイル群を触るなら継続
- モデルは Opus 5.5 で統一し、層は effort で分ける(L1 設計=high、高リスク領域=xhigh、L2 実装=medium、定型=low)。モデル・effort はセッション途中で変えない
- 探索は Glob → Grep(`-n`・パス限定)→ 該当行±40行の Read。1タスクあたり読込1,500行・Grep 8回まで
- **同じエラーで2回失敗したら3回目を同じやり方で試さない**。前提(変更対象・受入条件)を疑う
- 機械的に確認できることは build / test / grep で確認する。推測で「直った」と言わない
60 changes: 46 additions & 14 deletions Orchestration.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
# Claude Code オーケストレーション運用仕様書
プロダクト名:Parallel Factory MES

版: 1.0(2026-08-22 制定)
版: 1.1(2026-09-23 改訂。1.0 は 2026-08-22 制定)

| 版 | 日付 | 内容 |
|:--|:--|:--|
| 1.1 | 2026-09-23 | Claude Opus 5.5 の提供開始に合わせて見直し。単価表を更新(Sonnet 5 の誤記も訂正)。L2 の既定を「別モデル」から「同じ Opus 5.5 を低い effort で」に変更し、effort を層ごとの主レバーにした(§2.1・§2.4・§3.1・§3.3・§3.4・§4.2・§8) |
| 1.0 | 2026-08-22 | 制定 |
対象: 本リポジトリにおける Claude Code を用いた開発作業すべて

---
Expand Down Expand Up @@ -36,13 +41,19 @@ Claude Code の使用量(トークン/使用枠)を削減しつつ、成
## 2. コスト構造(なぜ節約できるのか)

### 2.1 モデル単価
| モデル | モデルID | 入力 $/1M | 出力 $/1M |
|:--|:--|--:|--:|
| Claude Opus 5 | `claude-opus-5` | $5.00 | $25.00 |
| Claude Sonnet 5 | `claude-sonnet-5` | $3.00 | $15.00 |
| Claude Haiku 4.5 | `claude-haiku-4-5` | $1.00 | $5.00 |
| モデル | モデルID | 入力 $/1M | 出力 $/1M | 文脈長 | 本書での扱い |
|:--|:--|--:|--:|--:|:--|
| **Claude Opus 5.5** | `claude-opus-5-5` | $4.00 | $20.00 | 1M | **L1・L2 の既定** |
| Claude Opus 5 | `claude-opus-5` | $5.00 | $25.00 | 1M | 使わない(5.5 の方が安く新しい) |
| Claude Sonnet 5 | `claude-sonnet-5` | $2.00 | $10.00 | 1M | L2 の選択肢(§3.4 の条件つき) |
| Claude Haiku 4.5 | `claude-haiku-4-5` | $1.00 | $5.00 | 200K | 広域の走査だけ(§4.5) |

キャッシュ書込は入力単価の約 1.25 倍。キャッシュ読取は Opus 5.5 で $0.20/1M(入力の 1/20)。**先頭文脈を変えずにセッションを継続すると、入力コストは 1/10 以下に落ちる**。キャッシュは**モデルごと**に持たれるため、途中でモデルを切り替えると次のターンは全量が書込扱いになる(§4.2)。

キャッシュ読取は入力単価の約 0.1 倍、キャッシュ書込は約 1.25 倍。**先頭文脈を変えずにセッションを継続すると、入力コストは概ね 1/10 に落ちる**。
Fast mode(Opus 5.5 で $8 / $40、標準の2倍)は速度を買う機能で節約にはならない。待ち時間が問題になる場面以外では使わない。

#### effort(思考の深さ)
Opus 5.5 は思考を切れない。深さとトークン消費は **effort**(`low` / `medium` / `high` / `xhigh` / `max`)で調整する。API の既定は `medium` で、Opus 5 の既定(`high`)より1段低い。**既定に任せず、タスクの層に合わせて明示する**(§3.1・§3.4)。

### 2.2 会話は毎ターン全量が再送される
N ターン目の入力は「それまでの全履歴」である。したがって 1 セッションの総入力トークンは概ね**ターン数の二乗**に比例する。
Expand All @@ -59,7 +70,7 @@ N ターン目の入力は「それまでの全履歴」である。したがっ
| MES.md | 518行 | 該当業務Noのみ grep |
| docs/*.md | 3,321行 | 該当ファイルのみ |

コードベース全体を1回舐めるだけで Opus 入力 $2.5 相当が飛ぶ。**探索の規律が最大の効き目を持つ**。
コードベース全体を1回舐めるだけで Opus 5.5 の入力 $2 相当が飛び、以降の毎ターンの再送にも乗る。**探索の規律が最大の効き目を持つ**。

### 2.4 レバー別の期待効果(推定値・実測で更新すること)
| レバー | 削減率 | 品質への影響 |
Expand All @@ -68,19 +79,22 @@ N ターン目の入力は「それまでの全履歴」である。したがっ
| 探索規律(§4.3) | 20〜40% | ↑ 無関係な情報に引きずられない |
| 出力フィルタ(§4.4) | 5〜15% | → 変化なし |
| L3(非LLM)優先(§3.2) | 5〜10% | ↑ 決定論的で確実 |
| L2 ルーティング(§3.3) | 10〜20% | 条件付き(§5.1 DoD と §5.2 エスカレーションで担保) |
| effort の層別指定(§3.4) | 10〜30% | → 設計判断は下げないので変化なし。L2 を下げすぎると手戻りで逆転(§5.2 で担保) |
| L2 の別モデル化(§3.4) | 0〜10% | 条件付き。Opus 5.5 と Sonnet 5 の単価差は2倍しかなく、キャッシュ分断と手戻りで消えやすい |

---

## 3. 役割モデル(オーケストレーション)

### 3.1 3層構造
| 層 | 担当 | 使用モデル | 責務 | やらないこと |
| 層 | 担当 | 使用モデル / effort | 責務 | やらないこと |
|:--|:--|:--|:--|:--|
| **L1 オーケストレーター** | メインセッション | Opus 5 | 分解・設計判断・タスクカード発行・受入判定・統合 | 大量のコードを自分で書かない/全文を読まない |
| **L2 ワーカー** | 別セッション or サブエージェント | Sonnet 5 | 仕様が確定した実装、定型追加、文書追記 | 設計判断・仕様変更の独断 |
| **L1 オーケストレーター** | メインセッション | Opus 5.5 / `high`(高リスク領域は `xhigh`) | 分解・設計判断・タスクカード発行・受入判定・統合 | 大量のコードを自分で書かない/全文を読まない |
| **L2 ワーカー** | 別セッション | Opus 5.5 / `medium`(定型は `low`) | 仕様が確定した実装、定型追加、文書追記 | 設計判断・仕様変更の独断 |
| **L3 メカニカル** | ツール実行のみ | なし(**トークン0**) | ビルド、テスト、grep、置換、EF migration 生成、整形 | 判断 |

1.0 では L1 と L2 を**モデル**で分けていた。1.1 からは**同じ Opus 5.5 の effort** で分ける。Opus 5.5 は Opus 5 より2割安く、Sonnet 5 との差は2倍まで縮んだ。新しい上位モデルを低い effort で使う方が、下位モデルを高い effort で使うより品質あたりの消費が少ないことが多い。モデルが1つならキャッシュも分断されない。

### 3.2 大原則
> **L3 で済むことを LLM にさせない。L2 で済むことを L1 にさせない。**
> ただし「済むかどうか」の判定は L1 が行う。判定を誤ると手戻りが発生し、節約分は消える。
Expand All @@ -100,6 +114,21 @@ N ターン目の入力は「それまでの全履歴」である。したがっ
| 「どこで使われているか」調査 | L3 → 不足時のみ L2 | まず grep。§4.5 の条件を満たす場合のみサブエージェント |
| ビルドエラー修正 | L2(2回失敗で L1 へ) | §5.2 |

### 3.4 effort とモデルの選び方
| 状況 | 設定 |
|:--|:--|
| §3.3 で L1 に振った類型(データモデル・認証・在庫・実績/原価・CSV取込) | Opus 5.5 / `xhigh` |
| 上記以外の設計判断・タスクカード作成・受入判定 | Opus 5.5 / `high` |
| 仕様確定済みの実装(Controller + テスト、画面タブ追加) | Opus 5.5 / `medium` |
| 定型追加・文書追記・`/add-master` 等の手順どおりの作業 | Opus 5.5 / `low` |
| L2 で同じエラーに2回失敗した | effort を1段上げて L1 として扱う(§5.2)。同じ effort で3回目を試さない |

**規則**
- effort は**セッションの最初に決め、途中で変えない**(途中の変更はキャッシュを捨てる)。段が変わるなら新しいセッションにする。
- `max` は使わない。`xhigh` で2回失敗したときは effort ではなくタスクカードの前提を疑う(§5.2)。
- **Sonnet 5 を L2 に使ってよいのは**、仕様・変更対象・受入条件がカードで確定し、既存の見本ファイルを真似るだけの作業に限る。L1 と同じセッションで切り替えない(キャッシュがモデルごとのため)。手戻りが1回でも出た類型は Opus 5.5 に戻す。
- 効果は §7 の記録で確かめる。「安いモデル・低い effort にしたのに手戻りで総量が増えた」類型は1段戻す。

---

## 4. 実行プロトコル
Expand All @@ -114,7 +143,7 @@ N ターン目の入力は「それまでの全履歴」である。したがっ
- 変更禁止: <例: Migrations/ 配下、既存API契約、DbContext のスキーマ>
- 受入条件(DoD): <機械的に検証できる形で箇条書き>
- 参照: Spec.md §x.y / MES.md No.X-XX-XX-XX / docs/xxx.md
- 想定層: L1 / L2 / L3
- 想定層: L1 / L2 / L3(effort: xhigh / high / medium / low。§3.4)
- 想定変更ファイル数: N
```

Expand All @@ -130,6 +159,7 @@ N ターン目の入力は「それまでの全履歴」である。したがっ
| 次のタスクが同じファイル群を触る | 継続(キャッシュ読取 0.1倍の恩恵を受ける) |
| 30ターンを超えた | 受入条件を確認して打ち切り、残りを新カードに切り出す |
| 作業を続けたいが文脈が長い | `/compact`(継続に文脈が本当に必要な場合のみ) |
| モデルか effort を変えたい | 新しいセッション(同じセッションで変えるとキャッシュが無駄になる) |

`/clear` はキャッシュを捨てる操作でもある。**「無関係なら clear、関係あるなら継続」**が判断基準であり、機械的な頻繁 clear は逆効果。

Expand Down Expand Up @@ -178,6 +208,8 @@ dotnet test tests/MesApp.Api.Tests -v q --nologo 2>&1 | Select-String -Pattern "
- すでに文脈がある作業の続き
- 実装の分担(統合コストがトークン・品質の両面で上回る)

**起動するときのモデル**: 結論だけを返す走査(Explore)は Haiku 4.5 か Sonnet 5 を指定してよい(走査の生データを高い単価で読まない)。判断を含む調査は親と同じ Opus 5.5 のままにする。

### 4.6 計画と実装の分離
1. L1 が計画を立て、タスクカードに落とす
2. 人間が承認する(唯一かつ最も安い品質関門)
Expand Down Expand Up @@ -280,7 +312,7 @@ dotnet test tests/MesApp.Api.Tests -v q --nologo 2>&1 | Select-String -Pattern "

## 8. アンチパターン(禁止事項)

1. **節約目的でモデルを一律ダウングレードする** — 手戻りが増え、総消費量はむしろ増える
1. **節約目的でモデルや effort を一律に下げる** — 手戻りが増え、総消費量はむしろ増える。下げるのは §3.4 の表に従い、層ごとに行う
2. **「まず全体を把握して」から始める** — 全文読込は 50万トークン級(§2.3)
3. **1セッションで無関係なタスクを連続実行する** — 履歴再送が二乗で効く(§2.2)
4. **同じ失敗を3回試す** — 2回で必ずエスカレーション(§5.2)
Expand Down
Loading
Loading