claude-code-conductor 0.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. c3/__init__.py +3 -0
  2. c3/__main__.py +4 -0
  3. c3/_template/.claude/CLAUDE.md +182 -0
  4. c3/_template/.claude/agents/architect.md +50 -0
  5. c3/_template/.claude/agents/code-reviewer.md +50 -0
  6. c3/_template/.claude/agents/developer.md +55 -0
  7. c3/_template/.claude/agents/doc-writer.md +62 -0
  8. c3/_template/.claude/agents/interviewer.md +46 -0
  9. c3/_template/.claude/agents/planner.md +59 -0
  10. c3/_template/.claude/agents/project-setup.md +106 -0
  11. c3/_template/.claude/agents/security-reviewer.md +51 -0
  12. c3/_template/.claude/agents/tdd-develop.md +117 -0
  13. c3/_template/.claude/agents/tester.md +48 -0
  14. c3/_template/.claude/commands/develop.md +10 -0
  15. c3/_template/.claude/commands/doc.md +174 -0
  16. c3/_template/.claude/commands/extract-lib.md +292 -0
  17. c3/_template/.claude/commands/init-session.md +110 -0
  18. c3/_template/.claude/commands/mcp.md +322 -0
  19. c3/_template/.claude/commands/promote-pattern.md +135 -0
  20. c3/_template/.claude/commands/review.md +9 -0
  21. c3/_template/.claude/commands/setup.md +206 -0
  22. c3/_template/.claude/commands/start.md +88 -0
  23. c3/_template/.claude/docs/parallel-orchestra-manifest.md +108 -0
  24. c3/_template/.claude/hooks/clear_file_history.py +39 -0
  25. c3/_template/.claude/hooks/enable_sandbox.py +61 -0
  26. c3/_template/.claude/hooks/pre_compact.py +82 -0
  27. c3/_template/.claude/hooks/pre_tool.py +64 -0
  28. c3/_template/.claude/hooks/statusline.py +170 -0
  29. c3/_template/.claude/hooks/stop.py +202 -0
  30. c3/_template/.claude/hooks/validate_skill_change.py +33 -0
  31. c3/_template/.claude/hooks/worktree_guard.py +53 -0
  32. c3/_template/.claude/memory/.gitkeep +0 -0
  33. c3/_template/.claude/rules/code-review-checklist.md +91 -0
  34. c3/_template/.claude/rules/promoted/index.md +5 -0
  35. c3/_template/.claude/rules/security-review-checklist.md +84 -0
  36. c3/_template/.claude/settings.json +136 -0
  37. c3/_template/.claude/settings.local.json +126 -0
  38. c3/_template/.claude/skills/dev-workflow.md +484 -0
  39. c3/_template/.claude/skills/parallel-execution.md +121 -0
  40. c3/_template/.claude/skills/promoted/index.md +5 -0
  41. c3/_template/.claude/skills/worktree-tdd-workflow.md +71 -0
  42. c3/cli.py +63 -0
  43. c3/cli_doctor.py +135 -0
  44. c3/cli_init.py +70 -0
  45. c3/cli_list.py +69 -0
  46. c3/cli_po.py +102 -0
  47. c3/cli_update.py +117 -0
  48. c3/paths.py +64 -0
  49. c3/po/__init__.py +11 -0
  50. c3/po/detect.py +44 -0
  51. c3/po/manifest.py +336 -0
  52. c3/po/run.py +105 -0
  53. claude_code_conductor-0.2.0.dist-info/METADATA +362 -0
  54. claude_code_conductor-0.2.0.dist-info/RECORD +57 -0
  55. claude_code_conductor-0.2.0.dist-info/WHEEL +4 -0
  56. claude_code_conductor-0.2.0.dist-info/entry_points.txt +2 -0
  57. claude_code_conductor-0.2.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,110 @@
