@einja/dev-cli 0.1.41 → 0.1.44

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 (83) hide show
  1. package/dist/commands/task-loop/lib/github-client.test.js.map +1 -1
  2. package/dist/commands/task-loop/lib/vibe-kanban-rest-client.js +2 -2
  3. package/dist/commands/task-loop/lib/vibe-kanban-rest-client.js.map +1 -1
  4. package/dist/lib/preset-update/file-copier.js +3 -3
  5. package/dist/lib/preset-update/file-copier.js.map +1 -1
  6. package/dist/lib/sync/marker-processor.js.map +1 -1
  7. package/dist/lib/sync/metadata-manager.js +1 -1
  8. package/dist/lib/sync/metadata-manager.js.map +1 -1
  9. package/dist/lib/sync/metadata-manager.test.js +3 -2
  10. package/dist/lib/sync/metadata-manager.test.js.map +1 -1
  11. package/dist/lib/sync/project-private-synchronizer.d.ts.map +1 -1
  12. package/dist/lib/sync/project-private-synchronizer.js +5 -1
  13. package/dist/lib/sync/project-private-synchronizer.js.map +1 -1
  14. package/package.json +1 -1
  15. package/presets/default/.claude/agents/einja/backend-architect.md +17 -1
  16. package/presets/default/.claude/agents/einja/codex-agent.md +1 -1
  17. package/presets/default/.claude/agents/einja/design-engineer.md +1 -1
  18. package/presets/default/.claude/agents/einja/docs/docs-updater.md +3 -93
  19. package/presets/default/.claude/agents/einja/frontend-architect.md +17 -1
  20. package/presets/default/.claude/agents/einja/frontend-coder.md +1 -1
  21. package/presets/default/.claude/agents/einja/{specs/spec-design-generator.md → issue-specs/design-generator.md} +12 -7
  22. package/presets/default/.claude/agents/einja/{specs/spec-qa-generator.md → issue-specs/qa-generator.md} +6 -4
  23. package/presets/default/.claude/agents/einja/{specs/spec-requirements-generator.md → issue-specs/requirements-generator.md} +5 -5
  24. package/presets/default/.claude/agents/einja/{specs/spec-tasks-generator.md → issue-specs/tasks-generator.md} +13 -14
  25. package/presets/default/.claude/agents/einja/{specs/spec-tasks-validator.md → issue-specs/tasks-validator.md} +9 -9
  26. package/presets/default/.claude/agents/einja/issue-specs/ui-design-generator.md +114 -0
  27. package/presets/default/.claude/agents/einja/task/task-executer.md +9 -3
  28. package/presets/default/.claude/agents/einja/task/task-modification-analyzer.md +2 -2
  29. package/presets/default/.claude/agents/einja/task/task-qa.md +3 -3
  30. package/presets/default/.claude/agents/einja/task/task-reviewer.md +13 -1
  31. package/presets/default/.claude/commands/einja/einja-sync.md +119 -44
  32. package/presets/default/.claude/commands/einja/issue-exec.md +29 -19
  33. package/presets/default/.claude/commands/einja/sync-cursor-commands.md +6 -6
  34. package/presets/default/.claude/commands/einja/{update-docs-by-task-specs.md → update-docs-by-issue-specs.md} +58 -58
  35. package/presets/default/.claude/hooks/einja/plan-mode-skill-loader.sh +5 -1
  36. package/presets/default/.claude/settings.json +14 -4
  37. package/presets/default/.claude/skills/{einja-general-context-loader → _einja-general-context-loader}/SKILL.md +2 -2
  38. package/presets/default/.claude/skills/{einja-output-format → _einja-output-format}/SKILL.md +1 -1
  39. package/presets/default/.claude/skills/_einja-project-overview/SKILL.md +29 -0
  40. package/presets/default/.claude/skills/{einja-spec-context-loader → _einja-spec-context-loader}/SKILL.md +5 -5
  41. package/presets/default/.claude/skills/einja-coding-standards/references/testing-strategy.md +899 -0
  42. package/presets/default/.claude/skills/einja-conflict-resolver/SKILL.md +1 -1
  43. package/presets/default/.claude/skills/einja-create-pr/SKILL.md +138 -0
  44. package/presets/default/.claude/skills/einja-infra-maintenance/SKILL.md +779 -0
  45. package/presets/default/.claude/{commands/einja/spec-create.md → skills/einja-issue-spec-create/SKILL.md} +47 -24
  46. package/presets/default/.claude/skills/einja-issue-spec-generator/SKILL.md +105 -0
  47. package/presets/default/.claude/skills/einja-issue-spec-generator/references/format-rules.md +35 -0
  48. package/presets/default/.claude/skills/einja-issue-spec-validator/SKILL.md +130 -0
  49. package/presets/default/.claude/skills/einja-issue-spec-validator/references/validation-rules.md +52 -0
  50. package/presets/default/.claude/skills/einja-npm-release/SKILL.md +242 -0
  51. package/presets/default/.claude/skills/einja-skill-creator/SKILL.md +68 -12
  52. package/presets/default/.claude/skills/einja-skill-creator/scripts/aggregate_benchmark.py +368 -121
  53. package/presets/default/.claude/skills/einja-skill-creator/scripts/compare_runs.py +154 -0
  54. package/presets/default/.claude/skills/einja-skill-creator/scripts/generate_report.py +14 -7
  55. package/presets/default/.claude/skills/einja-skill-creator/scripts/improve_description.py +2 -7
  56. package/presets/default/.claude/skills/einja-skill-creator/scripts/run_loop.py +263 -183
  57. package/presets/default/.claude/skills/einja-skill-first/SKILL.md +265 -0
  58. package/presets/default/.claude/skills/einja-subagent-question-protocol/SKILL.md +98 -0
  59. package/presets/default/.claude/skills/einja-task-commit/SKILL.md +7 -7
  60. package/presets/default/.claude/{commands/einja/task-exec.md → skills/einja-task-exec/SKILL.md} +3 -78
  61. package/presets/default/.claude/skills/einja-task-qa/SKILL.md +4 -4
  62. package/presets/default/.claude/skills/einja-task-qa/references/troubleshooting.md +1 -1
  63. package/presets/default/.claude/skills/einja-task-qa/references/usage-patterns.md +2 -2
  64. package/presets/default/.claude/skills/einja-team-exec/SKILL.md +165 -0
  65. package/presets/default/CLAUDE.md.template +21 -6
  66. package/presets/default/docs/einja/instructions/deployment-setup.md +1 -1
  67. package/presets/default/docs/einja/instructions/issue-exec-workflow.md +11 -11
  68. package/presets/default/docs/einja/instructions/local-server-environment-and-worktree.md +1 -1
  69. package/presets/default/docs/einja/instructions/setup-flow.md +279 -0
  70. package/presets/default/docs/einja/instructions/task-execute.md +42 -42
  71. package/presets/default/docs/einja/steering/acceptance-criteria-and-qa-guide.md +1 -1
  72. package/presets/default/docs/einja/steering/branch-strategy.md +1 -1
  73. package/presets/default/docs/einja/steering/development-workflow.md +93 -25
  74. package/presets/default/docs/einja/steering/infrastructure/deployment.md +107 -0
  75. package/presets/default/docs/einja/steering/task-management.md +9 -13
  76. package/presets/default/scripts/ensure-serena.sh +2 -2
  77. package/presets/default/scripts/env-rotate-secrets.ts +66 -6
  78. package/presets/default/scripts/init-github.ts +363 -0
  79. package/presets/default/scripts/init.sh +11 -5
  80. package/presets/default/scripts/setup-dev.ts +16 -1
  81. package/presets/default/.claude/agents/einja/git/conflict-resolver.md +0 -152
  82. package/presets/default/.claude/hooks/einja/validate-git-commit.sh +0 -239
  83. package/presets/default/.claude/skills/einja-project-overview/SKILL.md +0 -39
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: "テンプレート同期を実行。dev-cli/create-einja-appのsyncをカテゴリ選択式で実行し、コンフリクトも自動解消します"
3
- allowed-tools: Bash, AskUserQuestion, Read, Grep, Glob
3
+ allowed-tools: Bash, AskUserQuestion, Read, Grep, Glob, Edit
4
4
  ---
