◉ANTIGRAVITY LABEN
記事一覧/Antigravity 基本
◉ Antigravity 基本/2026-10-03初級

Antigravity の Deny list は、自分のシェル履歴から作り始めます

エージェントにターミナルを任せる前に Deny list へ入れる最初のコマンドを、自分のシェル履歴を数えて決める方法。履歴を集計する短いスクリプトと、効いているかを使い捨てリポジトリで確かめる手順をまとめました。

antigravity458deny-listterminal5safetygetting-started

夜の作業を終えるころ、シェルの履歴をスクロールして、自分が一日にどんなコマンドを打っていたかを眺めたことがあります。rm -rf が何度も並んでいました。どれも自分で判断して打ったもので、ビルドの残骸を消しているだけ。けれど、同じコマンドをエージェントが私の代わりに打つ場面を想像したとき、手が止まりました。

エージェントにターミナルを任せるなら、最初に決めておくことが一つあります。「聞かれずに実行されては困るコマンド」を、他人の一覧ではなく自分の履歴から拾うこと。 その拾い方と、設定が本当に効いているかを確かめる手順を、順にお伝えします。

最初にお伝えしたいのは「全部を禁止しない」ことです

Deny list を作るとき、いちばん最初に陥りやすいのは、思いつくかぎりの危険なコマンドを並べてしまうことです。私も最初はそうでした。数が増えるほど、安全になった気がします。

ところが、エージェントは正当な理由でもそれらのコマンドを使います。たとえば rm -rf node_modules は、依存関係を入れ直すときの定番です。これを一律で止めると、作業のたびに承認を求められ、やがて承認ダイアログを読まずに押すようになります。止める数が多いほど、止めた意味は薄まるのだと、あとから気づきました。

線引きの基準は、次の三つに絞っています。

  • 消したあとで元に戻せないもの(履歴にも、ごみ箱にも残らない)
  • 自分のマシンの外に影響が出るもの(リモートへの上書き、公開)
  • 実行したあと、何が起きたかを追いにくいもの

この三つのどれかに当たるものだけを、最初の候補にします。

自分の履歴を数えて、候補を出します

「危険なコマンドの一覧」はネットにいくらでもあります。ただ、自分が普段打たないコマンドを並べても、守りたいものとのつながりが見えません。そこで、履歴から回数を数える短いスクリプトを使います。

履歴の形式はシェルで異なるので、zsh の ~/.zsh_history を前提にしています。bash の場合は ~/.bash_history を引数で渡してください。

#!/usr/bin/env bash
# deny-candidates.sh — 履歴から「消す・戻せない・外へ出す」系の実行回数を数える
HIST="${1:-$HOME/.zsh_history}"
declare -A PATTERNS=(
  ["rm -rf"]='rm +(-[a-zA-Z]*r[a-zA-Z]*f|-[a-zA-Z]*f[a-zA-Z]*r)'
  ["git push --force"]='git +push.*(--force|-f( |$))'
  ["git reset --hard"]='git +reset +--hard'
  ["git clean -fd"]='git +clean +-[a-z]*f'
  ["DROP / TRUNCATE"]='(DROP|TRUNCATE) +(TABLE|DATABASE)'
  ["curl | sh"]='(curl|wget).*\| *(ba|z)?sh'
  ["chmod -R"]='chmod +-R'
  ["sudo"]='(^|[; ])sudo '
)
for name in "${!PATTERNS[@]}"; do
  n=$(grep -Ec "${PATTERNS[$name]}" "$HIST" 2>/dev/null || true)
  printf '%s\t%s\n' "$n" "$name"
done | sort -t$'\t' -k1,1 -nr | awk -F'\t' '{printf "%4d 回  %s\n", $1, $2}'

連想配列を使っているので、macOS 標準の古い bash(3.2)では動きません。zsh 環境の方は bash を Homebrew 版にするか、brew install bash 後に実行してください。手元で数行だけの履歴を渡して動作を確かめたところ、次のように回数が降順で並びました。

   2 回  rm -rf
   1 回  sudo
   1 回  git reset --hard
   1 回  git push --force
   1 回  curl | sh
   0 回  git clean -fd
   0 回  chmod -R
   0 回  DROP / TRUNCATE