1
+ # /init-session コマンド
2
+
3
+ セッションを初期化し、前回の作業状態を復元する。
4
+ セッション開始時に手動で実行する。
5
+
6
+ ---
7
+
8
+ ## Step 0: 初期化スクリプトを実行する
9
+
10
+ Bash ツールで以下を **2回に分けて** 実行する(`&&` で結合しないこと):
11
+ - 1回目: `python .claude/hooks/clear_file_history.py`
12
+ - 2回目: `python .claude/hooks/enable_sandbox.py`
13
+
14
+ ---
15
+
16
+ ## Step 1: 前回セッションを読み込む
17
+
18
+ Glob で `.claude/memory/sessions/*.tmp` を検索し、ファイル名(YYYYMMDD)が最大のものを Read する。
19
+ ファイルが存在しない場合は「前回セッションなし」として Step 3 へ進む。
20
+
21
+ ---
22
+
23
+ ## Step 2: 昇格候補パターンを確認する
24
+
25
+ `.claude/memory/patterns.json` を Read する(存在する場合)。
26
+ `promotion_candidate: true` かつ `promoted: true` でないパターンがあれば Step 3 のサマリに含める。
27
+
28
+ ---
29
+
30
+ ## Step 3: サマリを表示する
31
+
32
+ 以下の形式で表示する:
33
+
34
+ ```
35
+ ## セッション再開 ({今日の日付})
36
+
37
+ ### 前回セッション ({前回の日付})
38
+ **残タスク:**
39
+ {残タスクリスト。完了済み [x] は省略する}
40
+
41
+ **前回うまくいったこと:**
42
+ {成功アプローチの要約}
43
+
44
+ **注意事項(前回失敗したこと):**
45
+ {失敗アプローチの要約。なければ省略}
46
+
47
+ ### 昇格候補パターン
48
+ {promotion_candidate: true のパターン一覧。なければ「なし」}
49
+ ```
50
+
51
+ ---
52
+
53
+ ## Step 4: 作業の開始方法を選ぶ
54
+
55
+ AskUserQuestion ツールで以下を提示する:
56
+
57
+ ```json
58
+ {
59
+ "questions": [{
60
+ "question": "どのように作業を始めますか?",
61
+ "options": [
62
+ { "label": "続きから作業する", "description": "前回の残タスクから続ける" },
63
+ { "label": "ワークフローで始める", "description": "/start でヒアリング→設計→計画と進める" },
64
+ { "label": "直接指示する", "description": "ワークフローを使わず直接話しかける" }
65
+ ]
66
+ }]
67
+ }
68
+ ```
69
+
70
+ ---
71
+
72
+ ## Step 5: 選択に応じて分岐する
73
+
74
+ **「続きから作業する」の場合:**
75
+ 残タスクの内容を確認してそのまま作業に入る。
76
+
77
+ **「ワークフローで始める」の場合:**
78
+ ```
79
+ /start を実行してください。
80
+ ヒアリング → 設計 → 計画 → 実装 → レビューの順で進みます。
81
+ ```
82
+
83
+ **「直接指示する」の場合:**
84
+ ```
85
+ 直接指示してください。
86
+ ```
87
+
88
+ ---
89
+
90
+ ## session ファイルの更新ルール(LLM が守ること)
91
+
92
+ session ファイルはタスク完了のたびに更新する。まとめて最後に書かない。
93
+
94
+ | タイミング | 更新内容 |
95
+ |---|---|
96
+ | タスク完了時 | 残タスクの該当行を `[x]` にする |
97
+ | 良いアプローチを発見したとき | `## うまくいったアプローチ` に追記 |
98
+ | 失敗・ハマったとき | `## 試みたが失敗したアプローチ` に追記 |
99
+ | パターンを発見したとき | JSON ブロックの `patterns` 配列に追記 |
100
+ | 新しいタスクが発生したとき | `## 残タスク` に追記 |
101
+
102
+ **パターンの書き方(JSON ブロック内):**
103
+ ```json
104
+ "patterns": [
105
+ {
106
+ "id": "一意なID(英数字・アンダースコア)",
107
+ "description": "どんな状況でどう対処するかを1文で"
108
+ }
109
+ ]
110
+ ```
@@ -0,0 +1,322 @@
1
+ # /mcp コマンド
2
+
3
+ MCP サーバーの追加・一覧・削除を対話形式で行う。
4
+ 全ての設定は `.claude/settings.json` のプロジェクトスコープに書き込む。
5
+
6
+ ---
7
+
8
+ ## Step 1: 操作を選択する
9
+
10
+ AskUserQuestion ツール:
11
+ ```json
12
+ {
13
+ "questions": [{
14
+ "question": "MCP サーバーに対して何をしますか?",
15
+ "header": "操作選択",
16
+ "options": [
17
+ { "label": "追加する", "description": "新しい MCP サーバーを登録する" },
18
+ { "label": "一覧を見る", "description": "登録済みの MCP サーバーを確認する" },
19
+ { "label": "削除する", "description": "登録済みの MCP サーバーを削除する" }
20
+ ]
21
+ }]
22
+ }
23
+ ```
24
+
25
+ ---
26
+
27
+ ## Step 2(一覧表示)
28
+
29
+ `.claude/settings.json` を Read して `mcpServers` の内容を整形して表示する。
30
+
31
+ - `mcpServers` が存在しない・空の場合: 「登録済みの MCP サーバーはありません」と表示して終了する。
32
+ - 存在する場合: サーバー名・接続方法・URL/コマンドを一覧形式で表示して終了する。
33
+
34
+ ---
35
+
36
+ ## Step 2(削除)
37
+
38
+ `.claude/settings.json` を Read して `mcpServers` の一覧を表示する。
39
+
40
+ 登録がない場合: 「登録済みの MCP サーバーはありません」と表示して終了する。
41
+
42
+ AskUserQuestion ツール:
43
+ ```json
44
+ {
45
+ "questions": [{
46
+ "question": "削除するサーバー名を入力してください"
47
+ }]
48
+ }
49
+ ```
50
+
51
+ 入力されたサーバー名のエントリを `settings.json` から Edit ツールで削除する。
52
+ 削除後: 「{name} を削除しました」と表示して終了する。
53
+
54
+ ---
55
+
56
+ ## Step 2(追加): 公開 or 社内を選ぶ
57
+
58
+ AskUserQuestion ツール:
59
+ ```json
60
+ {
61
+ "questions": [{
62
+ "question": "追加する MCP サーバーの種別を選んでください",
63
+ "header": "サーバー種別",
64
+ "options": [
65
+ { "label": "公開サーバー", "description": "npm / GitHub 等で公開されているもの(例: @modelcontextprotocol/server-slack)" },
66
+ { "label": "社内・カスタムサーバー", "description": "社内に建てられているもの・自作のもの" }
67
+ ]
68
+ }]
69
+ }
70
+ ```
71
+
72
+ ---
73
+
74
+ ## [公開サーバー追加フロー]
75
+
76
+ ### Step 3a: キーワードを入力させる
77
+
78
+ AskUserQuestion ツール:
79
+ ```json
80
+ {
81
+ "questions": [{
82
+ "question": "探したい MCP サーバーのキーワードや用途を入力してください(例: Slack, GitHub, Postgres)"
83
+ }]
84
+ }
85
+ ```
86
+
87
+ ### Step 4a: WebSearch で候補を調査する
88
+
89
+ WebSearch で以下のクエリで検索する:
90
+ ```
91
+ MCP server {キーワード} model context protocol site:github.com OR site:npmjs.com OR site:mcp.so
92
+ ```
93
+
94
+ 検索結果から候補を最大 4 件抽出する。各候補につき以下を収集する:
95
+ - サーバー名(わかりやすい表示名)
96
+ - npm パッケージ名またはリポジトリ URL
97
+ - 概要(1行)
98
+ - 必要な env vars(判明している範囲で)
99
+
100
+ ### Step 5a: 候補を提示して選択させる
101
+
102
+ 収集した候補をテキストで以下の形式で提示する:
103
+
104
+ ```
105
+ 候補:
106
+ 1. {名前}
107
+ パッケージ : {npm package or repo}
108
+ 概要 : {概要}
109
+ 必要な設定 : {env vars / なし}
110
+ ...
111
+ ```
112
+
113
+ AskUserQuestion で選択させる(最大 4 択)。
114
+ 「Other」が入力された場合: パッケージ名または GitHub URL を自由入力させる。
115
+
116
+ ### Step 6a: サーバー識別名を確認する
117
+
118
+ AskUserQuestion ツール:
119
+ ```json
120
+ {
121
+ "questions": [{
122
+ "question": "settings.json に登録するサーバー識別名を入力してください(例: slack, github-mcp)。英数字・ハイフン・アンダースコアのみ使用可。"
123
+ }]
124
+ }
125
+ ```
126
+
127
+ ### Step 7a: 必要な env vars を収集する
128
+
129
+ 必要な env vars が判明している場合、1 つずつ AskUserQuestion で確認する:
130
+
131
+ ```json
132
+ {
133
+ "questions": [{
134
+ "question": "{ENV_VAR_NAME} の値を入力してください"
135
+ }]
136
+ }
137
+ ```
138
+
139
+ ⚠️ **APIキー等の秘密情報は環境変数として設定することを推奨する。**
140
+ `settings.json` には `"KEY": "${ENV_VAR_NAME}"` 形式で記録し、実際の値は OS の環境変数またはシェルプロファイルで設定するよう案内する。
141
+
142
+ ### Step 8a: インストールを案内する
143
+
144
+ npm パッケージの場合、以下のメッセージを表示する:
145
+
146
+ ```
147
+ 実行前に以下のコマンドを実行してください(npx を使う場合は不要):
148
+ npm install -g {package-name}
149
+ または、毎回自動取得する場合(推奨):
150
+ command: "npx"
151
+ args: ["-y", "{package-name}"]
152
+ ```
153
+
154
+ → 共通の承認フローへ進む。
155
+
156
+ ---
157
+
158
+ ## [社内・カスタムサーバー追加フロー]
159
+
160
+ ### Step 3b: transport 種別を選ぶ
161
+
162
+ AskUserQuestion ツール:
163
+ ```json
164
+ {
165
+ "questions": [{
166
+ "question": "サーバーの接続方式(transport)を選んでください",
167
+ "header": "transport",
168
+ "options": [
169
+ { "label": "stdio", "description": "コマンドとして起動するサーバー(node / python / バイナリ等)" },
170
+ { "label": "SSE", "description": "Server-Sent Events で接続(http://... の URL)" },
171
+ { "label": "HTTP", "description": "Streamable HTTP で接続(http://... の URL)" }
172
+ ]
173
+ }]
174
+ }
175
+ ```
176
+
177
+ ### Step 4b: 接続情報を収集する
178
+
179
+ **stdio の場合:**
180
+
181
+ AskUserQuestion でコマンドを確認する:
182
+ ```json
183
+ {
184
+ "questions": [{
185
+ "question": "実行コマンドを入力してください(例: node, python, /usr/local/bin/mcp-server)"
186
+ }]
187
+ }
188
+ ```
189
+
190
+ 続けて引数を確認する:
191
+ ```json
192
+ {
193
+ "questions": [{
194
+ "question": "引数をスペース区切りで入力してください。ない場合は空のまま送信してください(例: /path/to/server.js --port 3000)"
195
+ }]
196
+ }
197
+ ```
198
+
199
+ **SSE / HTTP の場合:**
200
+
201
+ AskUserQuestion で URL を確認する:
202
+ ```json
203
+ {
204
+ "questions": [{
205
+ "question": "接続先の URL を入力してください(例: http://internal-server:3000/sse)"
206
+ }]
207
+ }
208
+ ```
209
+
210
+ ### Step 5b: サーバー識別名を確認する
211
+
212
+ AskUserQuestion ツール:
213
+ ```json
214
+ {
215
+ "questions": [{
216
+ "question": "settings.json に登録するサーバー識別名を入力してください(例: internal-db, company-tools)。英数字・ハイフン・アンダースコアのみ使用可。"
217
+ }]
218
+ }
219
+ ```
220
+
221
+ ### Step 6b: 認証・追加設定を確認する
222
+
223
+ AskUserQuestion ツール:
224
+ ```json
225
+ {
226
+ "questions": [{
227
+ "question": "認証ヘッダーや環境変数を設定しますか?",
228
+ "header": "認証設定",
229
+ "options": [
230
+ { "label": "設定する", "description": "Bearer トークンや API キーなどを設定する" },
231
+ { "label": "スキップ", "description": "認証なし・後で手動設定する" }
232
+ ]
233
+ }]
234
+ }
235
+ ```
236
+
237
+ 「設定する」の場合:
238
+
239
+ - **stdio**: env vars を 1 つずつ収集する。値は `"${ENV_VAR_NAME}"` 形式で記録することを推奨する。
240
+ - **SSE / HTTP**: headers の key-value ペアを収集する(例: `Authorization: Bearer ${TOKEN}`)。
241
+
242
+ → 共通の承認フローへ進む。
243
+
244
+ ---
245
+
246
+ ## [共通] 承認・settings.json 更新
247
+
248
+ ### 承認ステップ
249
+
250
+ 収集した設定内容を以下の形式でテキスト提示する:
251
+
252
+ ```
253
+ 登録内容:
254
+ 識別名 : {name}
255
+ 種別 : {公開 / 社内}
256
+ transport : {stdio / SSE / HTTP}
257
+ コマンド : {command + args ※stdio のみ}
258
+ URL : {url ※SSE / HTTP のみ}
259
+ env / headers : {設定内容 または "なし"}
260
+ ```
261
+
262
+ AskUserQuestion ツール:
263
+ ```json
264
+ {
265
+ "questions": [{
266
+ "question": "登録内容を確認してください。どうしますか?",
267
+ "header": "確認",
268
+ "options": [
269
+ { "label": "登録する", "description": ".claude/settings.json の mcpServers に追記する" },
270
+ { "label": "やり直す", "description": "Step 2(追加)に戻る" }
271
+ ]
272
+ }]
273
+ }
274
+ ```
275
+
276
+ ### settings.json への書き込み
277
+
278
+ `.claude/settings.json` を Read する。
279
+
280
+ `mcpServers` キーが存在しない場合は追加する。
281
+
282
+ **stdio の場合(env vars あり):**
283
+ ```json
284
+ "server-name": {
285
+ "command": "{command}",
286
+ "args": ["{arg1}", "{arg2}"],
287
+ "env": {
288
+ "KEY": "${ENV_VAR_NAME}"
289
+ }
290
+ }
291
+ ```
292
+
293
+ **stdio の場合(env vars なし):**
294
+ ```json
295
+ "server-name": {
296
+ "command": "{command}",
297
+ "args": ["{arg1}", "{arg2}"]
298
+ }
299
+ ```
300
+
301
+ **SSE の場合:**
302
+ ```json
303
+ "server-name": {
304
+ "type": "sse",
305
+ "url": "{url}",
306
+ "headers": {
307
+ "Authorization": "Bearer ${TOKEN}"
308
+ }
309
+ }
310
+ ```
311
+
312
+ **HTTP の場合:**
313
+ ```json
314
+ "server-name": {
315
+ "type": "http",
316
+ "url": "{url}",
317
+ "headers": {}
318
+ }
319
+ ```
320
+
321
+ Edit ツールで `settings.json` を更新する。
322
+ 更新後: 「{name} を登録しました。Claude Code を再起動すると MCP サーバーが有効になります。」と表示して終了する。
@@ -0,0 +1,135 @@
1
+ # /promote-pattern コマンド
2
+
3
+ `patterns.json` の昇格候補を `rules/promoted/` または `skills/promoted/` に昇格させる。
4
+
5
+ ---
6
+
7
+ ## Step 1: 昇格候補を読み込む
8
+
9
+ `.claude/memory/patterns.json` を Read する。
10
+ `promotion_candidate: true` かつ `promoted: true` でないパターンを抽出する。
11
+
12
+ 候補がない場合は以下を表示して終了する:
13
+ > 現在、昇格候補はありません。
14
+ > (信用度 0.8 以上・登録から3日以上・未昇格が対象です)
15
+
16
+ ---
17
+
18
+ ## Step 2: 昇格するパターンを選ぶ
19
+
20
+ AskUserQuestion ツールで候補を複数選択式で提示する:
21
+
22
+ ```json
23
+ {
24
+ "questions": [{
25
+ "question": "昇格するパターンを選んでください(複数選択可)",
26
+ "options": [
27
+ { "label": "[trust: {スコア}] {id}", "description": "{description}" },
28
+ ...候補の数だけ追加...,
29
+ { "label": "今回は昇格しない", "description": "すべてスキップして終了する" }
30
+ ],
31
+ "multiSelect": true
32
+ }]
33
+ }
34
+ ```
35
+
36
+ 「今回は昇格しない」のみ選択された場合、または何も選択されなかった場合 → 終了する。
37
+
38
+ ---
39
+
40
+ ## Step 3: 各パターンの昇格先を選ぶ
41
+
42
+ 選択されたパターンごとに AskUserQuestion ツールで昇格先を確認する:
43
+
44
+ ```json
45
+ {
46
+ "questions": [{
47
+ "question": "「{description}」をどちらに昇格しますか?",
48
+ "options": [
49
+ { "label": "rule", "description": "rules/promoted/ — 背景知識・制約として登録(「こうしろ / これを知っておけ」系)" },
50
+ { "label": "skill", "description": "skills/promoted/ — オーケストレーション手順として登録(「この順番で動かせ」系)" }
51
+ ]
52
+ }]
53
+ }
54
+ ```
55
+
56
+ 複数パターンを選んだ場合は1つずつ順番に確認する。
57
+
58
+ ---
59
+
60
+ ## Step 4: ファイルを生成して保存する
61
+
62
+ パターンの `description` をもとに内容を生成し Write ツールで保存する。
63
+
64
+ **rule の保存先:** `.claude/rules/promoted/YYYYMMDD-{id}.md`
65
+
66
+ ```markdown
67
+ ---
68
+ promoted_from: {pattern id}
69
+ promoted_date: YYYY-MM-DD
70
+ trust_score: {スコア}
71
+ ---
72
+
73
+ # {タイトル}
74
+
75
+ {ルール本文。「何をすべきか / 何を知っておくべきか」を簡潔に記述する}
76
+ ```
77
+
78
+ **skill の保存先:** `.claude/skills/promoted/YYYYMMDD-{id}.md`
79
+
80
+ ```markdown
81
+ ---
82
+ promoted_from: {pattern id}
83
+ promoted_date: YYYY-MM-DD
84
+ trust_score: {スコア}
85
+ ---
86
+
87
+ # {タイトル}
88
+
89
+ ## 使うタイミング
90
+ {どんな状況でこのスキルを使うか}
91
+
92
+ ## 手順
93
+ {エージェント間のオーケストレーション手順をステップで記述する}
94
+ ```
95
+
96
+ ---
97
+
98
+ ## Step 5: index.md に追記する
99
+
100
+ **rule の場合** — `.claude/rules/promoted/index.md` の `<!-- C3:PROMOTED_RULES:BEGIN -->` と `<!-- C3:PROMOTED_RULES:END -->` の間に追記:
101
+ ```
102
+ - **{タイトル}** (`.claude/rules/promoted/YYYYMMDD-{id}.md`) — {description を1行で}
103
+ ```
104
+
105
+ **skill の場合** — `.claude/skills/promoted/index.md` の `<!-- C3:PROMOTED_SKILLS:BEGIN -->` と `<!-- C3:PROMOTED_SKILLS:END -->` の間に追記:
106
+ ```
107
+ - **{タイトル}** (`.claude/skills/promoted/YYYYMMDD-{id}.md`) — {description を1行で}
108
+ ```
109
+
110
+ ---
111
+
112
+ ## Step 6: patterns.json を更新する
113
+
114
+ 昇格したパターンの entry に以下を追加する:
115
+
116
+ ```json
117
+ "promoted": true,
118
+ "promoted_date": "YYYYMMDD",
119
+ "promoted_to": ".claude/rules/promoted/YYYYMMDD-{id}.md"
120
+ ```
121
+
122
+ 複数昇格した場合は Step 4〜6 を全パターン分まとめて処理してから Step 7 へ進む。
123
+
124
+ ---
125
+
126
+ ## Step 7: 完了を報告する
127
+
128
+ ```
129
+ 昇格完了({N}件):
130
+ ✅ {description} → .claude/rules/promoted/YYYYMMDD-{id}.md [trust: {スコア}]
131
+ ✅ {description} → .claude/skills/promoted/YYYYMMDD-{id}.md [trust: {スコア}]
132
+
133
+ index.md にも追記しました。
134
+ 次回セッションからこれらのルール・スキルが自動で読み込まれます。
135
+ ```
@@ -0,0 +1,9 @@
1
+ # /review コマンド
2
+
3
+ 実装済みコードのレビューを行う。
4
+
5
+ ## 必ず守ること
6
+
7
+ 1. **最初に必ず** `.claude/skills/dev-workflow.md` を Read する。記憶・推測で進めない
8
+ 2. **フェーズ E(レビュー)** から実行する
9
+ 3. dev-workflow.md の AskUserQuestion・Edit・セッションファイル更新の手順を省略しない