5
5
 
6
6
  # テンプレート同期コマンド
@@ -16,8 +16,8 @@ allowed-tools: Bash, AskUserQuestion, Read, Grep, Glob
16
16
  以下のコマンドで利用可能なCLIを検出する。
17
17
 
18
18
  ```bash
19
- npx @einja/dev-cli --version 2>/dev/null
20
- npx create-einja-app --version 2>/dev/null
19
+ npx --no @einja/dev-cli --version 2>/dev/null
20
+ npx --no create-einja-app --version 2>/dev/null
21
21
  ```
22
22
 
23
23
  | 検出結果 | 動作 |
@@ -104,10 +104,10 @@ AskUserQuestion:
104
104
 
105
105
  ```bash
106
106
  # dev-cli の場合
107
- npx @einja/dev-cli sync --only <categories> --dry-run --yes
107
+ npx --yes @einja/dev-cli sync --only <categories> --dry-run --yes
108
108
 
109
109
  # create-einja-app の場合
110
- npx create-einja-app sync --categories <categories> --dry-run
110
+ npx --yes create-einja-app sync --categories <categories> --dry-run
111
111
  ```
112
112
 
113
113
  > **注**: 両CLIでカテゴリ指定のオプション名が異なる(dev-cli: `--only` / create-einja-app: `--categories`)
