はじめに
本記事は、AI エージェント(Claude Code)を「秘書」にする取り組みを、プライベートで5日間(2026-09-29〜10-03)試した記録です。
業務では、すでに AI エージェントを開発作業に使っています。
ただ、メールや税金の手続きまで任せる「秘書」のような使い方は、機密情報が絡むので業務ではまだ踏み込めていません。
同じように、セキュリティが気になって一歩を踏み出せない人も多いのではないでしょうか。
そこで、自宅サーバー・メール・ふるさと納税・家族写真まわりの雑務を、まず自分の生活で任せてみることにしました。
この記事では、
- 秘書のような使い方をプライベートで試した理由
- エージェントに「させないこと」をどう決めたか(権限設定・hook・ローカル専用の Git・秘密情報の置き場)
- 実際に任せた雑務と、人が判断を残した場面
- 業務へ持ち込める仕組みと、まだ持ち込まないもの
といった点を中心に書いています。
何を任せたかより「何をさせないようにしたか」を中心にしたのは、業務に持ち込むときも、まずそこを説明できる必要があると考えているためです。
環境
| 項目 | 内容 |
|---|---|
| エージェント | Claude Code(デスクトップアプリと CLI) |
| プランとモデル | Claude の Pro プラン、モデルは Claude Opus 5.5(コスパが良い!) |
| PC | Windows 11、コマンドは Git Bash で実行 |
| 自宅サーバー | Proxmox 上の LXC コンテナ(写真ストレージ・ファイルストレージ・ゲームサーバーなど) |
| 外部サービス | Gmail(コネクタで接続)、LINE と Discord(通知用) |
プライベートで試した理由
理由は3つあります。
1つ目はリスクです。
業務のメールや社内の文書を、秘書としてエージェントに読ませるのは、まだリスクが高いと判断しました。
何か起きたときに影響が会社や取引先へ及ぶうえ、試行錯誤の失敗も許されにくい環境です。
プライベートなら、失敗しても被害は自分の中で収まります。
それでいて扱うものはメール・税金・サーバー・家族の写真と本物なので、守りの仕組みを考える練習としては業務と変わらないと思います。
2つ目は、逆転の発想です。
「仕事が忙しいなら、プライベートのほうを効率化すればいいのでは!?」
メールの整理やふるさと納税の手続き、毎日の細かい定期作業をエージェントに任せられれば、その分だけ家族と過ごす時間が増えます。
3つ目は、Remote Control を使ってみたかったからです。
Claude Code の Remote Control は、手元の PC で動いているセッションを、スマホなどほかの端末から操作できる機能です。
業務上は制限されていて使えないので、プライベートで思いきり使ってみたかった!というのが正直なところです。
実際、この記事の原稿も、スマホから確認しながら仕上げています。
最初に作ったのは「させないこと」の仕組み
最初の依頼は、
- このフォルダを AI エージェントの作業場所にしたい
- 自宅サーバーのノウハウを置きたい
- GitHub CLI を使えるようにしたい
の3つでした。
ただ、いきなり作業させるのはやめて、エージェントが毎回読む指示書と、させない操作の仕組みから作りました。
指示書を1か所にまとめる
共通のルールは AGENTS.md に置き、Claude Code が読む CLAUDE.md は @AGENTS.md で読み込むだけにしました。
ほかのエージェントに乗り換えても、同じ指示書をそのまま使えます。
指示書には、
- 日本語で応対する。音声入力の誤変換は、前後の文脈から解釈する
- サーバーの設定変更・再起動・更新は、実行前にユーザーへ確認する
- メールの送信・削除、強制 push など元に戻せない操作は、対象と内容を見せて承認を得る
- 秘密情報は
secrets/にまとめ、文書には保管場所だけを書く
といったルールを書いています。
権限設定で読めない・聞かずに実行できない操作を作る
指示書はあくまでお願いなので、守られない可能性があります。
そこで Claude Code の権限設定(.claude/settings.json の permissions)でも同じ線を引きました。
{
"permissions": {
"ask": [
"Bash(git remote add:*)",
"Bash(git push:*)",
"Bash(gh repo create:*)",
"Bash(ssh:*)",
"Bash(scp:*)"
],
"deny": [
"Read(~/.ssh/**)",
"Read(secrets/**)",
"Read(.env)",
"Read(*.env)"
]
}
}
deny に書いたファイルは、エージェントが読もうとしても拒否されます。
SSH の鍵や API キーは、そもそもエージェントの目に入らないようにしました。
ask に書いたコマンドは、実行のたびに承認ダイアログが出ます。
サーバーへの SSH も、外部へのデータの持ち出しにつながる git push も、私が内容を見てから通します。
作業場所の Git はローカル専用にする
作業場所には IP アドレスや設定の詳細が集まるので、GitHub などのリモートへは上げないと決めました。
git push を承認制にしたうえで、Git の pre-push フックで push を常に拒否しています。
#!/bin/sh
# このリポジトリは認証情報・IP 情報を含むローカル専用リポジトリ。push を常に拒否する。
echo "このリポジトリはローカル専用のため push を拒否しました(.git/hooks/pre-push)。" >&2
exit 1
承認ダイアログで私がうっかり許可しても、ここで止まります。
元に戻せない操作は hook で止める
権限設定はコマンドの先頭一致で判定するので、git reset --hard のようなオプションの違いや、Gmail の送信のような MCP ツールの呼び出しは書き分けにくいところがあります。
そこで Claude Code の hook(ツールを実行する直前に任意のスクリプトを走らせる仕組み)で、次の2つを用意しました。
| hook | 止めるもの |
|---|---|
irreversible-guard.py |
メールの送信・返信・転送・削除などの MCP ツール、強制 push、git reset --hard、git clean -f、git branch -D
|
check-outbound.sh |
他人の GitHub リポジトリへの gh での書き込み(Issue・PR・コメント) |
irreversible-guard.py は、ツール名の末尾に send reply forward delete trash などが含まれていたら承認を求めます。
抜粋するとこうなります。
MCP_PATTERN = re.compile(r"send|reply|forward|delete|trash|purge|unsubscribe", re.I)
def ask(reason: str) -> None:
print(json.dumps({
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "ask",
"permissionDecisionReason": reason,
}
}, ensure_ascii=False))
sys.exit(0)
permissionDecision に ask を返すと、権限設定で許可済みのコマンドでも承認ダイアログが出ます。
決めた範囲の中で任せたこと
守りを固めてから、実際の雑務を任せていきました。
どの作業にも、最後は人が判断する場面を残しています。
自宅サーバーの障害調査
「写真ストレージにつながらない」という症状を調べてもらったところ、VPN(Tailscale)の鍵の期限切れが原因でした。
再ログイン、鍵の期限の無効化、Tailscale と写真管理アプリ(Immich)の更新までを、1件ずつ内容を見て承認しながら進めました。
途中で、台帳に載っていないコンテナが1台動いているのをエージェントが見つけたので、停止しました。
あわせて、サーバー側の SSH を鍵認証のみ・LAN からのみに絞っています。
メールの整理
Gmail はコネクタでつなぎ、分類とレポート、配信停止の候補出しまでを任せました。
フィルタは XML で書き出してもらい、Gmail への取り込みは自分で行っています。
止めておいてよかったと感じたのは、整理を終えてお知らせメールの配信停止に取りかかったときです。
配信停止には、不要なメールの削除や、停止を申し込むメールの送信が伴います。
どちらも元に戻せない操作なので、指示書のルールと hook によって、実行の前に必ず承認ダイアログが出ました。
ふるさと納税の計画
ふるさと納税は、家族構成や控除から適正な寄附額を試算するところから始めました。
返礼品は、前年の寄附先を踏まえて、ワンストップ特例が使える5自治体以内に収まるよう候補を絞ってもらい、最後は自分で決めて寄附しています。
寄附したあとの申請も、期限や自治体ごとの手続きの違いを記録に残し、案内が届いたらすぐ頼める状態にしてあります。
毎日の定期作業
毎朝決まった時間に動く定型の画面操作や、その日に撮った写真から家族アルバムに上げる候補を選んで LINE で知らせる作業を、定期実行にしました。
アルバムへのアップロードそのものは自分でしています。
無人で動かすと、承認ダイアログで止まってしまいます。
そこで、定期実行で使うスクリプトだけを permissions.allow に足しました。
{
"permissions": {
"allow": [
"Bash(python photos/mitene/mitene.py:*)",
"Bash(python tools/line/notify.py:*)",
"Bash(python tools/runlog/runlog.py:*)"
]
}
}
この許可設定は、エージェント自身には書き換えさせていません。
足したいときは差分を出してもらい、私が手で反映します。
結果を見る場所と通知
結果は、自宅サーバーに置いたレポートサイト(VPN の中からだけ見られる静的 HTML)にまとめています。
定期実行の完了とエラーは Discord に送り、対応が必要なものだけ LINE で知らせます。
LINE の宛先は自分だけです。
レポートサイトの変化
レポートサイトも、使いながら形を変えてきました。
最初は1ページだけで、定型作業の記録とレポートの題名を並べていました(10/2 21:50)。
その後、ページを用途ごとに分け、見た目も暗めのホログラム調にしました。
いまのホームでは、日付ごとに横スワイプでその日のレポートと定期実行の状況を切り替えられます(10/3)。
定期実行は、予定の件数に対していくつ終わったかを出しています。
画面の左上にある EDITH は、秘書に付けた名前1。
どちらの版も、私が「こう見たい」と伝えてエージェントが作り直したものです。
サーバーへの送信もスクリプトに任せていますが、送り先は VPN の中の自宅サーバーだけにしています。
この仕組みにも抜けはある
hook はツール名やコマンド文字列のパターンで判定しているので、別名や間接的な実行は検出できません。
スクリプトの冒頭にも「誤操作を減らす補助策であり、セキュリティ境界ではない」と書いています。
そのため、指示書・権限設定・hook の3つを重ねています。
指示書には「hook が出なくても、元に戻せない操作は承認を得る」とも書きました。
どれか1つが抜けても、ほかで止まる形にしています。
使いながら育てる
5日間で、コミットは119件になりました。
そのうち36件は、指示書・ルール・スキル・hook を書き足したり直したりしたコミットです。
ワークスペースはモノレポにする
ワークスペースは、1つのリポジトリにまとめたモノレポの形にしています。
自宅サーバーの構成もメールの整理ルールも記事の原稿も同じ場所にあるので、どの作業で分かったことも同じ指示書へ戻せます。
主なフォルダは次のとおりです。
workspace/
├── AGENTS.md エージェント共通の指示書
├── CLAUDE.md Claude Code 用の補足(@AGENTS.md を読み込む)
├── .claude/ ルール・スキル・hook・権限設定
├── servers/ 自宅サーバーの構成(サーバーごとのリポジトリを clone)
├── gmail/ メールのラベル構成・振り分けフィルタ
├── tax/ ふるさと納税の記録
├── photos/ 家族アルバムの候補選びなど、毎日の定期作業
├── tools/ 通知・実行記録などの共通の道具
├── reports/ レポートサイトの原本と生成スクリプト
├── articles/ 技術記事の原稿(この記事もここで書いた)
└── secrets/ API キーなど(Git の管理外。エージェントは読めない)
コンテキストを複利で積み上げる
この形は、みのるんさんの書籍『[みのるん式]ビジネスパーソンのためのClaude Code仕事術』(技術評論社)にある、コンテキストを複利のように積み上げていく考え方を参考にしています。
作業のたびに分かったことを指示書へ戻しておけば、次の作業はその分だけ説明が少なくて済みます。
細かく知りたい人は、ぜひ書籍を読んでみてください。
具体的には、
- 指摘や失敗は、その場で指示書やルールのファイルへ反映する(学習ループ)
- 音声入力の誤変換(「クローズ」→「Claude」、「イメージ」→「Immich」など)は表にして毎回読ませる
- 通知のように、ほかの作業でも使えそうな仕組みは共通の道具として切り出す
といった運用をしています。
設定は、みのるんさんが公開している Claude Code の設定(minorun365/my-claude-code-settings)も参考にさせてもらいました。
最初から全部を自分で考えなくて大丈夫だと思います。
業務へ持ち込むときに使えるもの
業務では、Docker Sandboxes(AI エージェントを、ホストから切り離した使い捨ての microVM の中で動かす Docker の機能)を導入し、その中にモノレポのワークスペースを作って開発作業をしています。
プライベートで作った仕組みのうち、次の3つはそこへそのまま置き換えられますし、実際に使っています。
| プライベートで作ったもの | 業務での置き換え |
|---|---|
| 指示書と権限設定でまとめた作業場所 | Docker Sandboxes の中に作ったモノレポのワークスペース |
| 指摘をその場で指示書へ戻す学習ループ | 業務のワークスペースでも同じ運用を回す |
| AI の生成物を HTML のレポートに整形 | レビューしやすい形で成果物を出す |
一方で、外部ツールとの連携は、業務ではまだ導入していません。
プライベートでは Gmail・LINE・Discord とつなぎましたが、業務で同じことをすると、機密情報やお客様の情報がエージェントの手の届くところに入ってきます。
配信停止のときのように送信や削除の前で止める仕組みは作れますが、機密情報を扱う以上、ここはもう少し慎重に考えるつもりです。
おわりに
秘書のような使い方を業務で試すのが不安なら、まず自分の生活で試してみるのがおすすめです。
失敗しても影響は自分で受け止められますし、浮いた時間は家族との時間に回せます。
そして、そのあいだに「エージェントに何をさせないか」を決めて、仕組みにした経験が手元に残ります。
業務で秘書のような使い方を提案するときも、この経験がそのまま説明の軸になると感じています。
参考
- Claude Code の権限設定(公式ドキュメント)
- Claude Code の hooks(公式ドキュメント)
- Claude Code の Remote Control(公式ドキュメント)
- [みのるん式]ビジネスパーソンのためのClaude Code仕事術(技術評論社)
- minorun365/my-claude-code-settings
-
映画『スパイダーマン:ファー・フロム・ホーム』で、トニー・スターク(アイアンマン)がピーター・パーカーに遺した AI の名前から取りました。私がアイアンマンを好きなので。 ↩

