---
name: implement
description: "実装パイプラインを開始する．コーディング → テスト → リファクタリングの順で 3 つのエージェントを実行し，各フェーズ間で人間の確認を挟む．"
argument-hint: "<タスク内容>"
---

あなたはオーケストレーターです．以下の実装パイプラインを管理してください．
各フェーズ間で必ず人間の確認を挟み，承認を得てから次のフェーズに進むこと．

## 前提確認 (Pre-check)

1. 現在のブランチを確認する（`git branch --show-current`）
2. `main` ブランチにいる場合，GUIDE_04 に従い作業ブランチを作成する
   - ブランチ名: `feature/`/`fix/` + タスク内容を表す英単語 2〜4 語（kebab-case）
3. 実装対象のタスクを確認する: $ARGUMENTS

## Phase 1: コーディング (Coder)

coder エージェントに以下を委譲する:

「以下のタスクを実装してください: $ARGUMENTS」

Coder の出力（実装サマリー）を記録する．

### 人間の確認ポイント 1

Coder の実装サマリーをユーザーに提示し，以下を依頼する:

「**Phase 1（コーディング）が完了しました．**

{Coder の実装サマリー}

ブラウザや実機で動作を確認してください．
- **OK** → 次のフェーズ（テスト）に進みます
- **NG** → 問題点を教えてください．修正します」

ユーザーの OK を得るまで Phase 2 に進まないこと．
NG の場合は coder エージェントに修正を委譲し，再度確認を依頼する．

## Phase 2: テスト (Tester)

tester エージェントに以下を委譲する:

「直前の実装に対するテストを仕様ベースで作成・実行してください．

実装サマリー:
{Coder の出力}」

Tester の出力（テストサマリー）を記録する．

### Phase 2 完了後の分岐

テスト結果に応じて自動で分岐する:

- **全テスト成功**: ユーザーにテストサマリーを表示した上で，自動的に Phase 3 に進む．
- **テスト失敗あり**: ユーザーに報告し，判断を仰ぐ．

テスト失敗時のみ，以下をユーザーに提示する:

「**Phase 2（テスト）でテスト失敗がありました．**

{Tester のテストサマリー}

テスト失敗の原因を判断してください:
- **仕様の問題** → 仕様の修正方針を教えてください
- **実装の問題** → coder エージェントに修正を委譲します
- **テストの問題** → tester エージェントに修正を委譲します」

ユーザーの指示に従い対応した後，再度テストを実行して全テスト成功を確認してから Phase 3 に進む．

## Phase 3: リファクタリング (Refactorer)

refactorer エージェントに以下を委譲する:

「直前の実装・テスト後のコードをリファクタリングしてください．

実装サマリー:
{Coder の出力}

テストサマリー:
{Tester の出力}」

Refactorer の出力（リファクタリングサマリー）を記録する．

### 人間の確認ポイント 3

Refactorer のリファクタリングサマリーをユーザーに提示し，以下を依頼する:

「**Phase 3（リファクタリング）が完了しました．**

{Refactorer のリファクタリングサマリー}

全フェーズが完了しました．最終確認をお願いします．
- **OK** → コミット・push・PR 作成に進みます
- **NG** → 修正点を教えてください」

## 完了処理 (Finalization)

ユーザーの最終 OK を得た後:

1. 全変更をステージングする（`git add` で関連ファイルを追加）
2. GUIDE_04 に従いコミットする（`[add]`/`[update]`/`[fix]` + 日本語メッセージ）
3. リモートにプッシュする（`git push origin {ブランチ名}`）
4. PR 作成を実行する（`gh pr create`）
5. CLAUDE.md の開発進捗の更新を提案する

## 注意事項 (Notes)

- 各フェーズは必ず順番に実行する（並列実行しない）
- フェーズをスキップしない．リファクタリング不要の判断は Refactorer エージェント自身が行う
- エージェントがエラーを報告した場合，ユーザーに報告して判断を仰ぐ
- 人間の確認なしに次のフェーズに進まない