@@ -116,9 +116,15 @@ npx create-einja-app sync --categories <categories> --dry-run
116
116
  - 差分がない場合は「変更はありません」と表示して該当CLIの処理をスキップ
117
117
  - 差分がある場合はファイル一覧と変更内容をユーザーに提示
118
118
 
119
+ #### dev-cli 使用時: 孤児ファイルの事前検出
120
+
121
+ dry-run の JSON出力から `orphans` 配列を確認する。存在する孤児(`exists: true`)がある場合は一覧をテーブル表示し、Step 4 の確認時に孤児削除を含めるかユーザーに確認する。
122
+
119
123
  ### Step 4: 実行確認 → sync実行
120
124
 
121
- 差分プレビューを見せた上で、ユーザーに実行可否を確認する。
125
+ 差分プレビューと孤児ファイル情報を見せた上で、ユーザーに実行可否を確認する。
126
+
127
+ #### 孤児ファイルがない場合
122
128
 
123
129
  ```yaml
124
130
  AskUserQuestion:
@@ -131,75 +137,142 @@ AskUserQuestion:
131
137
  description: "変更を適用せずに終了します"
132
138
  ```
133
139
 
140
+ #### 孤児ファイルがある場合(dev-cli 使用時)
141
+
142
+ ```yaml
143
+ AskUserQuestion:
144
+ question: "上記の変更を適用しますか?(孤児ファイルN個を検出)"
145
+ header: "同期実行の確認"
146
+ options:
147
+ - label: "孤児ファイルも削除して同期(推奨)"
148
+ description: "表示された差分を適用し、テンプレートから削除されたファイル(N個)も削除します"
149
+ - label: "孤児ファイルは残して同期"
150
+ description: "表示された差分のみ適用し、孤児ファイルは残します"
151
+ - label: "キャンセル"
152
+ description: "変更を適用せずに終了します"
153
+ ```
154
+
134
155
  **実行順序**: dev-cli を先に実行し、次に create-einja-app を実行する(dev-cli が Claude Code 設定を先に更新するため)。
135
156
 
136
157
  ```bash
137
- # dev-cli
138
- npx @einja/dev-cli sync --only <categories> --yes --json
158
+ # dev-cli(孤児削除あり)
159
+ npx --yes @einja/dev-cli sync --only <categories> --yes --json --clean
160
+
161
+ # dev-cli(孤児削除なし)
162
+ npx --yes @einja/dev-cli sync --only <categories> --yes --json
139
163
 
140
164
  # create-einja-app
141
- npx create-einja-app sync --categories <categories>
165
+ npx --yes create-einja-app sync --categories <categories>
142
166
  ```
143
167
 
144
168
  - dev-cli は `--json` オプションで構造化出力を取得しパースする
145
- - create-einja-app sync には `--yes` フラグがないが、`--categories` 指定時は対話プロンプトをスキップする
169
+ - 孤児削除を選択した場合は `--clean` フラグを追加する(sync と孤児削除を1回の実行で完了)
170
+ - create-einja-app sync には `--yes` フラグがない。`--categories` 指定時でもプロジェクト設定検出失敗時や依存バージョン競合時に対話プロンプトが発生する可能性がある。その場合は標準出力を確認し、必要に応じてユーザーに手動対応を促す
146
171
 
147
- ### Step 5: コンフリクト検出 → 手動解消サポート
172
+ ### Step 5: コンフリクト検出 → 対話的解消(dev-cli のみ)
148
173
 
149
- sync 固有のコンフリクトを検出し、対話的に解消する(git コンフリクトとは異なる)。
174
+ dev-cli の sync 固有のコンフリクトを検出し、1ファイルずつ対話的に解消する(git コンフリクトとは異なる)。create-einja-app にはファイルコンフリクトの概念がないため、このStepは dev-cli 使用時のみ実行する。
150
175
 
