AIが作業を加速させるにつれ、追いつくのがますます難しくなっています。Anthropicでは、シンプルなエージェント自動化を日常的に活用してサポートしています。多くの場合、それらはスケジュールに従って実行され、バックグラウンドでコンテキストを収集し、知っておくべきことを積極的に伝えてくれます。しかし、効果的なエージェント自動化を構築するのは困難です。誰も気づかないうちに情報源へのアクセスを失ったり、こちらの好みに従えなかったりすることがあるからです。
を使用して Claude Managed Agents (beta)では、カスタムソース(例:SlackやGitHubリポジトリ)をスケジュールに従って読み込み、前回の実行以降に何が変更されたかを追跡し、知っておくべき情報(例:Slackへ)を投稿するリファレンス実装を構築しました。この記事では、各ステップを順に説明し、リファレンス実装を共有するとともに、エージェントを自動で設定してくれるClaude Codeで実行できるコマンドを提供します。
コードを入手
リファレンス実装は こちら。インタラクティブなウォークスルーについては、Claude Codeで以下のコマンドを実行してください。 claude-api このスキルは、本記事のガイダンスに従ってエージェントのセットアップを支援できます:
/claude-api managed-agents-onboard https://claude.dev/blog/building-effective-agent-automations/
このリファレンス実装では、Slackアプリ(マニフェストから作成します)、および GitHub トークン提供されたファイル(以下に表示)は、エージェント、その環境、メモリストア、ボールト、デプロイを含む Claude API リソースの設定です。
CODETextdaily-brief/ ├── agent.md model, tools, instructions ├── deployment.md schedule, time zone, budget, input message ├── environment.yaml network allowlist ├── memory_store_preferences.yaml user preferences ├── memory_store_state.yaml the agent's bookmarks, ledger, notes, and run records ├── vault.yaml the vault that holds the credentials ├── claude-lock.json resource IDs, written by ant apply └── slack/manifest.yaml one bot app
ant applyは ant CLI のコマンドで、これらのファイルを読み込み、あなたの Claude API ワークスペース(プラットフォームがそれらを保存・実行する場所)にリソースを作成し、その ID を次に記録します: claude-lock.json.
このコマンドは、後のセクションでも使用します。一度設定すれば、オートメーションはAnthropicのインフラ上でスケジュールに従って実行されるため、あなたのマシンで何かを動かし続ける必要はありません。
概要
これから構築するエージェントには6つのコンポーネントがあり、この順番で説明します:
- ソース - 読むべき場所の名前付きリスト
- Destination - エージェントが書き込みを行う可能性のある1つの場所
- エージェント - agent.md 内のモデル、ツール、および実行ステップ
- Schedule - cronスケジュール
- メモリ - ユーザーの設定とエージェント自身のメモリ
- ガードレール - エージェントが読み取りのみを行う場合は読み取り専用アクセスに限定し、実行ごとに支出上限を設定

出典
エージェントは2つのデフォルトソースを読み取ります。SlackチャンネルとGitHubプルリクエストです。チャンネルとリポジトリはあなたの preferences ファイル。このテンプレートは、他のソースを使用するように拡張できます。

