This commit is contained in:
+3
-8
@@ -21,7 +21,6 @@ initial_movement: execute
|
||||
|
||||
movements:
|
||||
- name: execute
|
||||
edit: true
|
||||
persona: ops-operator
|
||||
instruction: |
|
||||
## 最初のステップ: タスク把握と接続の選定
|
||||
@@ -32,7 +31,7 @@ movements:
|
||||
- Config push: ローカルで作成・編集した設定を SshUpload で配信 → SshExec でリロード
|
||||
- Log fetch: SshDownload でリモートのログを取得 → ローカルで grep / 集計 / 分析
|
||||
3. タスクで指定された SSH 接続 ID を確認する。指定が無く接続候補が複数ある場合は
|
||||
`complete({status: "needs_user_input", missing_info: "どの SSH 接続を使うか"})` で確認する
|
||||
`complete({status: "needs_user_input", missing_info: "どの SSH 接続を使うか", why_no_default: "接続候補が複数あり、推測で選ぶと誤った host を操作する恐れがあるため"})` で確認する
|
||||
|
||||
## SshExec の使い方
|
||||
|
||||
@@ -54,11 +53,11 @@ movements:
|
||||
## エラーハンドリング (詳細は docs/tools/ssh-tools.md の error code 表)
|
||||
|
||||
- `host_key_not_verified`: TOFU 未完了。
|
||||
`complete({status: "needs_user_input", missing_info: "SSH 接続 <id> の host key を UI で検証してください (Settings → User Folder → SSH Connections → Test)"})` で停止する
|
||||
`complete({status: "needs_user_input", missing_info: "SSH 接続 <id> の host key を UI で検証してください (Settings → User Folder → SSH Connections → Test)", why_no_default: "host key 未検証のまま接続すると MITM のリスクがあり、エージェント側では信頼判断できないため"})` で停止する
|
||||
- `host_key_mismatch`: MITM 疑い。**自動でリトライしない**。
|
||||
`complete({status: "aborted", abort_reason: "host_key_mismatch: <details>"})` で停止する
|
||||
- `abuse_locked`: 連続失敗で接続がロック。
|
||||
`complete({status: "needs_user_input", missing_info: "接続が <until> までロックされています。admin に force-unlock を依頼してください"})` で停止する
|
||||
`complete({status: "needs_user_input", missing_info: "接続が <until> までロックされています。admin に force-unlock を依頼してください", why_no_default: "ロック解除には admin 権限が必要で、エージェントでは解除も迂回もできないため"})` で停止する
|
||||
- `no_grant` / `access_denied`: 権限不足。admin に grant 追加を依頼するよう user に報告して停止する
|
||||
- `connect_timeout` / `auth_failed` 等の一時失敗: 同じ command を最大 2 回まで再試行。
|
||||
それ以上は `complete({status: "aborted", abort_reason: "..."})`
|
||||
@@ -85,15 +84,12 @@ movements:
|
||||
- **次の verify へ**: `transition({next_step: "verify"})`
|
||||
- **必要情報不足で停止**: `complete({status: "needs_user_input", missing_info: "...", why_no_default: "..."})`
|
||||
- **致命的失敗で打ち切り**: `complete({status: "aborted", abort_reason: "..."})`
|
||||
allowed_tools: [SshExec, SshUpload, SshDownload, SshListConnections, WebSearch, WebFetch, DownloadFile, BrowseWeb, Read, Write, Bash, Glob, Grep]
|
||||
allowed_ssh_connections: ['*']
|
||||
default_next: verify
|
||||
rules:
|
||||
- condition: output/report.md に ops 結果をまとめた
|
||||
next: verify
|
||||
|
||||
- name: verify
|
||||
edit: false
|
||||
persona: reviewer
|
||||
instruction: |
|
||||
ops 結果を確認する。
|
||||
@@ -132,7 +128,6 @@ movements:
|
||||
- 修正必要: `transition({next_step: "execute", summary: "差し戻し指摘"})`
|
||||
- 機密漏れ: `complete({status: "aborted", abort_reason: "secret_leak: ..."})`
|
||||
- 技術的失敗: `complete({status: "aborted", abort_reason: "..."})`
|
||||
allowed_tools: [Read, Glob, Grep]
|
||||
default_next: COMPLETE
|
||||
rules:
|
||||
- condition: ops 報告が不足している
|
||||
|
||||
Reference in New Issue
Block a user