概要
autopilot の implement / review フェーズが、.claude/ 配下のファイル編集時に
Claude Code の権限プロンプトで stall する。--permission-mode acceptEdits でも
.claude/**(例: .claude/rules/scratch-gui/smalruby-prettier-files.md、各 smalruby-markers.md)
の編集は「自分の設定の編集」クラスとして自動承認されず、対話プロンプトが出るため。
CLAUDE.md は 新規 Smalruby 固有ファイル追加時に prettier ホワイトリスト
(.claude/rules/.../smalruby-prettier-files.md) とマーカー一覧の更新を必須としているので、
新ファイルを伴う実装は ほぼ必ずこのプロンプトに当たる。
再現
#631 / #633 の implement 実行中、両方が次のプロンプトで停止した:
Do you want to make this edit to smalruby-prettier-files.md?
❯ 1. Yes
2. Yes, and allow Claude to edit its own settings for this session
3. No
tmux pane で option 2 を手動選択するとアンブロックされ、以降同一ランでは再プロンプトされず完走した。
影響
対処案
Runner が起動する claude を 完全非対話にする(コントラクト §1「権限プロンプトを前提にしない」の徹底)。
候補:
--dangerously-skip-permissions を付与(DEFAULT_CLAUDE_COMMAND / runner の launch)。
autopilot は隔離 worktree 内で bot 権限の事前承認作業を行うので、既に Bash/Edit が
allowlist 済み = 実質フル権限。残る対話ガードを外すだけでリスク増は小さい。
- 要確認: root 実行 +
--dangerously-skip-permissions は Claude Code が拒否する版がある
(IS_SANDBOX 等の回避要否)。devcontainer 内 root での挙動を検証する。
- project 内
.claude/settings(または launch 時の設定)で .claude/** の Edit を allow に
する。ただし settings はホスト read-only mount のため worktree 側で完結する方法に限る。
- implement/review スキルが
.claude/ を直接編集せず、prettier/マーカー更新を別ステップ化。
→ CLAUDE.md の「同一 PR で更新」方針に反するため非推奨。
→ 案1 が本命。検証の上で tools/autopilot/src/phases.js の DEFAULT_CLAUDE_COMMAND を更新し、
daemon を再起動する。
DoD
概要
autopilot の implement / review フェーズが、
.claude/配下のファイル編集時にClaude Code の権限プロンプトで stall する。
--permission-mode acceptEditsでも.claude/**(例:.claude/rules/scratch-gui/smalruby-prettier-files.md、各smalruby-markers.md)の編集は「自分の設定の編集」クラスとして自動承認されず、対話プロンプトが出るため。
CLAUDE.md は 新規 Smalruby 固有ファイル追加時に prettier ホワイトリスト
(
.claude/rules/.../smalruby-prettier-files.md) とマーカー一覧の更新を必須としているので、新ファイルを伴う実装は ほぼ必ずこのプロンプトに当たる。
再現
#631 / #633 の implement 実行中、両方が次のプロンプトで停止した:
tmux pane で option 2 を手動選択するとアンブロックされ、以降同一ランでは再プロンプトされず完走した。
影響
maxRestarts 到達で fail。最終的に fix(autopilot): run 失敗時のハンドリング(Blocked 不整合 / コメント無し / stuck 検知) #816 の失敗ハンドリングで Blocked になるが、
30 分以上を無駄にし作業も失う。
対処案
Runner が起動する claude を 完全非対話にする(コントラクト §1「権限プロンプトを前提にしない」の徹底)。
候補:
--dangerously-skip-permissionsを付与(DEFAULT_CLAUDE_COMMAND/ runner の launch)。autopilot は隔離 worktree 内で bot 権限の事前承認作業を行うので、既に Bash/Edit が
allowlist 済み = 実質フル権限。残る対話ガードを外すだけでリスク増は小さい。
--dangerously-skip-permissionsは Claude Code が拒否する版がある(
IS_SANDBOX等の回避要否)。devcontainer 内 root での挙動を検証する。.claude/settings(または launch 時の設定)で.claude/**の Edit を allow にする。ただし settings はホスト read-only mount のため worktree 側で完結する方法に限る。
.claude/を直接編集せず、prettier/マーカー更新を別ステップ化。→ CLAUDE.md の「同一 PR で更新」方針に反するため非推奨。
→ 案1 が本命。検証の上で
tools/autopilot/src/phases.jsのDEFAULT_CLAUDE_COMMANDを更新し、daemon を再起動する。
DoD
.claude/編集で stall しない(新ファイルを伴う実装が無人で完走)