エージェントにスコープを限定した専用の認証情報を与える
とともに マネージドエージェント、認証情報は ボールト. エージェントはこれらの認証情報を参照できますが、実際の値はボールト内に残り、Claude のコードが実行されるサンドボックスの外に置かれます(参照: こちら および こちら):
-
MCPサーバー(GitHub)。 エージェントは、サンドボックスの外部で動作するプロキシを介してMCPツールを呼び出します。プロキシは、URLがサーバーのものと一致するボールト資格情報を見つけます。
-
シェル(Slack)。 エージェントはサンドボックス内のbashツールでcurlを使ってSlack APIを呼び出します。サンドボックスの中にあるのは不透明なプレースホルダーのみです。
$SLACK_BOT_TOKEN. リクエストがサンドボックスを出るとき、プラットフォームは許可したホストに対して実際のトークンに差し替えます。
ボールトを作成するには、 ant リポジトリ内のCLIとテンプレートファイル:
ant apply vault.yaml
これにより、Claude APIワークスペース内にボールトが作成され、プラットフォームがそこに保存し、そのIDを に記録します。 claude-lock.json。次に、各認証情報をボールトに以下のコマンドで追加します: TypeScript SDK。以下はSlackクレデンシャルの追加を示す例です。
const vaultId = process.env.VAULT_ID!; // the vault's ID, from claude-lock.json
await client.beta.vaults.credentials.create(vaultId, {
display_name: "SLACK_BOT_TOKEN",
auth: {
type: "environment_variable",
secret_name: "SLACK_BOT_TOKEN",
secret_value: process.env.SLACK_BOT_TOKEN!,
networking: { type: "limited", allowed_hosts: ["slack.com"] },
injection_location: { header: true },
},
});
ボールトを作成して各資格情報を追加した後、そのボールトをデプロイメントに接続します。ボールトIDを以下からコピーします claude-lock.json に vault_ids デプロイメントファイルで、 deployment.md.
前回の続きからお読みください
よくある間違いは、エージェントに「" のような固定ウィンドウを読ませることです。この24時間". 遅い実行では漏れが生じ、早い実行では項目が重複します。代わりに、エージェントにソースごとのしおりを持たせてください。各実行の最後に、エージェントが各ソースから読んだ最新の項目のタイムスタンプを1つのファイルに書き込みます。 bookmarks.json翻訳: 、ソースごとに1つのエントリがあります: "slack": "2026-09-14T13:02:11Z".
次回の実行はそれらのブックマークから開始されるため、その実行のウィンドウは前回の実行以降のすべてをカバーできるように伸縮します。ブックマークは次の場所に保存されます。 メモリーストア と呼ばれる state「: プラットフォームが毎回の実行のサンドボックスに、以下のパスの下でマウントするテキストファイルのフォルダです」 /mnt/memory/ 実行間で保持します。エージェントは通常のファイルツールでそれを読み書きし、 内の指示は agent.md それをありのままに伝える。
読み取りの失敗を静かな一日と間違えないでください
MCPサーバーがダウンしている、またはそのトークンの有効期限が切れている場合でも、実行は開始されますが、そのサーバーのツールなしで実行されます。セッションにはエラーが記録されますが、エージェントはそのソースから何も取得できず、「新しいものはありません」と報告します。
3ルール目に入ったところで agent.md これの修正にご協力ください。ソースが失敗した場合、エージェントは次のように動作します。そのソースのブックマークは元の位置にそのまま残し、他のソースからブリーフを作成し、読めなかったものを明記した1行("pull requests unavailable this run")でブリーフを締めくくることで、読者にその旨を伝えます。
目的地
私たちのテンプレートは1つのSlackチャンネルに投稿し、実行するたびに日付付きの投稿を行います。