151
- #### コンフリクトの検出方法
176
+ #### 5-1. コンフリクトファイル一覧取得
152
177
 
153
- | CLI | 検出方法 |
154
- |-----|---------|
155
- | dev-cli | JSON出力の `status: "partial_success"` かつ `conflicts > 0` |
156
- | create-einja-app | 標準出力に「コンフリクト」文字列が含まれる |
178
+ dev-cli JSON出力の `files` 配列から `status === "conflict"` のエントリを抽出する。
157
179
 
158
- #### コンフリクト解消フロー
180
+ - コンフリクトなし → このStepをスキップ
181
+ - コンフリクトファイル一覧をテーブル表示(ファイルパス、コンフリクト箇所数)
182
+ - JSON出力のパースに失敗した場合は、標準出力をそのまま表示し、同期対象カテゴリのファイルパスのみを対象に `Grep` で dev-cli 固有のコンフリクトマーカー `<<<<<<< LOCAL (your changes)` を検索して検出する(プロジェクト全体を検索しないこと)
159
183
 
160
- 1. **コンフリクトファイルの一覧を取得・表示**
161
- - dev-cli: JSON出力の `conflicts` 配列からファイルパスを抽出
162
- - create-einja-app: 標準出力から「コンフリクト」を含む行を抽出し、ファイルパスをパース
163
- - 取得したファイルパスを表形式で一覧表示
184
+ #### 5-2. 各ファイルを1ファイルずつ処理
164
185
 
165
- 2. **各ファイルの差分内容を確認**
166
- - `Read` ツールでコンフリクトファイルの内容を読み込み、差分をユーザーに提示
186
+ 以下を各コンフリクトファイルについて繰り返す:
167
187
 
168
- 3. **ユーザーに解決方針を確認**
188
+ a. `Read` でファイル全体を読み込む
189
+ b. コンフリクトマーカーブロックを特定し、**双方の内容を分析・説明**:
190
+ - ローカル側: 何がカスタマイズされているか(例: プロジェクト固有の設定値)
191
+ - テンプレート側: 何が更新されたか(例: 新しいフィールド追加、バグ修正)
192
+ - 影響の説明: どちらを採用した場合に何が起きるか
193
+ c. **具体的なマージ案を提案**: 両方の変更を分析し、統合案を作成(可能な場合)
194
+ d. AskUserQuestion で解消方法を確認:
169
195
 
170
196
  ```yaml
171
197
  AskUserQuestion:
172
- question: "コンフリクトの解決方針を選択してください"
173
- header: "コンフリクト解決"
198
+ question: "{ファイル名}のコンフリクト解消方法を選択してください"
199
+ header: "コンフリクト解消"
174
200
  options:
175
- - label: "テンプレート優先(リモートの最新版で上書き)"
176
- description: "テンプレートの内容を採用し、ローカルのカスタマイズを破棄します"
177
- - label: "ローカル優先(現在の内容を維持)"
178
- description: "現在のローカルファイルを維持し、テンプレートの変更を破棄します"
179
- - label: "手動マージ(1ファイルずつ確認)"
180
- description: "各ファイルの差分を確認しながら、手動でマージ内容を決定します"
201
+ - label: "テンプレート優先"
202
+ description: "テンプレートの内容を採用。メリット: 最新の更新を取り込める。デメリット: ローカルのカスタマイズが失われる"
203
+ - label: "ローカル優先"
204
+ description: "現在の内容を維持。メリット: カスタマイズを保全できる。デメリット: テンプレートの更新が適用されない"
205
+ - label: "マージ案(両方の変更を統合)"
206
+ description: "{具体的なマージ内容の説明}。メリット: {利点}。デメリット: {欠点}"
207
+ - label: "このファイルをスキップ"
208
+ description: "コンフリクトマーカーを残して後で手動解消。メリット: 判断を保留できる。デメリット: 後で対応が必要"
181
209
  ```
182
210
 
