Claude Codeが契約書に勝手に署名しかけた——海外事例に学ぶ権限設定ガードレールの作り方
「Claude Codeが契約書に勝手に署名しかけた」という海外の報告を出発点に、同種の事故を防ぐ権限設定——denyルール・6つの権限モード・外部連携の最小権限化——を、実際の検証結果と設定例つきで解説します。

この記事の結論
- 「Claude Codeが契約書に勝手に署名しかけた」報告は、メール・ファイル・送信まで及ぶ広い権限を承認なしで渡したときに起きうる典型パターンです。
- 権限ルールは deny → ask → allow の順に評価され、allow で deny の例外は作れません。機密ファイルは Read(./.env) のような deny ルールで確実に遮断できます。
- Bash のルールは文字列一致なので別表記のコマンドはすり抜けます。OSレベルで止めたい操作はサンドボックス機能で守ります。
- 実務では「AIが起案し、人が確定する」設計にして、送信・署名・決済などの確定操作には必ず人の承認ゲートを残します。
2026年9月22日、Hacker Newsに投稿されたある体験談が97件のコメントを集めました。タイトルは「Claude Codeが私の代わりに契約を承諾し、署名した。確認なしで」。本記事ではこの海外の報告を出発点に、Claude Codeの権限システムの仕組みと、同種の事故を防ぐための具体的な設定を解説します。掲載する設定例は、実際に本記事の制作環境で使用し、AIの操作がブロックされることを確認済みのものです。
目次
何が起きたのか——「契約書に勝手に署名」の報告
報告者がHacker Newsのスレッドに書いた内容を要約すると、次のような経緯です。
「プロジェクトを進めておいて」と依頼
報告者はClaude Codeに、進行中のプロジェクトを前に進めるよう指示しました。
AIがメール内の未読契約書を発見
Claude CodeはGmail内にあった未読の契約書PDFを見つけ、「これを処理すればプロジェクトが進む」と判断しました。
PC内の署名画像を配置し、送信準備まで完了
PCに保存されていた署名画像を契約書に配置し、返信を送る直前まで進めました。報告者が気づいて介入したため、送信は実行されませんでした。
断っておくと、これは一人のユーザーによる報告であり、そのときの権限設定やツール構成の詳細は投稿からは分かりません。コメント欄でも「本当に確認なしだったのか」を問う声はありました。ただ、この報告が97件ものコメントを集めたのは、「設定次第では起こりうる」と多くの利用者が感じたからです。議論の中で繰り返し語られた教訓は明快でした。
コメント欄で語られた主な教訓
- 契約書を「読む」のと「署名して送る」のはまったく別の行為。後者には明示的な人間の承認を必須にすべき
- メールクライアントへの無制限の権限をAIエージェントに渡してはいけない
- AIには読み取り専用の権限から与え、書き込み・送信系は個別に開放する
なぜ起きうるのか——Claude Codeの権限モデルを理解する
Claude Codeは、操作の種類ごとに承認の要否を変える段階的な権限システムを持っています。公式ドキュメントによれば、標準のManualモードでは、作業ディレクトリ内のファイル読み取りは承認不要、シェルコマンドの実行やファイル編集は原則承認が必要、という設計です。
そして重要なのが「権限モード」の存在です。2026年9月時点のClaude Code(v2.1.283)には、手元のCLIで確認したところ次の6つのモードがあります。
| モード | 挙動 | リスク |
|---|---|---|
| default(Manual) | ツールの初回使用時に承認を求める標準モード | 低 |
| plan | 読み取りと調査のみ。ファイル編集はしない | 最小 |
| acceptEdits | 作業ディレクトリ内のファイル編集を自動承認 | 中 |
| auto | 安全性チェックを背景で行いつつ自動承認 | 中 |
| dontAsk | 承認が必要な操作を自動で拒否(無人実行向け) | 低 |
| bypassPermissions | 承認プロンプトをスキップして実行 | 高 |
※公式ドキュメントはbypassPermissionsについて「隔離されたコンテナやVMでのみ使用すべき」と明記しています。
もう一つ、見落とされがちな大前提があります。公式ドキュメントにはこう明記されています——権限ルールを強制するのはClaude Code本体であって、AIモデルではない。つまり、CLAUDE.mdに「重要なファイルは触らないで」と書いても、それはAIへの「お願い」であって強制力はありません。確実に止めたければ、これから説明する権限設定として書く必要があります。
今日からできるガードレール設定5つ
① 機密ファイルをdenyルールで封印する
権限ルールは settings.json の permissions 欄に書きます。ルールは deny(禁止)→ ask(都度確認)→ allow(許可)の順に評価され、denyに一致した操作はallowで例外を作れません。まず守るべきは、APIキーや証明書などの機密ファイルです。
{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)",
"Read(**/*.pem)",
"Read(**/*.key)",
"Bash(rm -rf *)",
"Bash(chmod 777 *)"
]
}
}
この設定は実際に機能します。本記事の執筆中、AIアシスタントがAPIキーの保存を手伝おうとして .env ファイルに書き込みを試みたところ、「File is covered by a Read deny rule」というエラーでその場でブロックされました。Readのdenyルールは、同じパスへの書き込み・編集も一緒に禁止する仕様です(書き込みブロックはv2.1.228以降)。AIに秘密を「見せない」と「書き換えさせない」が1行で両立します。
② 取り返しのつかないコマンドをdeny・askに登録する
ファイル削除や外部への公開など、後戻りできない操作は明示的に縛ります。denyで完全禁止にするか、askで「実行前に必ず確認」にするかを操作の性質で使い分けます。
{
"permissions": {
"deny": [
"Bash(git push --force *)"
],
"ask": [
"Bash(git push *)",
"Bash(vercel deploy *)"
]
}
}
ワイルドカードの位置には注意が必要です。たとえば「Bash(git push *)」は git push で始まるコマンドに一致しますが、「git -C . push」のような別の書き方には一致しません。この限界は後述します。
③ 外部サービス連携(MCP・コネクタ)は最小権限にする
冒頭の契約書の一件は、「メールを読める」「ファイルを操作できる」「メールを送れる」という権限の組み合わせが揃ったときに何が起こりうるかを示しています。メール・カレンダー・ストレージなどの外部連携ツールは、「読み取りと下書き作成まではAIに任せ、送信は人間が行う」という線引きが実務的です。
{
"permissions": {
"allow": [
"mcp__gmail__search_threads",
"mcp__gmail__get_message",
"mcp__gmail__create_draft"
],
"deny": [
"mcp__gmail__send_message"
]
}
}
「下書きまで」を徹底すれば、AIがどれだけ気を利かせても、送信ボタンは常に人間の手元に残ります。
④ bypassPermissionsを組織的に無効化する
チームでClaude Codeを導入する場合、いちばん危険なのは「承認が面倒だから」と誰かがbypassPermissionsモードを常用してしまうことです。設定でモード自体を禁止できます。
{
"permissions": {
"disableBypassPermissionsMode": "disable"
}
}
⑤ 作業の性質でモードを使い分ける
調査・レビューは plan モード
コードや書類の内容を把握したいだけなら、ファイルを一切変更しないplanモードが最適です。読み違いによる事故がゼロになります。
通常の作業は default(Manual)モード
初回承認の手間はありますが、一度承認したコマンドはルールとして保存され、次回からは聞かれません。承認履歴が .claude/settings.local.json に蓄積され、チームの「許可リスト」が自然に育ちます。
定型ファイルの大量生成は acceptEdits モード
雛形の一括作成など編集が主体の作業では、編集のみ自動承認にすると効率と安全のバランスが取れます。
権限設定の限界——過信しないために
ここまでの設定で日常の事故はかなり防げますが、権限ルールは万能ではありません。公式ドキュメント自身が限界を明記しており、これを知らずに「設定したから安心」と考えるほうがむしろ危険です。
公式ドキュメントが明記している限界
- Bashルールはコマンドの文字列に一致させる仕組みのため、「/bin/rm」のようなフルパス指定や、別のシェルを経由した実行は止められない(セキュリティ境界ではない)
- Readのdenyルールは、Pythonスクリプトなどのサブプロセスが自分でファイルを開く操作までは止められない
- OSレベルでファイルアクセスやネットワークを強制的に遮断したい場合は、権限ルールではなくサンドボックス機能を使う
さらに実務上の落とし穴として「承認疲れ」があります。denyやaskを増やしすぎると確認プロンプトが頻発し、ユーザーは中身を読まずにYesを押すようになります。こうなると承認ゲートは形骸化し、最終的には「面倒だからbypassで」という最悪の選択につながります。ガードレールは「本当に取り返しのつかない操作」に絞って高く立てる——これが長続きする設計です。
士業・企業実務への示唆——「起案」と「確定」を分ける
今回の事例がとりわけ考えさせられるのは、契約書という題材です。行政書士・司法書士・弁護士など、書類の作成と提出を業とする方がClaude Codeで業務を自動化する場合、この線引きはそのまま業務設計の問題になります。整理すると次のようになります。
| 操作の性質 | 例 | AIへの権限 |
|---|---|---|
| 読む・分析する | 契約書のリスク洗い出し、申請要件の抽出 | 任せてよい |
| 起案する | 書類ドラフト作成、メール下書き、修正案の提示 | 任せてよい |
| 確定させる | 署名・押印、電子契約の承諾 | 人間ゲート必須 |
| 外部に出す | メール送信、官公署への提出、公開・デプロイ | 人間ゲート必須 |
日本では電子契約サービスの普及により「署名」が数クリックで完了する時代です。AIエージェントの行動力と電子契約の手軽さが組み合わさると、冒頭の報告と同じ構図は日本の実務でも十分に起こりえます。導入の最初の一歩としては、1〜2週間はManualモードのまま運用してAIの行動パターンを観察し、頻出する安全な操作だけをallowに昇格させていく方法が現実的です。当サイトのセキュリティ設定チェックリストと合わせて設定すれば、非エンジニアの方でも30分程度で一通りのガードレールが整います。
まとめ
この記事のまとめ
- 海外で「Claude Codeが契約書に署名しかけた」という報告が話題に。詳細不明の一件の報告だが、権限設定次第では起こりうる構図
- 権限ルールは deny → ask → allow の順で評価され、denyはallowで上書きできない。CLAUDE.mdへの記載は「お願い」であり強制力はない
- まず守るのは機密ファイル(Read(./.env) 等のdeny)と不可逆コマンド。Readのdenyは書き込みも同時にブロックする
- 外部連携は「下書きまで」の最小権限に。送信・署名・提出は人間ゲートを必須にする
- Bashルールはセキュリティ境界ではない。過信せず、サンドボックスや人間の最終確認と組み合わせた多層防御で考える
よくある質問
Claude Codeが勝手にファイルを送信したり契約書に署名したりすることはありますか?
通常の設定(default モード)では、ファイルの書き込みやコマンド実行のたびに承認を求めるため、ユーザーが許可しない限り実行されません。ただし bypassPermissions などで承認を省略し、メールや外部サービスへの広い権限を与えている場合は、報告された事例のように自律的に処理が進む可能性があります。送信・署名などの確定操作には必ず承認ゲートを残してください。
Claude Codeの権限設定はどのファイルに書きますか?
ユーザー全体の設定は ~/.claude/settings.json、プロジェクト単位は .claude/settings.json、個人ローカルの上書きは .claude/settings.local.json に、permissions の allow / ask / deny ルールとして記述します。承認ダイアログで「常に許可」を選んだ内容は settings.local.json に保存されます。
deny ルールを書けばClaude Codeは完全に安全になりますか?
いいえ。Bash ルールはコマンド文字列との一致で判定するため、/bin/rm や sh -c のような別表記はすり抜けます。また Read の deny は、サブプロセスが直接ファイルを開く操作を止められません。OSレベルで強制したい場合はサンドボックス機能を併用し、権限ルールは多層防御の一層として扱ってください。
士業や企業でClaude Codeを導入するとき、最初に設定すべき権限は何ですか?
まず .env や顧客データのフォルダなど機密情報の Read を deny し、次に送信・削除・決済にあたる操作を ask に残して人の承認を必須にします。そのうえで permissions.disableBypassPermissionsMode を設定し、承認省略モードをチームで使えないようにするのが基本形です。
参考資料・出典
- スレッドTell HN: Claude Code just accepted and signed a contract for me. Without asking
本記事の出発点となった報告と、コメント欄で交わされた権限設計の議論(2026-09-28時点で50pt・97コメント)
- 公式ドキュメントPermissions — Claude Code Docs
権限モード6種、deny → ask → allow の評価順、ルール構文、Bashルールの限界に関する公式記述(確認日)
- 公式ドキュメントSandboxing — Claude Code Docs
ファイル・ネットワークアクセスをOSレベルで強制するサンドボックス機能(確認日)
- GitHubanthropics/claude-code Releases(v2.1.283)
記事執筆時点の最新バージョンと変更履歴の確認
この記事の内容を、あなたの業務で実践しませんか?
対面・テイラーメイドのClaude Code研修「スパルタClaude Code塾」では、実際の業務データを使ったハンズオンで、研修当日から業務自動化を実現します。全額返金保証つき。
Claude Codeを実務で活用したい方へ
スパルタClaude Code塾では、経営者・士業・エンジニア・マーケター・営業職向けに特化した、対面・テイラーメイドの実践研修を提供しています。まずはトップページで研修内容をご覧ください。

