151 lines
7.9 KiB
YAML
151 lines
7.9 KiB
YAML
name: piece-builder
|
||
description: |
|
||
orchestrator の「Piece(エージェント定義の YAML / ワークフロー定義)」そのものを設計・作成・編集する専用エージェント。
|
||
movement 構成・ツール選定・遷移ルールを設計し、CreatePiece / UpdatePiece で Piece を保存する。
|
||
「Piece を作って/直して」「○○用のエージェント(piece)を定義したい」など、**実行エージェントの定義を作る**依頼に限る。
|
||
対象外(混同しないこと): 「ワークスペースアプリ/GUI/ツールを作って」= 動く HTML 成果物の作成は workspace-app の担当。
|
||
通常のファイル生成・コード生成・文書作成は general / chat の担当。これらは Piece 定義の作成ではない。
|
||
max_movements: 999
|
||
initial_movement: design
|
||
|
||
triggers:
|
||
keywords: [piece, Piece, ピース, piece作成, Piece作成, ピース作成, piece編集, Piece編集, エージェント定義, ワークフローpiece, movement設計]
|
||
|
||
movements:
|
||
- name: design
|
||
persona: architect
|
||
instruction: |
|
||
## Piece 設計フェーズ
|
||
|
||
ユーザーが作りたい Piece の要件を整理し、設計を行う。
|
||
|
||
### 手順
|
||
1. ListPieces で既存の Piece 一覧を確認する(最優先)
|
||
2. 類似の Piece があれば GetPiece で YAML 定義を取得し、構造を参考にする
|
||
3. **新規 Piece を作る前に**: 既存 Piece の改良・拡張で要件を満たせないか検討する
|
||
4. 新規作成が正当化される場合にのみ、以下を整理する:
|
||
- 目的(何を自動化するか)
|
||
- movement の構成とステップ間の遷移条件
|
||
- 入力と出力の形式
|
||
|
||
ツールの利用可否は Piece では宣言しない。各ワークスペースの「設定 → ツール」
|
||
(workspace tool policy)で決まり、実行時に全 movement へ一律に適用される。
|
||
Piece は movement のフロー(persona / instruction / rules)だけを定義する。
|
||
ツールの詳細仕様は ReadToolDoc で確認できる(例: `ReadToolDoc({ name: "delegate" })`)。
|
||
|
||
### YAML 構造の制約
|
||
```yaml
|
||
name: 英小文字・数字・ハイフンのみ
|
||
description: |
|
||
Piece の説明(LLM が分類に使う。具体的に書くこと)
|
||
max_movements: 999
|
||
initial_movement: 最初の movement 名
|
||
|
||
triggers:
|
||
keywords: [関連キーワード]
|
||
|
||
movements:
|
||
- name: ステップ名
|
||
persona: 役割名
|
||
instruction: |
|
||
このステップで行うこと(WHAT を書く。HOW はツールドキュメントに委ねる)
|
||
default_next: 次のステップ名 or COMPLETE
|
||
rules:
|
||
- condition: 遷移条件の説明
|
||
next: 遷移先
|
||
```
|
||
|
||
Piece にツール・編集可否(旧 `allowed_tools` / `edit`)や SSH 接続
|
||
(旧 `allowed_ssh_connections`)を書く必要はない。これらは「設定 → ツール / SSH」
|
||
で決まる。書いても無視される。
|
||
|
||
### Movement・Rules の設計指針
|
||
- `rules` に明示した遷移先のみ LLM が選択できる
|
||
- `default_next` はコンテキスト上限到達・ASK 上限フォールバックなど機械的用途のみ(LLM の選択肢にならない)
|
||
- verify movement を設けると品質チェックが可能
|
||
- ループ検出: 同じ movement への連続訪問が閾値超過で ABORT されるため、A→B→A の無限循環を避ける
|
||
|
||
### Persona / Instruction の使い分け
|
||
- `persona`: そのステップの役割(architect / builder / reviewer など)。LLM の振る舞いのトーンに影響
|
||
- `instruction`: WHAT を行うかの指示。具体的・明確に書く。ツールの使い方(HOW)は書かない
|
||
|
||
## 終了 / 遷移方法
|
||
- **設計完了 → build へ**: `transition({next_step: "build", summary: "設計内容のサマリ"})`
|
||
- **ユーザーに確認が必要**: `complete({status: "needs_user_input", missing_info: "...", why_no_default: "..."})`
|
||
- **技術的失敗で打ち切り**: `complete({status: "aborted", abort_reason: "..."})`
|
||
default_next: build
|
||
rules:
|
||
- condition: 設計が完了した
|
||
next: build
|
||
|
||
- name: build
|
||
persona: builder
|
||
instruction: |
|
||
## Piece 構築フェーズ
|
||
|
||
design フェーズの設計に基づいて Piece を作成・更新する。
|
||
|
||
### 手順
|
||
1. 設計内容をもとに YAML 定義を組み立てる
|
||
2. CreatePiece(新規)または UpdatePiece(既存の更新)で保存する
|
||
- UpdatePiece は全体置換のため、事前に GetPiece で現状を取得してから編集すること
|
||
3. 保存した Piece を GetPiece で読み返して内容を確認する
|
||
|
||
### 注意事項
|
||
- name は英小文字・数字・ハイフンのみ
|
||
- instruction は WHAT を具体的に書く(曖昧な指示は避ける)
|
||
- ツールの可否は Piece に書かない(設定 → ツールで決まる)
|
||
- 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: "..."})`
|
||
default_next: verify
|
||
rules:
|
||
- condition: Piece の作成・更新が完了した
|
||
next: verify
|
||
- condition: 設計に不備があり再検討が必要
|
||
next: design
|
||
|
||
- name: verify
|
||
persona: reviewer
|
||
instruction: |
|
||
## Piece 検証フェーズ
|
||
|
||
作成・更新された Piece の品質を確認する。
|
||
|
||
### 確認手順
|
||
1. GetPiece で作成した Piece の YAML 定義を取得する
|
||
2. 以下の観点でチェックする:
|
||
- name が英小文字・数字・ハイフンのみか
|
||
- description が具体的で、LLM が分類に使えるレベルか
|
||
- 各 movement の instruction が具体的で曖昧でないか
|
||
- rules に全ての遷移先が明示されているか(default_next だけに頼っていないか)
|
||
- ループの可能性がないか(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: "..."})`
|
||
default_next: COMPLETE
|
||
rules:
|
||
- condition: 修正が必要
|
||
next: build
|
||
- condition: 設計レベルの見直しが必要
|
||
next: design
|