183
- 4. **方針に従って解消**
184
- - テンプレート優先: dry-run出力やCLIのコンフリクト情報からテンプレート側の内容を特定し、`Edit` ツールで上書き
185
- - ローカル優先: 現在の内容を維持(変更なし)
186
- - 手動マージ: テンプレート内容とローカル内容を両方表示し、ユーザーと対話しながら `Edit` で編集
211
+ **重要**: 必ず1ファイルごとにAskUserQuestionを実行する。複数ファイルをまとめて質問しない。
212
+
213
+ e. 選択に応じて `Edit` でコンフリクトマーカーを解消する
214
+ - 複数マーカーがある場合はファイル末尾側から処理し、行番号ずれを防止する
215
+ - テンプレート優先: `<<<<<<< LOCAL` 〜 `=======` を削除し、`=======` 〜 `>>>>>>> TEMPLATE` のテンプレート側を残す
216
+ - ローカル優先: `<<<<<<< LOCAL` のローカル側を残し、`=======` 〜 `>>>>>>> TEMPLATE` を削除する
217
+ - マージ案: 提案したマージ内容でマーカーブロック全体を置換する
218
+ f. 解消結果を `Read` で確認し、ユーザーに表示
219
+
220
+ **コンフリクトマーカー形式**: `<<<<<<< LOCAL (your changes)` / `=======` / `>>>>>>> TEMPLATE (from @einja/cli)`
221
+
222
+ #### 5-3. 全ファイル解消後の検証
187
223
 
188
- ### Step 6: 結果サマリー表示
224
+ - `Grep` `<<<<<<<` パターンを検索し、未解消マーカーが残っていないか検証
225
+ - スキップされたファイルがあれば一覧を再表示
226
+
227
+ ### Step 6: 孤児ファイル処理結果の確認(dev-cli のみ)
228
+
229
+ Step 4 で孤児削除を選択した場合、JSON出力の `summary.orphansDeleted` を確認し、削除されたファイル一覧を記録する(Step 9 の詳細表示で使用)。
230
+
231
+ Step 4 で孤児削除をスキップした場合、孤児ファイル一覧を再表示し「後で `npx --yes @einja/dev-cli sync --only <categories> --clean --yes` で削除できます」と案内する。
232
+
233
+ ### Step 7: direnv allow 実行確認
234
+
235
+ `.envrc` が正常に更新された場合に `direnv allow` を実行する。
236
+
237
+ 1. dev-cli の JSON出力の `files` 配列から `.envrc` のエントリを確認する
238
+ 2. 以下の条件をすべて満たす場合のみ実行対象とする:
239
+ - `.envrc` の `status` が `"success"` である(`"skipped"`, `"conflict"`, `"error"` は対象外)
240
+ - ファイル内にコンフリクトマーカー(`<<<<<<< LOCAL`)が含まれていない
241
+ 3. `command -v direnv` で direnv の存在を確認する(インストールされていなければスキップし、Step 8 で案内表示)
242
+ 4. AskUserQuestion で確認:
243
+
244
+ ```yaml
245
+ AskUserQuestion:
246
+ question: ".envrc が更新されました。direnv allow を実行しますか?"
247
+ header: "direnv allow"
248
+ options:
249
+ - label: "実行する(推奨)"
250
+ description: "更新済み .envrc を有効化します。環境変数が即座に反映されます"
251
+ - label: "スキップ"
252
+ description: "後で手動で direnv allow を実行します"
253
+ ```
254
+
255
+ 5. 「実行する」選択時に `direnv allow` を実行
256
+ 6. 結果を表示(成功/失敗。失敗しても同期処理全体は継続する)
257
+
258
+ ### Step 8: 結果サマリー表示
189
259
 
190
260
  テーブル形式で同期結果の概要を表示する。
191
261
 
192
262
  ```markdown
193
263
  ## 同期結果サマリー
194
264
 
195
- | CLI | 成功 | スキップ | コンフリクト |
196
- |-----|------|---------|------------|
197
- | dev-cli | 5 | 2 | 1 (解消済み) |
198
- | create-einja-app | 8 | 3 | 0 |
199
- | **合計** | **13** | **5** | **1** |
265
+ | CLI | 成功 | スキップ | コンフリクト | 孤児削除 |
266
+ |-----|------|---------|------------|---------|
267
+ | dev-cli | 5 | 2 | 1 (解消済み) | 2 |
268
+ | create-einja-app | 8 | 3 | 0 | - |
269
+ | **合計** | **13** | **5** | **1** | **2** |
200
270
  ```
201
271
 
202
- ### Step 7: 結果詳細表示
272
+ - `.envrc` が変更された場合は「✓ direnv allow 実行済み」を表示
273
+ - `.envrc` が変更されたが direnv 未インストールの場合は「⚠ direnv 未インストール。手動で `direnv allow` を実行してください」を表示
274
+
275
+ ### Step 9: 結果詳細表示
203
276
 
204
277
  各ファイルの詳細結果を以下の形式で表示する。
205
278
 
@@ -209,6 +282,7 @@ AskUserQuestion:
209
282
  ✓ .claude/skills/einja-task-commit/SKILL.md (更新)
