Workshop 1を実行する — 完全な配信ウォークスルー
エンジニアのグループに2時間で配信したときのWorkshop 1の手順ごとのウォークスルー。まずこれを読んで形を理解してください。それからWorkshop 1ビルドガイドで実際のコードを開いてください。
形 — 2時間、5つの動き
| 動き | 時間 | 何が起こるか |
|---|---|---|
| オープニング | 10分 | セッションのフレーミング · 3つの事前チェック · 5動きのタイムマップ |
| 1 · セットアップ | 20分 | フォルダ作成 · SDKインストール · インストール中に5つのSDK名を説明 |
| 2 · スケルトン | 25分 | 4ブロックを貼り付け · 設定 · ツールグループ · システムプロンプト · タスクプロンプト · ランナー |
| 3 · GOを押す | 15分 | シングルエージェントを実行 · ライブログを実況 · 部屋に自分のターミナルを見てもらう |
| 4 · マルチエージェント | 25分 | 3つのサブエージェントを追加 · 親をオーケストレーションに変換 · マルチエージェント・フローを実行 |
| 5 · クローズ | 10分 | 構築したものを、次にどこへ向かうかにつなげる · 質問の場を開く |
加えて、動き3と動き4の間に5分の休憩。合計:バッファ込みで約110分。
オープニング · 10分
つなぐためのフレーミング:
「このセッションは2時間です。終わりまでに、皆さんのラップトップで動くAIエージェントが手に入ります。約200行のTypeScript。ほとんどは一緒にコードを貼り付けます。TypeScriptの専門家である必要はありません。」
質問してよいという許可:
「行き詰まったら手を挙げてください。黙って苦しまないでください。部屋には2人います — 一人が運転し、一人がサポートします。終わりまでにすべてのラップトップが動くようにここにいます。」
5動きのマップ — ホワイトボードまたはスライドで歩いて見せる。エンジニアは旅が始まる前に次の2時間の地図を必要とします。
3つの事前チェック — 投影されたターミナルで各コマンドを入力します。
node --version # need 20.x or higherwhich claude # confirm the CLI you'll use is availablels workshop-folder/ # confirm the shared workshop folder is accessible60秒待ちます。不足しているものがあれば手が挙がります。フロアサポートが個別に対処し、その間に他の人は先に進みます。
「では、始めましょう。」
動き1 · セットアップ + SDKインポート · 20分
投影されたターミナルで入力します — 動きの間中、表示しておきます。
mkdir claude-agent-sdk-trainingcd claude-agent-sdk-trainingビルドガイドから package.json と tsconfig.json を貼り付けるよう部屋を案内します。2つの小さな設定ファイル。それ自体は仕事をしません — どのライブラリを取得するか、どのTypeScriptルールに従うかをコンピュータに伝えるだけです。
重要な唯一のライブラリ。
@anthropic-ai/claude-agent-sdkインストールを実行します。
pnpm installインストール中(新しいラップトップで3〜5分)、前に出てSDKが何を提供するかを説明します。5つの名前。
| 名前 | 役割 |
|---|---|
query | Claude Agent SDK実行を一度開始 |
Options | モデル · cwd · ツール · 権限 · プロンプト · サブエージェントを設定 |
SDKMessage | 実行からストリーミングされるライブイベント |
SDKResultMessage | 最終結果 |
AgentDefinition | 親が呼び出せるサブエージェントを定義 |
5つの名前。2分後にこれら5つすべてを目にします。
チェックポイント — pnpm install が終わった人は手を挙げます。フロアサポートが詰まっている人を助けます。80%以上が完了したら続行します。
次にimportを貼り付けます。src/index.ts の先頭 — 上の表の5つの名前そのまま。
一時停止。部屋を確認します。質問します:「次に進む前に質問はありますか?」(このチェックインには現地語を使う — バイリンガルな部屋は第二言語では質問を自発的にしません。)5秒待ちます。それから先に進みます。
動き2 · シングルエージェントのスケルトン · 25分
「次に4つのピースを配置します。設定。ツールグループ。エージェントの身元。エージェントのタスク。そしてそれを駆動するランナー。」
ステップ3 — RunConfig を貼り付け。 設定ブロック。作業ディレクトリ、モデル(Opus)、何件のインシデント(5)、どれだけ最近のもの(過去6ヶ月)。環境変数なので、部屋はコードを編集せずに変更できます。
ステップ4 — ツールグループを貼り付け。 2つの名前付きリスト。
SAFE_RESEARCH_TOOLS—WebSearch、WebFetch、Read、Glob、GrepWRITING_TOOLS—Write、Edit
エージェントは両方を取得します。サブエージェントを追加するとき、サブエージェントは研究ツールのみを取得します。ファイルを書けません。書くのは親だけ。これが各エージェントができることを制御する方法です — ガバナンスの最もシンプルな形。
ステップ5 — システムプロンプトを貼り付け。 エージェントの身元。安定した役割。
「あなたはインシデント・コレクター・エージェントです。AI関連のインシデントのみを収集してください。決してソースを捏造しないでください。証拠が弱ければ、そのケースを却下してください。」
これは実行を通じて同じままです。タスクは変わる — しかし身元は留まります。
ステップ6 — タスクプロンプトを貼り付け。 仕事。5件のインシデントを収集。これが正確なスキーマ。2つの出力ファイルを書き込む。
重要 — プロンプトは明示的に言います:水増ししないこと。5件の本物のインシデントが見つからなければ、より少ない数を書く。証拠の質について正直であること。
「これがエージェントに伝える方法です — 過少配信は構わない。捏造は構わない、ということではありません。」
ステップ7 — ランナーループを貼り付け。 最長のブロック。約100行。エンジニアは今すぐ各行を理解しようとせずに貼り付けます。
知っておく必要があるのは:これがエージェントを駆動し、その動きをすべて表示する関数です。すべての検索。読むすべてのページ。書くすべてのファイル。ターミナルにライブで。
実行前に型チェック:
pnpm typecheckターミナルが沈黙 = 成功。赤いエラー = どこかにタイポ。フロアサポートが助けます。
動き3 · GOを押す · 15分
ステップ8 — runSingleAgent を貼り付け。次にステップ9 — エントリーポイント。
そしてコマンド。
pnpm start最初の20〜30秒 — 何も起こらない。 部屋に伝えます:心配しないで、プログラムを止めないで。エージェントは接続中で、最初の検索クエリを選んでいます。
そしてログがストリーミングし始めます。ライブで実況。
[single-incident-collector] START agent run[single-incident-collector] SYS session initialized[single-incident-collector] A I'll search for recent AI incidents...[single-incident-collector] T WebSearch query=LLM coding agent incident 2026[single-incident-collector] T WebSearch query=AI agent security incident 2026[single-incident-collector] R WebSearch: 12 results found[single-incident-collector] A Let me verify the most concrete-sounding incidents...[single-incident-collector] T WebFetch url=https://...[single-incident-collector] R WebFetch error: 403 Forbidden[single-incident-collector] T WebSearch query=Replit AI agent deleted production database[single-incident-collector] A Replit case is from July 2025 — outside the 6-month window. Let me verify the more recent candidates.[single-incident-collector] T WebFetch url=https://www.anthropic.com/news/disrupting-AI-espionage[single-incident-collector] R WebFetch: 209,339 bytes[single-incident-collector] T Write file_path=.../incidents.jsonl[single-incident-collector] T Write file_path=.../01-incident-registry.md[single-incident-collector] DONE success turns=19 cost=$0.9956| ログコード | 意味 |
|---|---|
START | エージェントプロセスが起動 |
SYS | モデル接続が開く |
A | エージェントが自分自身に推論中 |
T | ツールが呼ばれた — 検索、取得、書き込み |
R | ツール結果が戻った |
DONE | 実行が完了 |
エージェントがウィンドウ外のインシデントを却下する A 行が重要な瞬間。 部屋がそれを見たとき — エージェントが現実世界の曖昧さの下で自身のルールに従う — ワークショップは着地しました。アナウンスしないでください。部屋に自分で気づいてもらってください。
約5分後、実行が完了します。出力を確認します。
ls outputs/single/workshop-outputs/# 01-incident-registry.mdmarkdownを開きます。最初のインシデントタイトルを読み上げます。URLをクリック。日付は本物。ソースは本物。 部屋は60秒でエージェントの作業を検証できます。
5分休憩。 エンジニアはストレッチ。フロアサポートが個別の質問に対応。
動き4 · マルチエージェントに変換 · 25分
「同じエージェント。3つのサブエージェントを追加します。」
すべてをやる1つのエージェントは1人の作業者。3つのサブエージェント = 専門家。
- 汎用の発見サブエージェント
- コーディングエージェント特化の発見サブエージェント
- 検証サブエージェント
各サブエージェントは独自の仕事、独自のプロンプト、独自のツールを持ちます。発見サブエージェントはファイルを書けません。 最終ファイルを書くのは親エージェントだけ。
ステップ10 — サブエージェント定義を貼り付け。 3つの名前付きエントリ、それぞれ description、prompt、tools リスト、model(Sonnet — Opusの親より安価)を持ちます。
ステップ11 — マルチエージェント・プロンプトを貼り付け。 オーケストレーションはプロンプトにあります。
- 広範な発見のために発見サブエージェントを使う
- エージェント型AIインシデントのためにコーディングエージェント発見サブエージェントを使う
- 候補リストを自分で(親が)マージ
- ソースを検証するため検証サブエージェントを使う
- 最終ファイルを自分で書く
親がシーケンスを決めます。サブエージェントは自分の部分を行い、ノートを返します。
ステップ12 — runMultiAgent + エントリーポイント更新を貼り付け。 新しいオプションが1つ:agents。それがSDKにサブエージェントを伝えます。これらは Agent ツールを通じて利用可能になります。
実行します。
pnpm start -- --multiログの形が変わります。新しいスコープ付きラベルが現れます。
[multi-agent-incident-collector] START agent run[multi-agent-incident-collector] T Agent -> incident-database-discovery[multi/incident-database-discovery] A I'll search for AI incidents in the recency window...[multi/incident-database-discovery] T WebSearch ...[multi-agent-incident-collector] T Agent -> coding-agent-incident-discovery[multi/coding-agent-incident-discovery] T WebSearch ...[multi-agent-incident-collector] T Agent -> incident-verifier[multi/incident-verifier] A Verifying sources for each candidate...[multi-agent-incident-collector] T Write file_path=.../incidents.jsonl[multi-agent-incident-collector] T Write file_path=.../01-incident-registry.md[multi-agent-incident-collector] T Write file_path=.../collection-method.md[multi-agent-incident-collector] DONE success turns=27 cost=$1.48231つの画面に3つのスコープ付きラベル — 親、2つの発見サブエージェント、1つの検証者。一緒に動いている。エンジニア自身のラップトップ上で。
マルチエージェントの出力を開きます。
ls outputs/multi/workshop-outputs/# 01-incident-registry.md# collection-method.md新しいファイル — collection-method.md — は、どのサブエージェントが何を見つけたかについての親のノートです。これで作業は監査可能になりました。誰が何をしたかを見ることができます。
動き5 · クローズ · 10分
「皆さんがしたことを振り返ってください。200行のTypeScript。2回の実行。1つのシングルエージェント。1つの4人チーム — 親1つとサブエージェント3つ。」
2回の実行のコスト — 約3ドル。時間 — 約10分のコンピュート。
これがエージェント・プリミティブです。メールボックスを監視し、アラームを監視し、受信リクエストを処理し、レポートを起草する — エージェントが読み、決定し、書き出す任意のワークフローと同じプリミティブ。ドメインは変わる;プリミティブは留まる。
質問の場を開く。 質問を受け付けます。部屋が議論したいかもしれないこと。
- エージェントは何を検索するかをどう決めるのか?(モデル + プロンプト + 推論)
- エージェントがループに入ったらどうなるか?(
maxTurnsキャップ、安全境界) - これを本番にどうデプロイするか?(親は1ピース;その周りのオーケストレーションが本番システム)
- 規模でのコストは?(SonnetのサブエージェントはOpusの約20%;オーケストレーション層に予算コントロール)
- 異なるLLMを使えるか?(はい — SDKはルーター付きであればプロバイダ非依存;Anthropic独自SDKの場合はモデル名を入れ替える)
よくある驚きと対処法
| 何が起こるか | 対処 |
|---|---|
pnpm start 後の長い沈黙 | 30秒待つ。エージェントは接続中 + 最初のクエリを選んでいる。それからログが始まる。 |
WebFetchで 403 Forbidden | 想定内。多くのソースは自動リクエストをブロック。エージェントは別のソースを試す。 |
| エージェントが「検証済みは3件、5件ではない」と言う | 受け入れる。プロンプトがエージェントに捏造しないよう伝えた。これは正しい振る舞い。 |
429 Too Many Requests | 60秒待って再実行。共有キーを使っているなら、別のプロバイダ・ルーティングに切り替える。 |
エージェントが終了したが outputs/ が空 | permissionMode が "acceptEdits" であることを確認。"ask" なら、エージェントは権限待ちで一時停止している。 |
| 貼り付け後の型チェックでエラー | おそらく順序が違う貼り付けか、波括弧の欠落。失敗するセクションを再度貼り付ける。 |
| コストが$1よりはるかに高い | INCIDENT_COUNT が高く設定されているか、Opusが長く実行されている。カウントを下げる、env経由でSonnetに切り替える。 |
なぜこの形式がうまくいくのか
この2時間のワークショップがうまく着地する傾向がある3つの理由。
-
ペースト駆動、ゼロから打鍵しない。 エンジニアはTypeScriptを学ぶ必要がない。9セクションを順番に貼り付ける;プレゼンターが各セクションが何をするかを実況する。認知負荷はエージェントを理解することに向けられ、コードを書くことではない。
-
pnpm startの最初の約30秒は何もないように見える。 これは沈黙を埋めない瞬間。ログが始まると、部屋は見る準備ができている。 -
エージェントが自分で結果を却下する。 プロンプトなし、台本のあるシアターなし — エージェントが指示に従う。それが部屋が自分たちが何を構築したのかを理解する瞬間。
このプリミティブが何にスケールするか
シングルエージェント → マルチエージェント・パターンはカーネルです。それを超えて。
- 多くのサブエージェントの会社 — 複数の親エージェント、それぞれが独自のサブエージェント・チーム、ライブラリとメモリ層を共有。
- 長時間実行エージェント — ハートビート、スケジュールされた起動、実行をまたぐ永続的な状態。
- チャネル駆動エージェント — WhatsApp、メール、Slack、Teams — エージェントはユーザーが好むチャネルで受信し、処理し、返信する。
- クロスエージェント・メモリ — 1つのエージェントが昨日学んだことを、別のエージェントが今日入室時に読む。
これらはWorkshop 1にはありません。Workshop 2ビルドガイドとWorkshop 3フックガイド、そしてより広いLifeOS · Living AI Officeプラットフォームにあります。
次に読む
- Workshop 1 — Claude Agent SDKで構築する — 実際のコード、ステップごと
- Workshop 2 — Claude Codeターミナルで実行する — 同じマルチエージェント・パイプライン、TypeScriptなし
- Workshop 3 — 生成されたフックをテストする — 生成されたガードレールの経験的検証