Shell Gate とは?
Shell Gate は Alius のヒューマンインザループセキュリティ層です。Agent が要求するすべてのシェル・ファイル操作に対してリスク分析とスコープチェックを行い、機密操作中もあなたがコントロールを維持できるようにします。
Shell Gate は単純な「許可/拒否」スイッチではありません。コマンド文字列、引数、パス、リダイレクト先、現在の作業ディレクトリ、送信元、ワークスペースルート、認可ポリシーを分析して、きめ細かい決定を行います。
仕組み
Agent が操作(シェルコマンド、ファイル書き込みなど)を実行しようとすると、Shell Gate は:
- 操作を傍受する
- コマンドのリスクとスコープを分析する
- 決定:Allow / Deny / ApprovalRequired
- 監査のために決定を記録する
Shell Gate の決定
| 決定 | プランモードの動作 | バイパスモードの動作 |
|---|---|---|
| Allow | 直接実行 | 直接実行 |
| Deny | 実行を拒否 | 実行を拒否 |
| ApprovalRequired | 一時停止してユーザーの確認を待つ | 直接実行して結果を返す |
バイパスモードでは、Shell Gate の
ApprovalRequired決定は確認プロンプトを表示せずに直接実行されます。Deny された操作は実行されません。
Git コマンドのリスク分類
Shell Gate は Git サブコマンドを分類します:
| リスクレベル | コマンド | 説明 |
|---|---|---|
| 低リスク | git status, git log, git diff, git show, git branch | 読み取り専用操作 |
| 中リスク | git clone, git fetch, git pull, git submodule | ワークスペースへの書き込みやネットワーク使用 |
| 中リスク | git push, git checkout, git switch, git merge, git rebase, git restore, git add, git commit | 変更操作 |
| 高リスク | git clean, git reset --hard | データ損失の可能性 |
ワークスペース境界チェック
すべてのファイル操作は resolve_within_workspace(path, workspace, must_exist) で境界チェックを受けます:
- 絶対パスアクセスをブロック(例:
/etc/passwd) - 親ディレクトリトラバーサルをブロック(例:
../secret) - シンボリックリンクエスケープをブロック
- オプション値内のパスをチェック(例:
--output=/tmp/file) - リダイレクト先をチェック(例:
> /tmp/file、2>/tmp/error) - URL 的な値は無視(パスとして扱わない)
内蔵ツール権限
| ツール | 権限レベル | 説明 |
|---|---|---|
shell | Execute | シェルコマンドを実行、120秒タイムアウト、出力20,000文字で切り捨て |
read_file | Read | ファイルを読み取り、ワークスペース境界チェック |
write_file | Write | ファイルに書き込み、プランモードでは確認が必要 |
list_dir | Read | ディレクトリの内容を一覧表示 |
edit_file | Write | ファイルの内容を置換、プランモードでは確認が必要 |
シェルツール
シェルツールの完全な実行フロー:
- 引数を解析
- cwd をワークスペーススコープ内に解決
shell_gate::authorizeを呼び出してリスク分析Deny→ 実行を拒否Allow→ コマンドを実行ApprovalRequired→ プランモードは確認待ちで一時停止、バイパスモードは直接実行- 出力形式:
[exit:N]\n<stdout>\n<stderr>、20,000文字で切り捨て
権限の設定
.alius/config/permissions.toml で設定:
[shell]
default = "ask"
auto_approve = ["ls", "cat", "git status", "git log", "git diff"]
deny = ["rm -rf /", "format", "mkfs"]
[file_write]
default = "ask"
deny_patterns = [".env", "credentials", "*.key"]
[network]
default = "ask"
ベストプラクティス
- 厳格に始める — すべての操作タイプに
askをデフォルトとして使用 - 段階的に自動承認を追加 — 頻繁に実行し信頼するコマンドのみ
- トレースをレビュー — 定期的に監査ログを確認
- 書き込みを自動承認しない — ファイル変更には承認を必要とする
- バイパスモードに注意 — バイパスモードでは ApprovalRequired が直接実行されるため、現在のタスクを信頼していることを確認
監査
すべてのツール呼び出しは ToolCallStarted と ToolCallCompleted イベントを生成し、セッションのトレースに記録されます。シェル呼び出しはセッションエリアに shell: <command> 形式で表示され、完了ブロックには簡潔な出力サマリーが含まれます。