210
283
  ⏭ .claude/agents/einja/task-executer.md (変更なし)
211
284
  ⚠ .claude/hooks/einja/pre-commit.sh (コンフリクト → 解消済み)
285
+ 🗑️ .claude/skills/old-skill/SKILL.md (孤児ファイル削除)
212
286
 
213
287
  ### create-einja-app sync 詳細
214
288
  ✨ .github/workflows/ci.yml (新規)
@@ -224,6 +298,7 @@ AskUserQuestion:
224
298
  | ✨ | 新規ファイル追加 |
225
299
  | ⏭ | 変更なし(スキップ) |
226
300
  | ⚠ | コンフリクト発生(解消済み) |
301
+ | 🗑️ | 孤児ファイル削除 |
227
302
 
228
303
  **パース方法:**
229
304
  - dev-cli: `--json` 出力の `files` 配列をパースして各ファイルのステータスを表示。JSON形式が不正な場合は標準出力をそのまま表示
@@ -100,7 +100,7 @@ $ARGUMENTS をLLMとして自然言語解析し、以下の情報を抽出する
100
100
  - 以下を表示して**停止**:
101
101
  > issue-exec は tmux を必須としており、この環境では利用できません。
102
102
  > WSL2 環境での実行を推奨します。
103
- > 代替: `/einja:task-exec` で個別タスクグループを逐次実行することは可能です。
103
+ > 代替: `einja-task-exec` Skill で個別タスクグループを逐次実行することは可能です。
104
104
 
105
105
  **インストール後の検証:**
106
106
  - `hash -r` で PATH をリフレッシュし、`command -v tmux && tmux -V` で成功確認
@@ -111,6 +111,8 @@ $ARGUMENTS をLLMとして自然言語解析し、以下の情報を抽出する
111
111
 
112
112
  #### 3. セッション復元
113
113
  - `--resume` フラグがある場合、`~/.einja/sessions/issue-{N}/session.json` からセッション状態を復元
114
+ - Manager worktree の存在確認: `git worktree list | grep issue-{N}/manager`
115
+ - 存在しない場合は再作成: `git worktree add ~/.einja/worktrees/issue-{N}/manager issue/{N}`
114
116
  - 未完了のPhaseのDirectorを再起動する
115
117
 
116
118
  ### Step 1: Issue パース
@@ -122,16 +124,18 @@ $ARGUMENTS をLLMとして自然言語解析し、以下の情報を抽出する
122
124
  3. `--max-phase` が指定されている場合、その番号以降のPhaseを除外
123
125
 
124
126
  ### Step 2: ブランチ & worktree 作成
125
- 1. Issue ブランチ作成: `issue/{issue番号}`(base ブランチから)
126
- 2. Phase のブランチ作成: `issue/{issue番号}-phase{N}`(issue ブランチから)
127
- 3. git worktree 作成:
127
+ 1. Issue ブランチ作成(メインリポジトリから): `issue/{issue番号}`(base ブランチから)
128
+ 2. Manager worktree 作成(メインリポジトリから):
128
129
  ```bash
129
130
  mkdir -p ~/.einja/worktrees/issue-{N}/
130
- git worktree add ~/.einja/worktrees/issue-{N}/phase{M} issue/{N}-phase{M}
131
+ git worktree add ~/.einja/worktrees/issue-{N}/manager issue/{N}
132
+ git push -u origin issue/{N}
131
133
  ```
132
- 4. worktree 作成時は必ずリモートにpush:
134
+ 3. **以降の操作は全て Manager worktree 内から実行**(cwd: `~/.einja/worktrees/issue-{N}/manager`)
135
+ 4. 各 Phase のブランチ作成(Manager worktree から): `issue/{issue番号}-phase{N}`(issue ブランチから)
136
+ 5. Phase worktree 作成(Manager worktree から):
133
137
  ```bash
134
- git push -u origin issue/{N}
138
+ git worktree add ~/.einja/worktrees/issue-{N}/phase{M} issue/{N}-phase{M}
135
139
  git push -u origin issue/{N}-phase{M}
136
140
  ```
137
141
 
@@ -164,7 +168,7 @@ session.json の初期状態:
164
168
 
165
169
  ### Step 4: tmux セッション作成
166
170
  ```bash
167
- tmux new-session -d -s einja-{issue番号} -n manager
171
+ tmux new-session -d -s einja-{issue番号} -n manager -c ~/.einja/worktrees/issue-{N}/manager
168
172
  ```
