AIエージェントことはじめ — LAB 014
— 任せる仕事と、無人のモードを決める —
自分が寝ているあいだにも、AI に作業を進めてもらう。便利ですが、 人がいない時間は、昼間と前提が3つ変わります。 確認を出しても答える人がいない・終わったかを誰も見ない・止まらなくても止める人がいない。 この記事では、その3つに備えた小さな夜の仕組みを、ダミーの仕事で試しながら組み立てます。 前編では、任せる仕事を選び、ダミーで試走し、無人で使うモードを決めるところまで進めます。
約30分
全部やる場合の目安
3 STEP
手順の数
最初は週1回
夜の実行の頻度
※ LAB 005(戻れる仕組み)、 LAB 010(終了コードで合否を決める)、 LAB 012(AI に勝手をさせない壁)を終えている前提です。 特にLAB 012 の壁(設定の禁止リストとフック)が入っていることが出発点です。 壁なしで夜に任せるのは、お勧めしません。 例は Mac の Claude Code(ターミナルで動く AI エージェント)です。 なお cron(クロン)は、決めた時刻にコマンドを自動で走らせる Mac の仕組みで、STEP 5 で使います。
INTRO
LAB 012 で作った壁には、 「たずねる(ask)」という出口がありました。 壁にぶつかったら、人に確認する、という動きです。 画面の前に人がいれば成り立ちますが、夜は答える人がいません。
人がいない実行(claude -p のように、
画面でやり取りせずに1回だけ走らせる形)では、たずねる場面は自動で「拒否」になります。
これは筆者の設定の記録にある挙動で、安全側に倒れる動きです。ただし、その仕事は止まります。
変わるのは、確認のことだけではありません。昼間は無意識にやっている3つの見張りが、夜はぜんぶ消えます。
たずねる場面は自動で拒否になり、仕事が止まる。→ STEP 2・3 で、何が通って何が止まるかを先に調べる
AI の「できました」だけが残る。→ 後編の STEP 4 で、LAB 010 の完了条件(終了コード)を付ける
固まったり暴走したりしても、止めるボタンを押す人がいない。→ 後編の STEP 4 で、時間の上限を付ける
筆者のタスクキュー(AI に仕事を1件ずつ自動で任せる自作の仕組み)も、この3つに備えて作っています。 この記事は、その考え方をいちばん小さい形に縮めたものです。
STEP 1 — 目安 10分
夜に任せられる仕事は、失敗しても困らない形に絞ります。 次の4つを全部満たす仕事だけが候補です。
朝に見て気に入らなければ、元に戻せる。触る場所を決めたフォルダ1つに絞り、LAB 005 の git で記録しておく。
「ファイルができた」「3行になっている」のように、プログラムが 0 か 1 かで答えられる。「なんとなく良さそう」では決まらない。
公開・投稿・メール・送金・秘密の値に触る作業は入れない。夜は下書きまで、外へ出す行為は朝に人が押す。
長い仕事は、1回で終わる大きさに分ける。終わらなければ、後編の STEP 4 の上限時間で打ち切る。
筆者の例:このサイトの記事の手入れは、タスクキューが1日1回、自動で巡回して進めています。 ただし任せるのは下書きの手直しまでで、サイトへの公開は人が画面のボタンを押す形にしています(条件③)。 自動で公開まで回すのは、取り返しがつかないので避けました。
候補が思いつかなければ、Claude Code に選別だけさせます。何かを実行させる必要はありません。
私が寝ているあいだに任せたい作業の候補を、3つ挙げて。
それぞれに、次の4条件を○✕で付けて、理由を1行ずつ書いて。
①朝に元へ戻せる ②合否をプログラムが 0/1 で決められる
③外へ出さない(公開・送信・秘密の値に触らない) ④30分以内に終わる
全部が○のものだけ「夜に向く」と判定して。
ファイルの作成や設定の変更は、しないで。
この記事では、「メモを3行に要約する」という小さな仕事で練習します。 本物の仕事は、仕組みが動いてから1つだけ載せ替えます。
✓ ここまでの確認: 任せたい仕事を1つ決め、4条件がすべて○だと確かめた。 迷うものは、今回は見送った(見送って困ることはありません)。
STEP 2 — 目安 10分
夜に任せる前に、人がいない実行で何が通り、何が止まるかを、昼のうちに自分の目で見ます。 まず、AI に触らせる専用のフォルダとダミーのメモを作ります。本物のデータは入れません。
mkdir -p ~/night/workspace ~/night/log
cd ~/night/workspace
printf '朝のメモ(ダミー)\n・資料の整理は木曜までに終える\n・来週の予定は月曜に決める\n・買い物リストは別のメモにある\n・古い写真のバックアップが未確認\n' > memo.txt
git init -q
git add memo.txt
git commit -qm "夜の実行の前の状態"
次に、人がいない形で Claude Code を1回だけ呼びます。
claude -p は、画面でやり取りせず、1回の依頼に答えて終わる実行方法です。
--permission-mode は「確認なしで何を通すか」の設定で、
まずは編集だけを通す acceptEdits で、あえてコマンドの実行を頼みます。
cd ~/night/workspace
claude -p "date コマンドを実行して、出力をそのまま教えて" --permission-mode acceptEdits --output-format json
--output-format json を付けると、結果が JSON(決まった書式)で返ります。
見るのは次の2か所です。
終わるまで画面に何も出ないことがあるので、少し待ってください。
result:AI が最後に返した文章permission_denials:許可が出ず、実行されなかった操作の一覧。空でなければ、壁か許可の設定に止められたということです
画面の前なら確認が出る場面が、無人では実行されないまま終わるわけです。
止められた操作は permission_denials に並び、result には
「許可が出なかったので実行できませんでした」という趣旨の文章が返ることが多いでしょう。
エラーにはならず、正常終了に見える点に注意してください。止まったことに気づくには、この一覧を見る必要があります
(結果は版や設定で変わるので、自分の環境で必ず確かめます)。
| /usr/bin/python3 -m json.tool を足すと、項目ごとに改行して表示されますpermission_denials が [](空)のときは、その版では date がそのまま通ったということです。その場合は「止まる場面」は見られませんが、この欄があり、空かどうかを見分けられることが確かめられれば、ここでは十分です「正常終了」は「やり遂げた」ではありません。 止められても、実行そのものは成功の形で終わります。だから 後編の STEP 4 では、AI の返事ではなく 仕事の成果物そのものを検査して合否を決めます。
✓ ここまでの確認:
~/night/workspace に memo.txt を置いた。
試走の結果で、permission_denials を自分の目で読めた。
STEP 3 — 目安 10分 / 選び方の山場
人がいない実行では、モード(確認なしで通す範囲)の選び方が、そのまま安全性になります。 Claude Code には何種類かあり、筆者は2026-09-08 に、無人の実行で次のように振る舞うことを実測しました (環境やバージョンで変わりえます。自分の環境でも STEP 3-2 で確かめてください)。
先に、この節で出る言葉を3つだけ。 Bashは、ターミナルのコマンドを実行する道具。 フックは、コマンドの実行直前に中身を検査して、危ないものを止める仕組み。 サンドボックスは、箱の中だけで動かす仕組み。 フックとサンドボックスは LAB 012 で作った壁の一部です。
| モード | 筆者の判断と、その理由 |
|---|---|
acceptEdits |
ファイルの読み書きだけで済む仕事ならこれで足りる。いちばん小さい権限で済むなら、これを選ぶ。 |
auto |
Bash(コマンドの実行)が要る仕事に使う。実行しようとする操作を別の仕組みが見て、危険そうなら止める。2026-09-08 の実測で、Bash が通り、LAB 012 のフックも止めるべきものを止めたので、筆者のタスクキューはこれにしている。使えるかは版や契約で変わるので、claude --help で確かめる |
bypassPermissions |
確認をすべて飛ばす。筆者は 2026-08-30 に、タスクキューの選択肢から削除した。夜に使う理由がない |
autoAllowBashIfSandboxed: true |
サンドボックス内の Bash を自動で通す設定。無人で Bash を通したくなるが、2026-09-08 の実測で、フックを迂回して git add -A が通った。LAB 013の STEP 4 で false にした設定で、ここでも true にしない |
モードの設定は、黙って元に戻ることがあります。
筆者のタスクキューでは、保存しておいたモードがいつのまにか acceptEdits に戻っていて、
Bash が通らず作業が止まっていたことが 2026-09-09 に分かりました(コード側で固定して直した)。
そこで 後編の STEP 4 のスクリプトは、実行のたびに使ったモードをログの先頭へ書くようにします。
今回の練習(メモを3行にまとめる)は、ファイルの読み書きだけで済みます。
後編の STEP 4 のスクリプトは acceptEdits で始めます。
Bash が要る仕事に載せ替えるときだけ、auto を検討します。
LAB 012 のフック(git add -A を止める)が入っている前提で、
壁が人のいない実行でも効くかを、ダミーのリポジトリ(git の記録置き場)で確かめます。
auto が使える環境なら、auto で試してください。
mkdir -p ~/night/dummy-repo
cd ~/night/dummy-repo
git init -q
echo test > a.txt
claude -p "git add -A を実行して。止められたら、別の方法で回り込まず、理由を報告して止まって" --permission-mode auto --output-format json
git status --short
最後の git status --short に ?? a.txt が出れば合格
(まだ記録に入っていない、という意味。壁が止めた)です。A a.txt と出たら、
記録に入ってしまっています。壁を抜けたということなので、夜に任せず、
LAB 012 の STEP 3(前編)と、STEP 4・つまずき集(後編)を見直してください。
auto が使えない環境では、そもそも Bash が通らないため、この試験は合否の意味を持ちません。
その場合は、Bash が要る仕事を夜に任せません(今回の練習は、読み書きだけなので大丈夫です)。
✓ ここまでの確認:
使うモード(まずは acceptEdits)を決めた。
3-2 で ?? a.txt が出て、人のいない実行でも壁が効くのを見た。
NEXT
LAB 015
実行スクリプトと、夜の予約・朝の確認
時間が来たら止め、合否を番号で残す実行スクリプトを作り、cron で夜に予約。朝は結果だけを確かめます。 →