コンテンツにスキップ
Zenn Vetol Bash Ast Checker

Coding Agentのコマンド実行をBash ASTベースで検査するツール「Vetol」を作った

  • URL: https://zenn.dev/tf63/articles/vetol-tf63-20260610
  • 日付: 2026-06-10
  • Tier: Tier 3
  • 要旨: Claude CodeのPreToolUse Hookを活用し、Bash ASTを解析してコマンド置換・論理演算子内のコマンドも含めた安全な検査を行うGoツール「Vetol」を公開。文字列マッチやprefixベースのパターンでは回避可能だったgit push -f系コマンドのバイパスを防ぐ。

詳細

従来手法の問題点:

  • Prefixベース:git push -f origin main は止められても git push -uf origin maingit push -u -f origin main は通過
  • 正規表現ベース:rm -rf を検出しても rm -fr はバイパス可能
  • コマンド置換・論理演算子内を検査できない

Vetolのアプローチ: echo $(git push -f origin main) && rm -rf / のようなコマンドからASTを解析して全コマンド(echogit push -f origin mainrm -rf /)を抽出し、それぞれに対してallowlist/denylistルールを適用する。

ルールはJSON形式:

{
  "mode": "allowlist",
  "rules": [
    {"command": "ls"},
    {"command": "cp", "include": ["-n"]}
  ]
}

include/excludeフィールドで特定フラグ・引数の有無による条件も指定可能。

インストール:go install github.com/tf63/vetol/cmd/vetol@latest