169
173
 
170
174
  ### Step 5: Director 起動(Phase単位)
@@ -199,15 +203,16 @@ tmux send-keys -t einja-{N}:director-phase{M} '
199
203
  1. 依存関係のないタスクグループは並列でWorkerを起動してください
200
204
  2. 各Worker には tmux window + claude 対話モードで起動:
201
205
  - worktree作成: git worktree add ~/.einja/worktrees/issue-{N}/task-{X.Y} task/{N}-{X.Y}
202
- - tmux: tmux new-window + claude 起動 + /einja:task-exec #{N} {X.Y} を実行
206
+ - tmux: tmux new-window + claude 起動 + einja-task-exec Skill で #{N} {X.Y} を実行
203
207
  3. Worker完了後:
204
208
  - ステータスファイルでPR番号を確認
205
209
  - マージモードに応じたPR処理
206
210
  - 他active Workerにsync通知
207
211
  - 完了したworktree削除
208
- 4. 質問対応: Workerからの質問にspec/design/issueベースで回答。回答不可ならManagerにエスカレーション
209
- 5. Phase完了時: ステータスファイルで Manager に報告
210
- 6. GitHub Issue のチェックボックス更新
212
+ 4. Phase完了時: `/einja-create-pr --auto --base issue/{N}` でPhase PRを作成
213
+ 5. 質問対応: Workerからの質問にspec/design/issueベースで回答。回答不可ならManagerにエスカレーション
214
+ 6. Phase完了時: ステータスファイルで Manager に報告
215
+ 7. GitHub Issue のチェックボックス更新
211
216
 
212
217
  ## 質問エスカレーション
213
218
  回答不可な質問は ~/.einja/sessions/issue-{N}/questions/ にJSONファイルを作成してManagerに通知してください。
@@ -237,7 +242,8 @@ Manager は以下を定期的に監視:
237
242
  - Director/Worker の tmux window が消失した場合のリカバリ処理
238
243
 
239
244
  ### Step 7: 全Phase完了 → 最終PR
240
- 1. 最終PR作成: `gh pr create --base {baseBranch} --head issue/{N}`
245
+ 1. 最終PR作成: `/einja-create-pr --auto --base {baseBranch}` を実行
246
+ - changeset自動生成 + ラベル付与 + PR作成が一括実行される
241
247
  2. PR URL を表示
242
248
  3. セッションクリーンアップ(worktree 削除、セッションファイル削除)
243
249
 
@@ -253,7 +259,7 @@ Manager は以下を定期的に監視:
253
259
 
254
260
  ```
255
261
  {baseBranch}
256
- └── issue/{N} Manager管理
262
+ └── issue/{N} Manager worktree
257
263
  ├── issue/{N}-phase1 Director1 worktree
258
264
  │ ├── task/{N}-1.1 Worker1.1 worktree
259
265
  │ ├── task/{N}-1.2 Worker1.2 worktree
@@ -265,6 +271,7 @@ Manager は以下を定期的に監視:
265
271
  ## worktree 物理パス
266
272
  ```
267
273
  ~/.einja/worktrees/issue-{N}/
274
+ ├── manager/ ← Manager cwd
268
275
  ├── phase{M}/ ← Director cwd
269
276
  ├── task-{X.Y}/ ← Worker cwd
270
277
  ```
@@ -339,7 +346,7 @@ Manager は以下を定期的に監視:
339
346
  | Worker異常終了(PR作成済み) | tmux window消失 + PRあり | スキップ(PRマージ待ち継続) |
340
347
  | Director異常終了 | tmux window消失 + ステータス未更新 | 各Workerのステータスを確認 → 未完了Workerのみ再実行 |
341
348
  | Manager異常終了 | ユーザー手動 | `--resume` でセッション復元 |
342
- | rebaseコンフリクト | git rebase失敗 | conflict-resolverで自力解消 |
349
+ | rebaseコンフリクト | git rebase失敗 | einja-conflict-resolver Skillで自力解消 |
343
350
  | CI失敗 | gh run status | 修正 → 再push → 再CI待機 |
344
351
 
345
352
  ## CI 待機タイムアウト
@@ -382,22 +389,25 @@ git worktree add ~/.einja/worktrees/issue-{N}/task-{X.Y} task/{N}-{X.Y}
382
389
  tmux new-window -t einja-{N} -n worker-{X.Y}
383
390
  tmux send-keys -t einja-{N}:worker-{X.Y} 'cd ~/.einja/worktrees/issue-{N}/task-{X.Y} && claude' Enter
384
391
 
385
- # 3. task-exec コマンドを実行
392
+ # 3. einja-task-exec Skill を実行
386
393
  # claude 起動後に以下を送信:
387
- tmux send-keys -t einja-{N}:worker-{X.Y} '/einja:task-exec #{N} {X.Y}' Enter
394
+ tmux send-keys -t einja-{N}:worker-{X.Y} '/einja-task-exec #{N} {X.Y}' Enter
388
395
  ```
