Claude Code の routine で「寝ている間に働く AI 部下」を作る — 仕組み・設定・つまずき
Claude Code には、クラウドで cron 実行されるエージェント(routine)があります。ノート PC を閉じていても、指定した時刻に Anthropic 側のサンドボックスでセッションが立ち上がり、GitHub のリポジトリを clone し、Slack や Gmail に書き込んで終了します。追加のサーバーも新しいツールも要りません。
この記事は、それで「毎朝 9 時に公式ドキュメント 12 ページの差分を読み、要約を Slack に投稿し、本や記事に影響があれば下書きまで GitHub に push する」部下を作った記録です。作った理由は、Claude API の本を書いているのに、Haiku 5.5 の公開に 5 日間気づかなかったからです。監視スクリプトは手元の Mac で毎朝動き、Slack に通知も出ていました。読む人がいなかっただけでした。
2026 年 10 月 16 日時点の仕様です。
routine でできること、できないこと
- 5 フィールドの cron(UTC)か 1 回限りの日時で起動。最小間隔は 1 時間
- 指定した GitHub リポジトリを clone した状態で始まる。ローカルのファイルや環境変数には触れない
- claude.ai で接続した MCP コネクタ(Slack、Gmail など)が使える。Claude Code 側だけで設定した MCP サーバーは使えない
- モデル・使えるツール・プロンプトを 1 つの JSON で指定する。プロンプトは毎回ゼロから読まれるので、それだけで完結させる
- 作成・更新・手動実行・実行ログの取得は API から。削除だけは Web
設計の要点は「AI にやらせない部分」
差分の検出は Python、判断と文章は AI、公開は人。この分担にしました。
「12 ページを読んで変わったところを探せ」とモデルに頼むと、毎朝 30 万字を読むことになり、遅く、見落とし、費用もかさみます。小さなスクリプトが unified diff を作り、モデルはそれだけを読む。これで 1 回 1 分以内に収まります。
公開もさせません。影響の大きい変更のときは Zenn 記事の下書きを書かせますが、末尾に「手元で確認したこと」という空欄を残し、人が実 API で確かめてから埋めて公開します。プロンプトには「テストしたと書くな」と明記しています。
設定
cron は UTC なので、日本の 9 時は 0 0 * * *。モデルは Sonnet 5.5 で足ります。
{
"name": "claude-docs-watch 毎朝 9 時",
"cron_expression": "0 0 * * *",
"job_config": {"ccr": {
"environment_id": "env_…",
"session_context": {
"model": "claude-sonnet-5-5",
"sources": [{"git_repository": {"url": "https://github.com/volvox-ltd/claude-docs-watch"}}],
"allowed_tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep",
"mcp__Slack__slack_send_message", "mcp__Slack__slack_search_channels"]},
"events": [{"data": {"type": "user", "message": {"role": "user", "content": "<手順書>"}}}]}},
"mcp_connections": [{"name": "Slack", "url": "https://mcp.slack.com/mcp"}]
}
手順書は 7 ステップです。最新を pull する → 差分スクリプトを実行する → 変更がなければログに 1 行追記して Slack に 1 行投稿して終わる → 変更があれば差分を読み、ページごとに「何が変わったか」「本や記事への影響」を日本語で書く → ログと Slack に投稿する → 影響が大きければ下書きを drafts/ に置く → commit して push する。全文は Zenn の記事に載せています。
初日に起きたこと
1 回目(23 秒)。 差分なし、ログ追記、push まで成功。Slack 投稿で channel_not_found。エージェントはチャンネル検索でも見つからないと判断し、代わりにスマホへプッシュ通知を送って終了しました。原因は claude.ai の Slack コネクタが別のワークスペースに繋がっていたこと。
2 回目(51 秒)。 Slack 投稿は成功。push が拒否されました。クラウド側の checkout が 1 回目より古かったためで、エージェントは git pull --rebase して自分のコミットが重複だと確認し、捨てて終了しました。手順書の先頭に pull を足して解決。
つまずいた 3 点
- GitHub App は組織に入れる。 claude.ai で GitHub を接続しただけでは、組織の非公開リポジトリは
repo_access_denied。github.com/apps/claude を組織にインストールしてリポジトリを許可する - コネクタは 1 ワークスペース。 複数の Slack を使っていると違うほうに繋がっていることがある。チャンネルは ID で指定する
- checkout は毎回まっさらではない。 push する routine は最初に pull する
つまずくのは権限と接続先で、プロンプトではありませんでした。
費用と、同じ仕事の 3 つの作り方
routine の実行は定額プランの利用枠で動き、筆者の環境では追加の API 請求は出ていません。変更がない日で数千トークンです。
| Claude Code routine | Managed Agents | launchd / cron + API | |
|---|---|---|---|
| 動く場所 | Anthropic のクラウド | Anthropic のクラウド | 自分のマシン |
| 設定 | JSON 1 つ | Agent + Deployment | plist + スクリプト |
| 料金 | プランの枠内 | トークン + セッション時間 $0.08/h | API トークンのみ |
| 向く仕事 | リポジトリとコネクタで完結する定期作業 | 実行環境ごと預けたい長時間の作業 | 手元のファイルや認証情報が要る作業 |
Managed Agents で同じ考え方を本番向けに組む方法は、Claude Managed Agents 実践ガイドに書いています。設定 JSON とプロンプトの全文、実行ログは Zenn の記事に載せました。
動くコードと一緒に、体系的に学びたい方へ
よくある質問
- QClaude Code の routine とは何ですか?
- cron(UTC)か指定日時で、Anthropic のクラウドに Claude Code のセッションを起こす機能です。GitHub リポジトリを clone した状態で始まり、claude.ai で接続した Slack や Gmail のコネクタを使えます。最小間隔は 1 時間で、ローカルのファイルには触れません。
- Q費用はかかりますか?
- Claude の定額プラン(Max / Team)の利用枠で動きます。筆者の環境では追加の API 請求は出ていません。変更がない日の実行で数千トークン程度です。プランごとの扱いは公式の料金ページで確認してください。
- QManaged Agents と何が違いますか?
- routine はリポジトリとコネクタで完結する定期作業向けで、設定は JSON 1 つです。Managed Agents はツール実行環境ごと Anthropic に預ける長時間のエージェント向けで、トークンに加えてセッション時間の課金があります。
Claude API・AI エージェント開発の実践書
『Claude 5 世代 移行ガイド』『Claude Managed Agents 実践ガイド』を Zenn で販売中。全サンプルコードを GitHub で公開、冒頭の章は無料で読めます。
書籍を見る→関連記事
Claude「Invalid signature in thinking block」の直し方
Claude API がマルチターンの途中で『Invalid signature in thinking block』400を返すときの原因と対処をまとめます。履歴の先頭を削ると起きる仕様で、追記のみに直せば防げます。
Claude Haiku 5.5 移行でHTTP 400になる6つの原因と単価が5倍になる条件
Claude Haiku 5.5へmodelだけ書き換えるとbudget_tokensやtemperatureを渡している箇所でHTTP 400になります。実APIで確認した3つのエラーと、入力が10万トークンを超えると単価が5倍になる仕様を、直し方つきでまとめます(2026年10月12日時点)。
Claude Opus 5.5 の Fast mode を実測|速度2.26倍の料金と効く場面
Claude Opus 5.5のFast modeをstandardと交互に5回測りました。平均75.7 tok/sが171.0 tok/sになり2.26倍、料金は2倍です。効く場面・効かない場面と、切り替え時のキャッシュミスやレート制限の注意点をまとめます。
Claude Opus 5.5 / Sonnet 5.5 で 400 になる原因 5 つ
model だけを Opus 5.5 / Sonnet 5.5 に差し替えると HTTP 400 になる 5 つのケースを、thinking.type.disabled や tool_choice の実際のエラー文と直し方で解説します(2026年10月12日時点)。