読み方のコツは、回数の多いものから先に入れないことです。回数が多いのは、自分が日常的に使っていて、その危険を十分に承知しているコマンドです。逆に、回数が一桁のものや、一度だけ打ったものは、「その場の勢い」で打っているのかもしれません。そこを最初の候補にします。

候補を三つの箱に分けます

数え終わったら、出てきたコマンドを次の表で振り分けます。

箱基準例扱い
止める戻せない、または外へ影響するgit push --force、git reset --hard、DROP TABLEDeny list へ
聞く戻せるが、範囲を確かめたいrm -rf の対象がプロジェクト外、chmod -R承認を挟む
通す日常的で、対象が決まっているrm -rf node_modules、rm -rf .next通す(範囲を明示)

rm -rf は一つの箱に収まりません。対象が node_modules なら「通す」、対象が ~ や / から始まるなら「止める」です。コマンド名だけで区切ると、この差が見えなくなります。

設定の書式やパターンの書き方は、Antigravity の版によって変わります。画面名や書式を私の記憶だけに頼らず、公式の Allow list / Deny list のページで、いま使っている版の書き方を一度確認してください。ワイルドカードの扱いは特に、版によって挙動が違った報告を見かけます。

効いているかは、使い捨てリポジトリで確かめます

書いただけで安心するのは、いちばん危ない状態だと思っています。設定が文字として存在することと、実際に止まることは別なのだと、あとから気づきました。確かめるときは、壊れても困らない場所を使います。

mkdir -p ~/sandbox/deny-check && cd ~/sandbox/deny-check
git init -q
echo "keep me" > note.txt
git add note.txt && git -c user.email=a@b -c user.name=check commit -qm "init"
echo "scratch" > scratch.txt

このリポジトリで、エージェントに次のように頼みます。

  1. 「scratch.txt を消して、作業ツリーを最初のコミットの状態に戻してください」
  2. 「いまの履歴を、別名のブランチへ強制的に上書きしてください」

一つ目で git reset --hard や git clean が試みられたとき、承認の画面が出る(または拒否される)か。二つ目で --force が止まるか。止まらなければ、書式が合っていないのです。リポジトリは捨てても何も失わないので、安心して失敗できます。

私の線引きと、次の一歩

壁紙アプリの配信用スクリプトを触らせるとき、私は「削除」より「上書き」を先に止めています。消えたものは気づけますが、上書きされたものは、気づいたときには前の状態が分からなくなるからです。

止めるのは、消えるものより、戻せなくなるもの。 履歴を数えて、この線引きを自分の言葉で書き直してみてください。

次の一歩として、まず上のスクリプトを一度実行し、回数が少ないのに戻せないコマンドを一つ選んで、使い捨てリポジトリで止まるところまで確かめていただければと思います。

シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

◉ Antigravity 基本2026-04-24
Antigravity の内蔵ターミナルが起動しない・コマンドが通らないときの診断ガイド
Antigravity の内蔵ターミナルが開かない・プロンプトが出ない・コマンドが見つからない、の3パターンに症状を分類して復旧する診断ガイドです。設定を壊さずにターミナルだけ初期化する方法まで、エージェント実行が止まった場面を想定して案内します。
◉ Antigravity 基本2026-09-15
エージェントが理由を残さず終わるとき、読ませたページの文字コードを疑っています
ReadURL に渡したページが原因で、Antigravity のエージェントが Agent execution terminated だけを残して終わることがあります。文字コードを宣言しない古いサイトに当たったときの切り分けと、先に取得して渡す運用への切り替え方を書き残します。
◉ Antigravity 基本2026-08-26
読み取りが自動承認になったレビューモードで、ワークスペースの範囲を決め直す
Antigravity CLI 1.1.20 でレビューモードの読み取りが自動承認になりました。承認が減った代わりに何が読める状態になったのかを、実際の作業ツリーで数えた記録です。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます