# Bash ツール ## 背景 builtin-tools チケットで Read/Write/Edit/Glob/Grep の5ツールは実装済み。 Bash ツールは子プロセスが直接 fs を触るため ScopedFs では保護できず、 Permission 層(deny/allow ルール)との統合が前提。 ## 実装内容 - コマンド実行(`tokio::process::Command`) - タイムアウト(`timeout` パラメータ、デフォルト 120秒、最大 600秒) - stateless: 各呼び出しは workspace root から fresh start。pwd は session を跨いで保持しない(`cd && cmd` のように chain させる運用。Claude Code と同方針) - stdout/stderr の結合出力 - ToolOutput の summary(コマンド + exit code)+ content(出力テキスト) - 出力ハンドリング: 短い場合(≤ 80行 & ≤ 12 KiB)はインラインで返す。それを超えたら full output を `//bash-output/` 配下のファイルに退避し、tail 80行 + ファイルパスを返却。Worker の `ToolOutputLimits` (default 16 KiB) が末尾を切り捨てる挙動を回避するため - 退避ファイルは scope に `allow(Read)` で追加するので `Read` ツールで読める。Pod 終了で `RuntimeDir::Drop` がまとめて掃除、session 終了でも `BashTool::Drop` が個別削除 ## Scope との関係 Bash の子プロセスは ScopedFs を経由しない。Scope による保護は不可能。 代わりに: - `PreToolCall` Hook + Permission ルール(`[permission]` マニフェストセクション)で制御 - Permission 未実装の間は制約なしで動作 ## 依存チケット - [permission-extension-point.md](permission-extension-point.md) — deny/allow ルールによる Bash コマンド制御 ## Review - 状態: Approve with follow-up(Round 2) - レビュー詳細: [./bash-tool.review.md](./bash-tool.review.md) - 日付: 2026-05-01(Round 2: 2026-05-01) - Round 2 残課題: - ~~チケット本文「作業ディレクトリの永続」の記述を stateless 仕様に更新~~(解消済み) - `crates/tools/src/lib.rs:51` の broken intra-doc link 修正(別コミットで対応) - TUI `render_default` 回帰テストは別チケットへ切り出し