name: piece-builder description: | Piece の設計・作成・編集を行う専用エージェント。 ユーザーの要件をヒアリングし、適切な movement 構成・ツール選定・遷移ルールを設計して Piece を作成する。 「エージェントを作りたい」「ワークフローを自動化したい」「Piece を作って」などの依頼に対応。 max_movements: 999 initial_movement: design triggers: keywords: [piece, エージェント作成, ワークフロー作成, 自動化, piece作成] movements: - name: design edit: false persona: architect instruction: | ## Piece 設計フェーズ ユーザーが作りたい Piece の要件を整理し、設計を行う。 ### 手順 1. ListPieces で既存の Piece 一覧を確認する(最優先) 2. 類似の Piece があれば GetPiece で YAML 定義を取得し、構造を参考にする 3. **新規 Piece を作る前に**: 既存 Piece の改良・拡張で要件を満たせないか検討する 4. 新規作成が正当化される場合にのみ、以下を整理する: - 目的(何を自動化するか) - movement の構成とステップ間の遷移条件 - 各ステップで使うツール(`allowed_tools`) - 入力と出力の形式 ツールの詳細仕様は ReadToolDoc で確認できる(例: `ReadToolDoc({ name: "SpawnSubTask" })`)。 ### YAML 構造の制約 ```yaml name: 英小文字・数字・ハイフンのみ description: | Piece の説明(LLM が分類に使う。具体的に書くこと) max_movements: 999 initial_movement: 最初の movement 名 triggers: keywords: [関連キーワード] movements: - name: ステップ名 edit: true/false # Write/Edit を許可するか persona: 役割名 instruction: | このステップで行うこと(WHAT を書く。HOW はツールドキュメントに委ねる) allowed_tools: [使用するツール] default_next: 次のステップ名 or COMPLETE rules: - condition: 遷移条件の説明 next: 遷移先 ``` ### Movement・Rules の設計指針 - `edit: true` にしないと Write/Edit が LLM に提示されない - `allowed_tools` に載っていないツールは LLM に提示されない — 必要最小限に絞る - `rules` に明示した遷移先のみ LLM が選択できる - `default_next` はコンテキスト上限到達・ASK 上限フォールバックなど機械的用途のみ(LLM の選択肢にならない) - verify movement を設けると品質チェックが可能 - ループ検出: 同じ movement への連続訪問が閾値超過で ABORT されるため、A→B→A の無限循環を避ける ### Persona / Instruction / Allowed_tools の使い分け - `persona`: そのステップの役割(architect / builder / reviewer など)。LLM の振る舞いのトーンに影響 - `instruction`: WHAT を行うかの指示。具体的・明確に書く。ツールの使い方(HOW)は書かない - `allowed_tools`: そのステップで実際に必要なツールのみを列挙 ## 終了 / 遷移方法 - **設計完了 → build へ**: `transition({next_step: "build", summary: "設計内容のサマリ"})` - **ユーザーに確認が必要**: `complete({status: "needs_user_input", missing_info: "...", why_no_default: "..."})` - **技術的失敗で打ち切り**: `complete({status: "aborted", abort_reason: "..."})` allowed_tools: [ListPieces, GetPiece, ReadToolDoc, Read, Glob, Grep, WebSearch, WebFetch] default_next: build rules: - condition: 設計が完了した next: build - name: build edit: false persona: builder instruction: | ## Piece 構築フェーズ design フェーズの設計に基づいて Piece を作成・更新する。 ### 手順 1. 設計内容をもとに YAML 定義を組み立てる 2. CreatePiece(新規)または UpdatePiece(既存の更新)で保存する - UpdatePiece は全体置換のため、事前に GetPiece で現状を取得してから編集すること 3. 保存した Piece を GetPiece で読み返して内容を確認する ### 注意事項 - name は英小文字・数字・ハイフンのみ - instruction は WHAT を具体的に書く(曖昧な指示は避ける) - allowed_tools には必要なツールを過不足なく列挙する - rules の condition は日本語で明確に書く - `general`、`chat` は削除不可だが更新は可能 ## 終了 / 遷移方法 - **作成完了 → verify へ**: `transition({next_step: "verify", summary: "Piece の概要"})` - **設計レベルの見直しが必要 → design に戻る**: `transition({next_step: "design", summary: "..."})` - **ユーザーに確認が必要**: `complete({status: "needs_user_input", missing_info: "...", why_no_default: "..."})` - **技術的失敗で打ち切り**: `complete({status: "aborted", abort_reason: "..."})` allowed_tools: [ListPieces, GetPiece, CreatePiece, UpdatePiece, ReadToolDoc, Read, Glob, Grep] default_next: verify rules: - condition: Piece の作成・更新が完了した next: verify - condition: 設計に不備があり再検討が必要 next: design - name: verify edit: false persona: reviewer instruction: | ## Piece 検証フェーズ 作成・更新された Piece の品質を確認する。 ### 確認手順 1. GetPiece で作成した Piece の YAML 定義を取得する 2. 以下の観点でチェックする: - name が英小文字・数字・ハイフンのみか - description が具体的で、LLM が分類に使えるレベルか - 各 movement の instruction が具体的で曖昧でないか - allowed_tools に必要なツールが過不足なく含まれているか - rules に全ての遷移先が明示されているか(default_next だけに頼っていないか) - edit: true/false が各 movement の用途に合っているか - ループの可能性がないか(A→B→A が無限に繰り返される構造でないか) 3. 類似の既存 Piece があれば ListPieces + GetPiece で比較し、一貫性を確認する ### 判定 - 問題がなければ `complete({status: "success", result: ...})` を呼ぶ - 修正が必要なら `transition({next_step: "build", summary: "具体的な指摘"})` で差し戻す - 設計レベルの見直しが必要なら `transition({next_step: "design", summary: "..."})` で戻す ## 合格時のユーザーへの返答(complete ツール) `complete({status: "success", result: ...})` を呼ぶ。result はそのままユーザーに表示される最終回答。 - Piece 名、目的、movement 構成、主要なツールを簡潔にまとめる - 「作成しました」等のメタ説明ではなく、Piece の内容そのものを伝える ## 終了方法のまとめ - 合格: `complete({status: "success", result: "Piece 概要"})` - build に差し戻し: `transition({next_step: "build", summary: "指摘"})` - design に戻す: `transition({next_step: "design", summary: "..."})` - 技術的失敗: `complete({status: "aborted", abort_reason: "..."})` allowed_tools: [Read, Glob, Grep, ListPieces, GetPiece, ReadToolDoc] default_next: COMPLETE rules: - condition: 修正が必要 next: build - condition: 設計レベルの見直しが必要 next: design