Skip to content

fix(autopilot): worker が許可プロンプトで停止しないようにする(root は bypass 不可→allowlist + 動的workflow停止) #893

Description

@smalruby3-editor-bot

背景 / 症状

autopilot worker(claude セッション)が 許可プロンプトで停止する(例: #891 の review worker が
Use skill "code-review"? → さらに Dynamic workflow を実行するか(トークン大量消費の警告つき)
で停止し、人間の介入が必要になった)。worker は非対話で動くべきなので、これは運用を止める。

調査で確定した制約

  • root では bypassPermissions(= --dangerously-skip-permissions)が使えない:
    --dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons
    worker はコンテナ内 root で動くため、「全許可の auto mode」は不可
  • 現状の worker は --permission-mode acceptEdits。編集は自動許可されるが、Skill 実行・Workflow・
    allowedTools 外の操作は許可プロンプトが出る
    → 停止する。
  • 直接の引き金は autopilot-review プロンプトが /code-review(code-review skill)を起動し、
    それが 動的マルチエージェント Workflow を起動しようとしたこと。許可プロンプト+トークン過大の二重問題。

目的

root で動く worker が 許可プロンプトで停止しないようにする(= root で可能な範囲の auto mode)。
併せて トークンを浪費する動的 workflow を worker が起動しないようにする。

変更方針

1. review/verify プロンプトから動的 /code-review workflow を外す(最優先)

  • autopilot-review.md(および必要なら autopilot-verify.md)から /code-review skill の起動指示を削除し、
    軽量なインライン敵対的レビュー(worker が既に手動で実施しているもの)に統一する。
  • これで skill 許可プロンプトも Workflow 許可プロンプトも token 浪費も無くなる
  • どうしても機械的レビューを併用したい場合でも、動的 workflow は使わない(単発の観点チェックに留める)。

2. worker の permission allowlist を注入(root で bypass 不可の代替)

  • buildClaudeCommand(既に usage 用 --settings を注入済み)に、permissions.allow を追加して
    worker が使う操作を事前許可する: Bash, Edit, Write, Read, Glob, Grep, WebFetch 等。
    acceptEdits と併用。これで想定内操作の許可プロンプトで止まらない。)
  • Workflow は allow に入れない(トークン保護。1 の変更で worker はそもそも起動しない想定)。
  • allowlist は worker の --settings に限定(人間や他セッションの設定に影響しない)。

3. セキュリティ注記

  • root + allowlist は「全許可(bypass)」ではなく 限定許可。devpod は隔離 + egress allowlist 前提
    なので、worker が使う既知ツールの事前許可は許容範囲。docs/autopilot/ に方針を明記。

制約 / 注意

  • bypassPermissions は使えない(root 拒否)。allowlist 方式で実装すること。
  • 許可を広げすぎない(worker が実際に使うツールに限定)。特に Workflow は入れない(token)。
  • 音/autoplay の実 Chrome 確認など、そもそもホスト引き継ぎのものは対象外。

DoD

  • review/verify プロンプトが動的 /code-review workflow を起動しない(インラインレビューに統一)
  • worker が Skill/Workflow/tool の許可プロンプトで停止しない(実運用の review/implement で確認)
  • permissions.allow は worker の --settings にのみ注入され、人間の設定に影響しない
  • Workflow は許可に含めない(トークン浪費防止)
  • settings.js の注入をユニットテストで担保(allow リストが --settings に入る)
  • node --testtools/autopilot)が緑
  • docs/autopilot/ に「root では bypass 不可 → allowlist 方式」の方針を追記

Metadata

Metadata

Assignees

Labels

🤖 autopilotautopilot が処理対象にした Issue/PR(daemon が付与)

Type

No type

Fields

No fields configured for issues without a type.

Projects

Status
Close

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions