AIを動かす環境とコスト 第2回
YES ボタンの押し疲れを減らす。お風呂の間も作業を止めない方法

この記事でわかること
- 確認を減らす順番(許可のルール → 通知 → スマホから答える)
- CDP とは何か、自分のページで試した例と、ポートの危険
- 他社のサービスの画面を自動で押さない理由と、全部飛ばす設定の危険
確認した環境: Claude Code 2.1.296 / Chrome 152 / puppeteer-core 25.13.0 / 撮影は編集部の検証環境(Linux)/ 2026年10月12日に確認
AI のコーディングの道具は、ファイルを書き換えたりコマンドを動かしたりする前に、確認の画面を出します。確認が出るたびに「Yes」を押す必要があるので、長い作業の間も画面の前を離れられません。この記事では、確認の画面を減らす方法と、席を外しても答えられる方法を、各社の公式の仕組みで順に説明します。ブラウザをプログラムから操作する CDP の仕組みと、使ってよい場面・いけない場面もまとめました。
確認の画面が出る理由
Claude Code の manual モードでは、ファイルの編集、シェルのコマンド、ネットワークへの接続の前に、ほとんどの場合で止まって確認します(公式のドキュメントより)。確認の画面は、AI が思わぬ操作をする前に、あなたが止められるようにするための仕組みです。
編集部が manual モードで「kakeibo.py を実行して、費目ごとの合計を教えてください」と頼むと、次の確認が出ました。

選択肢は 4 つです。
| 選択肢 | 動き |
|---|---|
| 1. Yes | 今回だけ実行する |
| 2. Yes, and don't ask again for: … | 実行して、同じコマンドを次からたずねない(ルールとして保存される) |
| 3. Yes, and switch to auto mode | 実行して、auto モードに切り替える |
| 4. No | 実行しない |
確認を減らす方法は、いくつもあります。ただし、確認をまるごと飛ばすと、確認が守っていたものもなくなります。編集部は、次の順番で試すことを勧めます。

① 任せる範囲を決める: 権限モードと許可のルール
auto モードに任せる
Claude Code は、v2.1.283 以降、何も設定しなければ auto モードで始まります。auto モードでは、実行の前に別の AI(分類器)が操作を確かめ、依頼の範囲を超える操作などを止めます。分類器が通した操作は、あなたへの確認なしで進むので、確認の画面が減ります。
上の画面の「3. Yes, and switch to auto mode」を選ぶと、その場で auto モードに切り替わります。
モードの違いと切り替え方は、権限モードを使い分けるで説明しています。
「次からたずねない」は、ルールとして保存される
上の画面で「2. Yes, and don't ask again for: python3 kakeibo.py」を選ぶと、Claude Code はコマンドを実行し、許可のルールをファイルに書きました。Git のリポジトリの中で使ったので、リポジトリのいちばん上の .claude/settings.local.json に保存されています。

公式のドキュメントによると、ルールとして保存されるのは、Bash のコマンドと WebFetch(Web のページの取得)のドメインの許可です。ファイルの編集の許可は保存されず、そのセッション(Claude Code を起動している間)だけ有効です。
よく使う操作は、settings.json に書いておく
確認の画面で毎回選ぶ代わりに、ルールを先に書いておくこともできます。編集部は、試しのフォルダの .claude/settings.json(チームで共有する設定)に、次のように書きました。
{
"permissions": {
"allow": [
"Bash(git diff *)",
"Bash(git commit *)"
],
"ask": [
"Bash(git push *)"
],
"deny": [
"Read(./.env)",
"Read(./.env.*)"
]
}
}
- allow: 確認なしで実行する(差分を見る・コミットする)
- ask: いつも確認する(プッシュする)
- deny: 使わせない(パスワードなどを書く
.envのファイルを読ませない)
ルールは deny → ask → allow の順に調べられ、最初に一致したものが使われます。どこかの設定ファイルで deny にしたものは、ほかの設定ファイルの allow では許可できません。* は「どんな文字でもよい」という意味です。
/permissions でルールを確かめる
/permissions と入力すると、いま効いているルールを一覧で見られます。

左右のキーでタブを切り替えると、Ask に Bash(git push *)、Deny に .env を読ませない 2 つのルールが表示されました。ルールを選んで Enter を押すと、どの設定ファイルから来たルールかが表示され(Bash(python3 kakeibo.py) は「From project local settings」)、そのまま消すこともできます。Recently denied のタブには、auto モードが止めた操作が記録されます。
② 確認が出たら、知らせてもらう(hooks)
確認を減らしても、ゼロにはなりません。確認が出たときに知らせてもらえば、画面の前で待つ必要がなくなります。
hooks(フック)は、Claude Code の決まったタイミングで、自動で動く仕組みです。確認や入力を待っているときは、Notification というイベントが起きます。matcher で、どの種類のときに動かすかを選べます。
| 種類(matcher) | 起きるとき(公式のドキュメントより) |
|---|---|
permission_prompt |
確認の画面が出て、約 6 秒たったとき |
idle_prompt |
返事が終わって約 60 秒、何も入力していないとき |
ターミナルで使っているときは、どちらも、あなたが画面から離れているように見えるときだけ起きます。
通知の送り方(公式の案内)
- OS の通知: hooks で、macOS は
osascript、Linux はnotify-send、Windows は PowerShell のコマンドを動かす例が、公式のガイドに載っています。ただしnotify-sendは、画面のないサーバーや SSH の接続、ほとんどのコンテナでは使えないと注意されています。 - ターミナルの通知: Claude Code は、Ghostty・Kitty・iTerm2 では、既定でデスクトップの通知を出します。ほかのターミナルでは、設定の
preferredNotifChannelを"terminal_bell"にすると、ベルを鳴らせます。SSH でつないでいても、通知は手元の PC に届きます。VS Code の中のターミナルなど、デスクトップの通知を受け取らないところでは、hooks かベルを使うよう案内されています。 - ほかのサービスへ送る: hooks には、決まった URL に JSON(決まった形の文字のデータ)を送る
httpの種類もあります。公式のドキュメントは、Notification の hooks を「通知を外部のサービスに転送するような用途」に向くとしています。 - スマホへのプッシュ通知: 次の章の Remote Control を使います。
試してみた: 確認が出たら、自作のページに知らせる
編集部の検証環境は画面のないサーバーなので、http の hooks で、自作のテスト用のページ(通知の受け口)に送ってみました。.claude/settings.json に、次の部分を足しています。
{
"hooks": {
"Notification": [
{
"matcher": "permission_prompt|idle_prompt",
"hooks": [
{ "type": "http", "url": "http://127.0.0.1:3298/notify" }
]
}
]
}
}
/hooks と入力すると、設定したフックの一覧が表示されます。この画面は見るだけのもので、足したり変えたりするときは settings.json を書き換えます。
![Hooks、1 hook on 1 event、This menu is read-only. To add or change a hook, edit settings.json or ask Claude. の文と、Notification の下に [Project] http://127.0.0.1:3298/notify permission_prompt|idle_prompt · http が表示されている](/articles/approval-fatigue/05-hooks.webp)
そのあと、ファイルの編集を頼んで確認の画面を出し、何も押さずに待つと、数秒後に受け口のページに通知が届きました(公式の説明では約 6 秒)。

この受け口は、同じサーバーの中だけで動かした試しのページです。実際に使うときは、自分が使っているチャットやメールのサービスの公式の受け口(Webhook など)に送ります。そのときは、送り先のサービスの使い方の決まりも確かめてください。
フックで許可を返すこともできる(PermissionRequest)
PermissionRequest のフックは、確認の画面が出る前に動き、許可(allow)か拒否(deny)を返せます。ただし、deny と ask のルールはそのまま調べられるので、フックが allow を返しても、deny のルールに一致する操作は止まります。公式のガイドは、matcher をできるだけ狭くするよう注意しています。空にすると、ファイルの書き込みもシェルのコマンドも、すべての確認が自動で許可されるためです。決まった許可や拒否は、フックより許可のルールで書くよう案内されています。
③ 席を外しても答える: Remote Control
Remote Control は、自分の PC やサーバーで動いている Claude Code のセッションに、スマホの Claude のアプリ(iOS・Android)や、ブラウザの claude.ai/code からつなぐ機能です。作業は自分の PC の中で動いたままで、スマホやブラウザは、その画面をのぞく窓になります。確認の画面にも、スマホから答えられます。

- 使える条件: Pro・Max・Team・Enterprise のプランで、claude.ai のアカウントでログインしていること。API キーでは使えません。Team と Enterprise では、管理者が先に有効にします。
- 始め方: 作業するフォルダで
claude remote-controlを動かすか、起動のときにclaude --remote-controlを付けるか、動いているセッションで/remote-controlと入力します。表示される URL を開くか、QR コード(claude remote-controlではスペースキーで表示)をスマホで読み取ると、つながります。Claude のアプリの Code タブの一覧から選ぶこともできます。 - プッシュ通知: スマホに Claude のアプリを入れ、Claude Code と同じアカウントでログインします。ターミナルで
/configを開き、「Push when actions required」(確認や質問が出たとき)か「Push when Claude decides」(Claude が判断したとき)をオンにします。 - 確認は、答えるまで待つ: 公式のドキュメントによると、Remote Control でつないでいる間、確認の画面と質問は、答えるまで開いたままになります。
- 通信の向き: 手元の Claude Code は外向きの HTTPS だけを使い、受け付けのポートを開けません。つないでいる間は、会話の記録が Anthropic のサーバーに保存されます。
- 止めない: PC やサーバー、
claudeのプロセスは動かしたままにします。サーバーでは、SSH を切っても続くように tmux か screen の中で起動するよう案内されています。
編集部の検証環境の Claude Code は API キーで動かしているため、Remote Control は試していません。この章は、公式のドキュメントの説明です。
席を外す前に、① の auto モードと許可のルールで確認を減らしておき、Remote Control とプッシュ通知をオンにしておけば、残った確認が出たときだけ、スマホで答えられます。お風呂に入る間に作業を任せたいときも、この組み合わせが向いています。
④ Codex と GitHub Copilot の同じ設定
確認を減らす、知らせてもらう、スマホから答える、の 3 つは、Codex と GitHub Copilot にもあります。

Codex
-
確認を減らす:
/permissionsで「Approve for me」を選ぶと、承認が要る操作を、人の代わりに別のレビュー役のエージェントが確かめます。できることの範囲は「Ask for approval」と同じで、危険度がとても高い操作は断られます。レビューのために AI を余分に呼ぶので、使う量が増えることがあります。設定ファイルではapprovals_reviewer = "auto_review"と書きます。 -
知らせてもらう: 設定ファイル(
~/.codex/config.toml)のnotifyで、作業のひと区切り(agent-turn-complete)ごとに外部のプログラムを動かせます。画面の中の通知は[tui]のnotificationsで、承認を求めたとき(approval-requested)などに絞れます。notify = ["python3", "/path/to/notify.py"] [tui] notifications = ["agent-turn-complete", "approval-requested"] -
スマホから答える: ChatGPT の iOS 版のアプリから、つないだ PC の Codex の作業を見たり、承認したりできます。動かす側は、macOS か Windows の ChatGPT のデスクトップアプリです。デスクトップアプリの Settings > Connections > Control this Mac or PC から始め、表示された QR コードをスマホで読み取ります。Codex の CLI や IDE の拡張機能からは始められません。
GitHub Copilot
-
確認を減らす: VS Code のチャットの権限は、Manual permissions(既定)・Assisted permissions(AI が判断する)・Allow all の 3 段階です。ターミナルのコマンドは、設定の
chat.tools.terminal.autoApproveに、確認なしで動かすものを書けます。公式の例は次のとおりです。{ // Allow the `mkdir` command "mkdir": true, // Allow `git status` and commands starting with `git show` "/^git (status|show\\b.*)$/": true, // Always require approval for the `del` command "del": false, // Always require approval for commands containing "dangerous" "/dangerous/": false }falseは「確認を求める」という意味で、コマンドを止めるものではありません。公式のドキュメントは、ターミナルの自動承認は便利のための仕組みで、安全の境目ではないと注意しています。Copilot CLI では、--allow-toolで確認なしで使う道具を、--deny-toolで使わせない道具を指定します。--deny-toolが優先されます。 -
知らせてもらう: VS Code の設定の
chat.notifyWindowOnConfirmationで、確認が要るときに OS の通知を出せます。既定は、VS Code のウィンドウを見ていないときだけ通知します。 -
スマホから答える: Copilot CLI のセッションで
/remote onと入力するか、--remoteを付けて起動すると、GitHub.com や GitHub Mobile から、道具・ファイル・URL の許可の依頼に答えられます。対話のセッションだけで使えます。
確認をすべて飛ばす設定の危険
どの道具にも、確認をすべて飛ばす設定があります。各社の公式のドキュメントは、どれも強く注意しています。
- Claude Code の bypass permissions(
--dangerously-skip-permissions): インターネットにつながらないコンテナや VM(仮想マシン)など、隔離した環境だけで使うよう案内されています。プロンプトインジェクション(読み込んだ文章に紛れた指示に、AI が従ってしまうこと)や思わぬ操作を防がないとも書かれています。Linux と macOS では、root や sudo で使おうとすると起動しません。 - Codex の
--dangerously-bypass-approvals-and-sandbox(別名--yolo): サンドボックスも承認もなくなります。外側で守られた環境の中だけで使うよう案内されています。 - GitHub Copilot の Allow all と Autopilot: ファイルの編集、ターミナルのコマンド、外部の道具の呼び出しを、確認なしで進めます。Copilot CLI の
--allow-all-toolsも、あなたと同じ権限で、どのシェルのコマンドでも確認なしで動かせるようになると注意されています。
隔離したコンテナの中でも、Claude Code のログインの情報など、コンテナの中にあるものは持ち出されるおそれがあると、公式のドキュメントは書いています。席を外すために使う設定ではありません。
CDP とは
ここからは、ブラウザをプログラムから操作する仕組みの話です。「確認の画面のボタンを、プログラムで押せないか」と考える人もいるかもしれません。その仕組みと、使ってよい場面を説明します。
CDP(Chrome DevTools Protocol)は、Chrome などのブラウザを、外のプログラムから調べたり操作したりするための取り決めです。公式のページは「debug and automation targets」(デバッグや自動操作の対象)と、信頼できるクライアントをつなぐ、JSON の取り決めだと説明しています。
- 使っている道具: Chrome の開発者ツールのほか、Puppeteer(ブラウザを動かす JavaScript のライブラリ。Chrome は既定で CDP で動かす)や ChromeDriver が使っています。Playwright にも、CDP で動いている Chrome につなぐ
connectOverCDPがあります(Playwright 独自のつなぎ方より再現性が低い、という注意つき)。 - つなぎ方: Chrome を
--remote-debugging-port=9222のように起動すると、Chrome の中に小さなサーバーが立ちます。/json/versionを開くと、つなぐ先(webSocketDebuggerUrl)が分かり、そこへ WebSocket(つないだまま双方向にやり取りする通信)でつないで、JSON の命令を送ります。 - 直接は使わない: 公式のページは、CDP は公開してサポートしている API ではなく、ほかの会社の道具は CDP に直接つながずに Puppeteer などを使うよう求めています。

リモートデバッグのポートを外に開けると危ない
- CDP は強い権限の操作をたくさん持っているので、つなぐ側は信頼できる前提になっています(公式のページ)。
- Chrome DevTools の公式の GitHub にある chrome-devtools-mcp の文書は、ポートを開けると、同じ PC のどのアプリもつないでブラウザを操作できるので、開けている間は大事なサイトを見ないよう注意しています。
- Chrome 136 からは、ふだん使いのプロフィール(ログインの情報などが入ったフォルダ)では、
--remote-debugging-portが効かなくなりました。リモートデバッグを使って、クッキー(ログインの状態を覚えておくデータ)を盗む攻撃が増えたためです。使うときは、--user-data-dirで専用のフォルダを指定します。
ポートは 127.0.0.1(その PC の中)だけで待ち受け、インターネットや社内の回線に開けないでください。使い終わったら、Chrome を閉じます。
自分のページで試してみた
編集部は、自分で作ったテスト用のページ「作業の承認」を、同じサーバーの中(127.0.0.1)だけで動かしました。「はい」と「いいえ」のボタンがあり、押すと時刻つきの記録が残るページです。Chrome は、127.0.0.1 の 9333 番でリモートデバッグを待ち受け、専用のプロフィールのフォルダを使う設定で起動しています。
台本は、Puppeteer の puppeteer-core を使って、次のように書きました。
// 自分で作ったテスト用のページの「はい」を、CDP で押す
import puppeteer from "puppeteer-core";
// 1. リモートデバッグのポートで動いている Chrome につなぐ
const browser = await puppeteer.connect({ browserURL: "http://127.0.0.1:9333" });
// 2. 新しいタブで、自分のテスト用のページを開く
const page = await browser.newPage();
await page.setViewport({ width: 760, height: 560, deviceScaleFactor: 2 });
await page.goto("http://127.0.0.1:3298/approve", { waitUntil: "networkidle0" });
console.log("開いたページ:", await page.title());
await page.screenshot({ path: "before.png" });
// 3. 「はい」のボタンを押して、ページの表示を読む
await page.click("#yes");
await page.waitForFunction(() => document.querySelector("#result").textContent !== "");
console.log("ページの表示:", await page.$eval("#result", (el) => el.textContent));
await page.screenshot({ path: "after.png" });
// 4. タブを閉じて、接続を切る(Chrome は動いたまま)
await page.close();
await browser.disconnect();
ターミナルで、ポートの待ち受けの場所と Chrome の情報を確かめてから、台本を動かしました。


このように、自分で作ったページや自分の環境なら、CDP(Puppeteer)で操作を自動にできます。自分の Web アプリの動きを、ボタンを押すところから確かめるテストなどに使えます。
他社のサービスの画面を、自動で押さない理由
同じ方法で、AI のサービスの Web の画面に出る確認のボタンを、自動で押す台本も書けてしまいます。編集部は、その方法を紹介しません。理由は 2 つです。
- 利用規約に反するおそれがある: たとえば Anthropic の Consumer Terms of Service(2025年10月8日発効)は、API キーで使う場合や Anthropic が明示的に許した場合を除き、ボットやスクリプトなど、人ではない自動の手段でサービスを使うことを禁じています。ほかの会社のサービスにも、それぞれ利用規約があります。自動化を考えるときは、先にその規約を読んでください。
- 確認を全部飛ばすのと同じになる: 確認の画面に何が出ても押してしまう台本は、前の章の「確認をすべて飛ばす設定」と同じ危険を持ちます。確認の画面は、あなたが中身を見て判断するためのものなので、自動で押すと、その判断がなくなります。
席を外しても答えたいときは、この記事の ① から ③ の公式の仕組み(許可のルール、通知、Remote Control)を使います。
方法を比べる

確認の画面は、AI に任せる範囲を、あなたが決めるための仕組みです。押す回数を減らすときも、確認がなくなる範囲を自分で決めて、公式の仕組みの中で減らしてください。
次の回では、Claude Code をサブスクと API のどちらで使うと得かを、編集部のサーバーの記録で計算します(Claude Code のサブスクと API、どちらが得か 編集部の実測で計算)。
参考にした公式の情報
- Claude Code ドキュメント(権限モード)
- Claude Code ドキュメント(許可のルール)
- Claude Code ドキュメント(hooks のガイド)
- Claude Code ドキュメント(hooks のリファレンス)
- Claude Code ドキュメント(ターミナルの設定・通知)
- Claude Code ドキュメント(Remote Control)
- Claude Code ドキュメント(スマホで使う)
- Claude Code ドキュメント(channels)
- Codex ドキュメント「Agent approvals & security」
- Codex ドキュメント「Advanced Configuration」(通知)
- Codex ドキュメント(スマホで使う)
- Visual Studio Code ドキュメント(承認と権限)
- Visual Studio Code ドキュメント(AI の設定の一覧)
- GitHub Docs「About GitHub Copilot CLI」
- GitHub Docs「About remote control of Copilot CLI sessions」
- Chrome DevTools Protocol(公式のページ)
- Chrome for Developers ブログ「Changes to remote debugging switches to improve security」
- Chrome DevTools MCP のドキュメント(リモートデバッグのポートの注意)
- Puppeteer ドキュメント「What is Puppeteer?」
- Playwright ドキュメント(BrowserType の connectOverCDP)
- Anthropic「Consumer Terms of Service」
この記事は、ハック!でAI編集部が AI を使って執筆しました。画面の画像は、編集部の検証環境で実際に操作して撮影したものです(引用の画像は出典を記載しています)。内容の誤りはお問い合わせからお知らせください。
連載
AIを動かす環境とコスト全 6 回の目次
- 1サーバーで AI を動かすメリットとは? VPS で使う code-server
- 2YES ボタンの押し疲れを減らす。お風呂の間も作業を止めない方法(この記事)
- 3Claude Code のサブスクと API、どちらが得か 編集部の実測で計算
- 4クラウド vs VPS。AI の時代に VPS でクラウドは超えられるのか
- 5Web はレンタルサーバーで十分。足りなくなる 4 つの場面
- 6自作で脱 SaaS はできる? 作りやすいものと難しいもの