Documentation Index
Fetch the complete documentation index at: https://docs.qoder.com/llms.txt
Use this file to discover all available pages before exploring further.
権限ポリシーは、Agent がツール操作を実行する前に人間の承認を必要とするかを制御します。これは Human-in-the-Loop を実現する中核機構であり、Agent の自律実行と人間による監督のバランスを取れます。
3 つのポリシー
Agent がツールを呼び出そうとすると、ランタイムはそのツールの permission 値を確認します。
| ポリシー | 挙動 | 適したシナリオ |
|---|
allow | Agent が確認なしに直接実行 | 低リスク操作 (ファイル読み取り、状態確認) |
ask | Agent が一時停止し、人間の承認を待ってから続行 | 高リスク操作 (ファイル削除、ネットワークリクエスト) |
deny | Agent はその操作を実行できない | 禁止操作 (本番デプロイ、機微データ) |
構成方法
tools 配列の各ツールオブジェクトの permission フィールドで設定します。
{
"tools": [
{"type": "bash_20250124", "permission": "allow"},
{"type": "text_editor_20250124", "permission": "allow"},
{"type": "computer_20250124", "permission": "ask"}
]
}
Agent 作成時に指定:
curl -X POST https://openapi.qoder.sh/api/v1/cloud/agents \
-H "Authorization: Bearer $QODER_PAT" \
-H "Content-Type: application/json" \
-d '{
"name": "cautious-agent",
"model": "qoder-best",
"instructions": "タスクを慎重に実行してください",
"tools": [
{"type": "bash_20250124", "permission": "ask"},
{"type": "text_editor_20250124", "permission": "allow"},
{"type": "computer_20250124", "permission": "deny"}
]
}'
Pending Action 機構
Agent が ask ポリシーのツールを起動すると、次の流れになります。
- Agent が Pending Action イベントを生成
- Session の状態が idle になる (人間の入力を待つ)
- クライアントは SSE で pending action 通知を受け取る
- Turn Resolve API で人間が承認
- Agent が処理を継続
Turn Resolve API
POST https://openapi.qoder.sh/api/v1/cloud/sessions/{session_id}/turns/{turn_id}/resolve
リクエストボディ:
または拒否:
{
"action": "deny",
"reason": "この操作は本タスクの範囲外です"
}
エンドツーエンドの例
1. ask ポリシー付きの Agent を作成
curl -X POST https://openapi.qoder.sh/api/v1/cloud/agents \
-H "Authorization: Bearer $QODER_PAT" \
-H "Content-Type: application/json" \
-d '{
"name": "safe-dev",
"model": "qoder-best",
"instructions": "開発アシスタント",
"tools": [
{"type": "bash_20250124", "permission": "ask"},
{"type": "text_editor_20250124", "permission": "allow"}
]
}'
2. タスクを送信してツール呼び出しをトリガー
curl -X POST https://openapi.qoder.sh/api/v1/cloud/sessions/ses_abc123/events \
-H "Authorization: Bearer $QODER_PAT" \
-H "Content-Type: application/json" \
-d '{
"events": [
{"type": "user.message", "content": "/tmp 配下のすべてのログファイルを削除してください"}
]
}'
3. SSE で pending action を受信
id: evt_02xyz
event: agent.message
data: {"content":"rm /tmp/*.log を実行する必要があります。確認してください。","pending_action":{"turn_id":"turn_01","tool":"bash","command":"rm /tmp/*.log"}}
4. 承認して実行
curl -X POST https://openapi.qoder.sh/api/v1/cloud/sessions/ses_abc123/turns/turn_01/resolve \
-H "Authorization: Bearer $QODER_PAT" \
-H "Content-Type: application/json" \
-d '{"action": "approve"}'
5. または拒否
curl -X POST https://openapi.qoder.sh/api/v1/cloud/sessions/ses_abc123/turns/turn_01/resolve \
-H "Authorization: Bearer $QODER_PAT" \
-H "Content-Type: application/json" \
-d '{"action": "deny", "reason": "7 日以上前のログのみ削除してください"}'
拒否時に reason を添えると、Agent は理由に応じて挙動を調整し、再試行します。
ポリシー設計の指針
| シナリオ | 推奨構成 |
|---|
| 内部開発環境 | すべて allow で効率最大化 |
| 本番運用 | bash は ask、text_editor は allow |
| デモ・評価 | すべて ask で完全に制御可能 |
| 読み取り専用分析 | bash は deny、text_editor は deny |
よくある質問
Q: permission フィールドを設定しないとデフォルトは? A: allow がデフォルトで、Agent は直接実行します。
Q: pending action にタイムアウトはありますか? A: Session の idle timeout 構成に依存します。タイムアウトすると Session が回収される可能性があります。
Q: 1 つの turn に複数の pending action が存在できますか? A: 現在、turn ごとに最大 1 つの pending action です。Agent は段階的に確認をリクエストします。
Q: コマンド内容に応じて動的に ask 判定できますか? A: 現在はツールタイプ単位で一律に構成します。より細粒度なルール (コマンドパターンマッチなど) は計画中です。