エージェントはサンドボックス内のbashツールを使ってSlackに投稿します。この際、読み取りに使用しているのと同じボットトークンを使用します。
何も投稿を承認する必要はありません。エージェントはbashコマンドでそれを送信し、組み込みのbashツールはデフォルトでは承認を求めずに実行されます。 slack.com 「はエージェントの許可リストにも含まれています。」 環境、それが実行されるサンドボックスです。この投稿は1つのリクエストです:
curl -s https://slack.com/api/chat.postMessage \
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
-H "Content-Type: application/json; charset=utf-8" \
-d '{"channel": "C0123456789", "text": "Daily brief, Tue Sep 15 ..."}'
記録する前に投稿が届いたことを確認する
投稿が確認されると、エージェントは報告済み項目の台帳とブックマークを更新します。これらの記録が実際に投稿された内容と一致しない場合、2つの問題が起こり得ます。エージェントが実際には投稿されなかった項目を記録した場合、ブックマークは先へ進み、それらの項目は二度と報告されません。最初の投稿が成功したか確信が持てずに再投稿した場合、読者は同じブリーフを2回受け取ることになります。
開始から3ルール目 agent.md これを防ぐ仕組みです。まず、エージェントはチャンネルの最近のメッセージから今日のタイトルを探し、その号がすでに投稿されていれば投稿しません。次に、Slackが返信を返した場合にのみ、投稿は送信済みとみなされます。 "ok": true およびメッセージ ts。第三に、エージェントはその確認が行われた後にのみ、台帳とブックマークを更新します。結果が不明瞭な場合は、その実行を「maybe posted(投稿済みの可能性あり)」とマークし、それ以外は何も変更しないため、何も失われません。
エージェントはメモリストアに実行記録を保持します(runs/<date>.md`). これは、投稿前の実行を "posting" と表示し、その後メッセージ ID 付きで "posted"、あるいは "maybe posted" と表示します。
AGENT
Claude Managed Agentsでは、 エージェント はバージョン管理された構成です。モデル、システムプロンプト、そしてツールです。各実行は実行ステップに従い、停止します。

私たちのリファレンス実装では、エージェントの設定は以下の通りです。 agent.md:
---
name: Daily brief
model: claude-sonnet-5-5
mcp_servers:
- type: url
name: github
url: https://api.githubcopilot.com/mcp/
tools:
- type: agent_toolset_20260401
configs:
- name: web_search
enabled: false
- name: web_fetch
enabled: false
- type: mcp_toolset
mcp_server_name: github
default_config:
permission_policy:
type: always_allow
---
[Eight numbered run steps; the full text is in agent.md in the repo.]
フロントマターにはエージェント名、モデル、ツール、MCPサーバーが記述されます。本文にはエージェントへの指示を記述します。MCPツールはデフォルトで承認を求めますが、承認する人がいないため、GitHubツールセットは以下のように設定されています。 always_allow 、GitHubトークンは read-only.
ブリーフは短く保ってください
agent.md Claudeに簡潔さを向けるように仕向けます:
4. Decide. An item earns a line when the reader would act on it today, or it changes a decision they are about to make. When unsure, leave it out. Most days that is a few items, sometimes none. A count ("12 open reviews") is not an item; link the ones that are blocked. An item already in the ledger and still open is carried as one marked line ("still waiting, day 3"), not re-reported; a closed item is dropped without comment. Do not bring back a topic the preferences file has retired.
投稿直前に未解決の項目を再確認する
エージェントがソースを読んでから投稿するまでの間に、アイテムが変化することがあります。投稿の直前に、 agent.md 各アイテムのライブ状況を再確認するようエージェントに指示します:
5. Verify. The world moved while you read. For every item you will report, re-check its live source just before posting: resolved since you read it, drop it; still open but changed, fix the line; cannot confirm, drop it and list it in the run record's cuts. One stale "still waiting on you" costs more trust than ten missing items, so never hedge an item's status: assert it or drop it. Every link is copied from the source's own link field (a pull request's html_url, a Slack permalink), never assembled by hand.
スケジュール
Claude Managed Agents では、エージェントは単なる設定ファイルであり、 デプロイメント 「実行します。デプロイメントはエージェント名、環境、および各実行の最初のメッセージを指定します。また、スケジュール、ボルト、メモリーストア、予算も保持します。スケジュールが起動するたびに、プラットフォームは新しいエージェントを開始します」 セッション.

このテンプレートでは、デプロイは以下に記述されています。 deployment.md、最初のメッセージを本文として:
---
name: Daily brief
agent: ./agent.md
environment_id: ./environment.yaml
schedule:
type: cron
expression: "32 7 * * 1-5"
timezone: America/New_York
vault_ids: [vlt_...] # the vault you create under Sources
resources:
- path: ./memory_store_preferences.yaml
access: read_only
instructions: The reader's preferences. Re-read them every run. Never write here.
- path: ./memory_store_state.yaml
access: read_write
instructions: Your state. Bookmarks, ledger, notes, proposals, and run records.
---
Write today's brief.
The reader's time zone is America/New_York. Work out every date in that zone.
Follow your run steps in order. Today's edition is titled "Daily brief, <weekday> <month> <day>".
これにより、エージェント、環境、メモリストアを含むデプロイメントが作成され、パスによって名前が付けられます。
CODEShellant apply deployment.md
スケジュールを待たずにテストするには、次のコマンドで手動実行を開始します ant beta:deployments run --deployment-id <id>、次の ID を使用して: claude-lock.json.
自分のタイムゾーンで日付を計算する
よくあるバグとして、エージェントがサーバーのタイムゾーンで日付を計算するため、今朝を「昨日」と呼んでしまうというものがあります。In deployment.md、 timezone 実行時に field セットを設定し、ボディの2行目でエージェントに日付に使用するゾーンを指示します。
メモリー
各実行は、前回の記憶を持たない新しいサンドボックスから開始されます。記憶がなければ、フィードバックが定着しません。しかし、古くなった記憶はエージェントを混乱させることがあります。解決済みの項目をまだ待機中であると報告したり、「すでに報告済み」という理由で未解決の項目を欠落させたりするのです。

当社のテンプレートは2つの メモリーストア、/mnt/memory/ 配下にマウントされたフォルダ(Sources を参照):
-
環境設定 (あなたのもの、エージェントには読み取り専用):どのチャンネルやリポジトリを読み込むか、何を除外するか、文字数の上限、出力先、そしていつ停止するか。
-
州 (エージェント自身の、読み書き可能なもの): ブックマーク、報告内容の台帳(実行1回につき1レコード)、設定に対して提案する変更、各ソースの挙動に関するメモ(「最新の50件のみを返す」など)。
ant apply deployment.md 設定ストアは作成されますが、その中のファイルは作成されません。初回実行前に、リポジトリのものをベースに preferences.md をそこに書いてください。 scripts/seed-preferences.sh.
実行のたびに最初に設定を再読み込みする
よくある問題として、設定のコピーがプロンプトに埋め込まれてしまい、すでに変更済みのルールが適用され続けるケースがあります。エージェントには毎回ファイルを新しく読み込ませてください。ファイルを読めない場合は、デフォルト設定で動き続けるのではなく、停止してその旨を伝えるべきです。
すでに報告した内容の台帳をつけておき、その変更を報告する。
エージェントは台帳を保持し、 ledger.md、報告済みの全項目について記録するため、ブリーフィングで同じ内容が繰り返されることはありません。各行には、その項目がいつ報告されたか、どこから来たか、変わらないID(Slackのメッセージのタイムスタンプやプルリクエスト番号など)、および最後に確認されたステータスが記録されます:
2026-09-09 slack:C0123456789 1788963600.000100 refund thread: customer waiting on a decision 2026-09-11 github 481 review blocked, day 2 (still waiting) 2026-09-11 slack:C0234567891 1789117333.000300 enterprise escalation: owner named, in progress
ガードレール
自動化がスケジュールに従って「バックグラウンド」で実行されるため、エージェントが実行できる内容と使える金額に上限を設けています。

それにできることへの制限
エージェントは他の人が書いたメッセージや issue を読み込みますが、そのテキストは指示として解釈される可能性があります。エージェントがそれに従った場合に実行できることを制限してください。この例では、GitHub トークンと preferences ストアは読み取り専用であり、環境は許可リストに載っているホストにのみアクセスできます。それでも、仕込まれた指示によってブリーフの内容を変更することは可能です。これには、エージェントが実行間で保持するメモも含まれます。ただし、GitHub への書き込みやルールの編集はできません。
Slack は例外です。同じトークンで投稿するため、bot は読み取りまたは投稿が必要な場所にのみ招待してください。
実際の実行に基づいて支出上限を設定する
支出上限は、コストの暴走からあなたを守ります。通常の1回の実行コストの3〜5倍から始め、実際の数値が見えてきたら引き締めてください。上限に達した実行は失敗するのではなく一時停止するため、上限が低すぎると、静かになったブリーフのように見えます。上限は budget in deployment.md。各実行はフル額を受け取り、それに達した実行は budget_reached 停止理由:
budget:
type: limit
max_list_cost:
amount: "500" # a string, in cents: "500" is $5.00
currency: USD
はじめに
当社のリファレンス実装は、6つのルールに集約されます。
- 各ソースを固定の時間窓ではなく、ブックマークから読み取る。
- 読み取りに失敗した場合は「読み取れない」と報告し、決して「静かな一日」として報告しない。
- 投稿の直前に、すべての項目を再確認する。
- Slackが確認したときにのみ投稿を送信済みとみなし、その後にブックマークと台帳を更新する。
- 実行のたびに、エージェントが編集できないストアから設定を再読み込みする。
- エージェントが読み取りのみを行う箇所では読み取り専用アクセスを与え、各実行が費やせる額に上限を設ける。
Claude Code は、この記事で提供されているガイダンスを順を追って案内できます。まず、アップデートしてください:
CODEShellclaude update
次に、claude-api スキルを使用します:
PROMPT/claude-api managed-agents-onboard https://claude.dev/blog/building-effective-agent-automations/
claude-apiスキルはこの投稿を読み込み、セットアップを提案し、ファイルをプロジェクト内のagents/フォルダに書き込み、ant applyでリソースを作成します。これは出発点として扱い、ソース、転送先、またはメモリの設定に合わせてエージェントをカスタマイズしてください。
