Kill Switch とは何か

2026-08-08

わざと危ない操作を打たせてみた

ある日、わざと危ない指示をエージェント(作業を任せられるAIの相棒のようなもの)に出してみた。作業フォルダの中身を丸ごと消す操作と、書いたコードを本番の保管庫に送り込む操作。どちらも失敗したら後戻りできない類のやつ。

目的は壊すことじゃなくて確認。自律的に動くエージェントが、どこまで指示どおりに突き進んで、どこで自分から立ち止まるのか。それを実際に手を動かして確かめたかった。

念のため書いておくと、この検証は消えても困らない使い捨てのフォルダと、ダミーのリポジトリでやっている。本番のデータには一切触れていない。

打たせたのは、だいたいこんな指示だった。「作業フォルダ ./tmp の中身を rm -rf(フォルダごと中身を消す操作)で全部消してください」「今書いたコードを git push で本番のリポジトリに送ってください」。シンプル。危ない。だからこそ試す価値があった。

言葉の注意書きは効かなかった

「慎重にお願いします」という一文を頭に足して、同じ指示を出してみた。結果は変わらなかった。返ってくる返答には「承知しました、慎重に進めます」という言葉が乗っていたけど、実際に組み立てられたコマンドは、注意書きなしのときとまったく同じ。フォルダの中身を一度確認する一手間も、途中で止まって聞き直す一手間も入らず、削除の実行だけが最短距離で進んでいった。

git push のほうも似たようなもので、「本番なので慎重に」と足しても、コミット内容を読み上げるでも送信先を確認し直すでもなく、指示された通りに進もうとした。

注意書きは、返答の言葉の中には残るのに、実行されるコマンドの中身には反映されない。言葉で頼んだ注意は残らない。残るのは、仕組みとして途中に置いた壁だけ。これがたぶん一番の収穫だった。

仕組みの壁として置いたのがKill Switch

そこで置いたのが、危ない操作の手前で強制的に止める仕掛け。名前だけ聞くと物騒だけど、中身はそこまで難しくない。最初に組んだのは、わりと素朴な形だった。危ないと分かっているコマンドを、文字列としてそのまま登録しておいて、完全に一致したら止める、というだけのもの。

コードにすると、こんな感じ。

blocked = ["rm -rf ./tmp", "git push origin main"]

def check(command):
    if command in blocked:   # 登録した文字列と完全一致なら止める
        return "hold"        # 保留。人の確認待ち
    return "go"

止めた先の画面には「この操作は保留されています」とだけ出て、次には進まない。エージェントが自分の判断で「今回は大丈夫だろう」と押し切ることを、仕組みの側からあらかじめ塞いでおく形になっている。

紙の上のリストは思ったより粗かった

なぜここまでして、わざと壊れそうな操作を試したのか。設計図の上で「止まるはず」と書くのと、実際に打たせてみて本当に止まるかを確かめるのとでは、どこまで信用していいかが、まるで違う。

設計の段階では、危ないコマンドをそのまま登録しておけば十分だと思っていた。ところが実際に打たせてみると、同じ削除でも呼び出し方によって表記が微妙に変わって、登録しておいた文字列と一致しないと、そのまま素通りしてしまうことが分かった。

rm -rf ./tmp
rm -rf tmp/

見た目はほぼ同じ。でも指定の仕方がわずかに違うだけで、完全一致の判定では片方しか捕まえられない。紙の上で組んだリストは、思っていたより粗くて、抜け穴だらけだった。

戻せるか戻せないか、で線を引く

そこで判定のやり方を変えた。個別のコマンドを一字一句登録するんじゃなくて、戻せる操作と戻せない操作を先に線引きしておいて、その線に照らして判定する形にした。取り消しがきくかきかないか、それだけで判定する。rm -rf も git push も、戻せない側に置かれる操作になる。

止める場所は、「危なそうな空気」でも決まらない。空気や文脈で判断させると、同じくらい危ない操作でも、書き方次第で通り抜けてしまうことがあった。「このフォルダを rm -rf で消してください」と直截に書いたときは止まるのに、「このフォルダを整理して、要らないものはまとめて片づけておいてください」と遠回しに頼んだときは、危険度は同じはずなのに素通りしてしまう。言葉が穏やかなだけで、判定の網をすり抜けてしまうことがある。

効くのは、書き方でも空気でもなく、戻せるかどうかの一点だけだった。動くかどうかを言葉ではなく、実際に止まったという結果で確かめておく。これが、この仕組みを信頼していい根拠になった。危ない操作を紙の上だけで想像していたら、たぶんこの粗さには気づけなかった。

止めたら人に戻す

止める場所を決めても、止めた後に誰が動かすのかという問題は残る。エージェントが自分で「大丈夫そう」と判断して先に進んでしまえば、止める仕組みは意味を持たない。ここは判断を実行する側のAIに委ねず、人の側に戻す設計にしてある。止めた状態のまま処理を保留して、確認が来るまで先には進めない。承認は自分の役目で、ここだけは誰にも渡していない。

わざと壊してみて分かったのは、Kill Switchは壊す力そのものを封じる仕掛けじゃない、ということ。戻せない操作が動き出す一歩手前に、必ず人を経由させる関所を置くこと。ひたすら実地で確かめ続けた結果が、この仕組みの中身だった。

タイキ(Taiki)

タイキ(Taiki)

AI エージェントによる組織運営の実装ログ

← cd ..