389
396
 
390
397
  ## セッションクリーンアップ
391
398
 
392
399
  Issue完了時に以下を自動削除:
393
400
  - `~/.einja/sessions/issue-{N}/` (セッションファイル)
394
- - `~/.einja/worktrees/issue-{N}/` (worktree。事前に `git worktree remove` を実行)
401
+ - `~/.einja/worktrees/issue-{N}/` (worktree。事前に `git worktree remove` を各ディレクトリに対して実行)
402
+ - `git worktree remove ~/.einja/worktrees/issue-{N}/task-{X.Y}`(Worker)
403
+ - `git worktree remove ~/.einja/worktrees/issue-{N}/phase{M}`(Director)
404
+ - `git worktree remove ~/.einja/worktrees/issue-{N}/manager`(Manager - 最後に削除)
395
405
  - ローカルブランチのクリーンアップ(task/*, issue/*-phase*)
396
406
 
397
407
  ## 注意事項
398
408
 
399
409
  - 全プロセスは**対話モード**(`claude`、非 `-p`)で起動。質問エスカレーションのため
400
- - Worker 内部のタスク並列実行は既存の task-exec フロー(Task ツール + run_in_background)をそのまま活用
410
+ - Worker 内部のタスク並列実行は既存の einja-task-exec Skill フロー(Task ツール + run_in_background)をそのまま活用
401
411
  - ステータスファイルの `status.json` 更新には `flock` による排他制御を使用
402
412
  - 質問ファイルは1ファイル1質問のためロック不要(UUID でアトミック書き込み)
403
413
  - Worker は各タスク完了毎 + PR作成前にステータスファイルをチェック(sync_required検知時は次タスク開始前にrebase)
@@ -51,7 +51,7 @@ Glob: .claude/commands/**/*.md
51
51
 
52
52
  例:
53
53
  - `task-executer` → `.claude/agents/task/task-executer.md`
54
- - `spec-requirements-generator` → `.claude/agents/specs/spec-requirements-generator.md`
54
+ - `requirements-generator` → `.claude/agents/issue-specs/requirements-generator.md`
55
55
 
56
56
  **変換テンプレート**:
57
57
 
@@ -131,8 +131,8 @@ alwaysApply: false
131
131
 
132
132
  ```bash
133
133
  # 例(フォルダ形式)
134
- .claude/commands/task-exec.md → .cursor/rules/task-exec/RULE.md
135
- .claude/commands/spec-create.md → .cursor/rules/spec-create/RULE.md
134
+ .claude/skills/einja-task-exec/SKILL.md → .cursor/rules/task-exec/RULE.md
135
+ .claude/skills/einja-issue-spec-create/SKILL.md → .cursor/rules/spec-create/RULE.md
136
136
  .claude/commands/einja/start-dev.md → .cursor/rules/start-dev/RULE.md
137
137
  ```
138
138
 
@@ -178,8 +178,8 @@ Cursor で以下のルールが利用可能になりました:
178
178
 
179
179
  ### レガシーファイル
180
180
  以下の古い形式のファイルが検出されました(削除推奨):
181
- - `.cursor/commands/task-exec.md`
182
- - `.cursor/commands/spec-create.md`
181
+ - `.cursor/commands/einja-task-exec.md`
182
+ - `.cursor/commands/einja-issue-spec-create.md`
183
183
  ```
184
184
 
185
185
 
@@ -216,7 +216,7 @@ Cursor で以下のルールが利用可能になりました:
216
216
  ├── .cursor/rules/spec-create/RULE.md (3箇所のサブエージェント参照を変換)
217
217
  ├── .cursor/rules/task-exec/RULE.md (4箇所のサブエージェント参照を変換)
218
218
  ├── .cursor/rules/start-dev/RULE.md (変換不要)
219
- └── .cursor/rules/update-docs-by-task-specs/RULE.md (変換不要)
219
+ └── .cursor/rules/update-docs-by-issue-specs/RULE.md (変換不要)
220
220
  ```
221
221
 
222
222
  ## エラー処理