初級
あらゆるタスクに対応するハーネス:Claude Codeの動的ワークフロー
あらゆるタスクに対応するハーネス:Claude Codeの動的ワークフロー
デフォルトのClaude Codeハーネスはコーディング用に作られていますが、多くのタスクがコーディングタスクに似ているため、他の多くの種類のタスクにも役立ちます。しかし、リサーチ、セキュリティ分析、エージェントチーム、コードレビューなど、最高のパフォーマンスを達成するためにClaude Code上にカスタムハーネスを構築する必要があった特定のクラスのタスクもあります。
ワークフローを使用すると、Claude Code内でネイティブにこれらすべての問題やそれ以上を解決できるハーネスを動的に作成できます。また、これらのワークフローを他の人と共有して再利用することもできます。
この記事では、私の初期のワークフロー体験と学びを紹介し、皆さんが最大限に活用できるようにします。
とはいえ、ベストプラクティスはまだ発展途上です!動的ワークフローは多くの場合、より多くのトークンを使用するため、いつ、どのように使用するかを慎重に検討してください。
注:この投稿はClaudeブログでも公開されています。
プロンプトの例#
技術的な詳細に入る前に、ワークフローの可能性を考えるためのプロンプトの例をいくつか紹介します。
- 「このテストは50回に1回程度失敗します。これを再現し、理論を立て、worktreeで敵対的にテストするワークフローを設定し、/goal 1つの理論が機能するまで止まらないでください。」
- 「ワークフローを使用して、過去50のセッションを調べ、繰り返し行っている修正を抽出し、頻発するものをCLAUDE.mdルールに変換してください。」
- 「ワークフローを使用して、過去6ヶ月間のSlackの#incidentsを掘り起こし、誰もチケットを発行していない繰り返しの根本原因を見つけてください。」
- 「私の事業計画を取得し、投資家、顧客、競合他社の視点から異なるエージェントが分析するワークフローを実行してください。」
- 「ここに80件の履歴書のフォルダがあります。ワークフローを使用してバックエンド職に適した順にランク付けし、上位10件を再確認してください。AskUserQuestionツールを使用して評価基準について私にインタビューしてください。」
- 「このCLIツールの名前が必要です。ワークフローを使用して多くのオプションをブレインストーミングし、トーナメントを実行して上位3つを選んでください。」
- 「ワークフローを使用して、Userモデルをすべての場所でAccountにリネームしてください。」
- 「私のブログ記事の下書きを確認し、ワークフローを使用してコードベースに対してすべての技術的主張を検証してください。間違ったものを出荷したくありません。」
動的ワークフローの仕組み#
動的ワークフローは、サブエージェントを生成および調整するためのいくつかの特別な関数を含むJavaScriptファイルを実行します。

動的ワークフローには、データ処理を支援するためのJSON、Math、Arrayなどの標準的なJavaScript関数も含まれています。
特に重要なのは、動的ワークフローがエージェントが使用するモデルと、サブエージェントを独自のワークツリーで実行するかどうかを決定できることで、Claudeが必要とするインテリジェンスレベルと分離を選択できるようにします。
ワークフローがユーザーの操作やターミナルの終了などで中断された場合、セッションを再開するとワークフローは中断したところから再開できます。
動的ワークフローが必要な理由#
デフォルトのClaude Codeハーネスにタスクを依頼すると、同じコンテキストウィンドウ内で計画と実行の両方を行う必要があります。多くのコーディングタスクではこれは非常に効果的ですが、長時間実行、大規模並列、または高度に構造化された敵対的タスクでは、時々問題が発生することがあります。
これは、Claudeが単一のコンテキストウィンドウで複雑なタスクに長時間取り組むほど、いくつかの特定の障害モードの影響を受けやすくなるためです。
- エージェントの怠惰:Claudeが特に複雑で複数部分からなるタスクを完了する前に停止し、部分的な進捗(例えば、セキュリティレビューの50項目中20項目に対処しただけ)で仕事を完了したと宣言することを指します。
- 自己優先バイアス:Claudeが自身の結果や発見を好む傾向、特に評価基準に対して検証や判断を求められた場合に顕著です。
- 目標のドリフト:多くのターンを経て、特に圧縮後に元の目的への忠実度が徐々に失われることを指します。各要約ステップは情報を損失し、エッジケースの要件や「Xをしない」といった制約の詳細が失われる可能性があります。
ワークフローを作成することで、これらに対抗し、独自のコンテキストウィンドウと焦点を絞った孤立した目標を持つ別々のClaudeを調整できます。
動的ワークフローと静的ワークフロー#
以前、Claude Agent SDKや
claude -pを使用して、複数のClaude Codeインスタンスを調整する静的ワークフローを作成したことがあるかもしれません。しかし、静的ワークフローはすべてのエッジケースに対応する必要があるため、通常はより汎用的です。Claude Opus 4.8と動的ワークフローにより、Claudeはユースケースに合わせてカスタムメイドのハーネスを作成できるほどインテリジェントになりました。

動的ワークフローを使用する際の便利なパターン#
動的ワークフローは、Claudeに作成を依頼するか、トリガーワード「ultracode」を使用してClaude Codeがワークフローを作成するようにすることで、すぐに使い始めることができます。
しかし、動的ワークフローの仕組みに関するメンタルモデルを構築することで、いつ使用すべきか、プロンプトを通じてClaudeをどのように導くかを理解するのに役立ちます。
ワークフローを構築する際にClaudeが使用し、組み合わせる可能性のある一般的なパターンがいくつかあります。

分類して実行
分類エージェントを使用してタスクの種類を判断し、タスクに基づいて異なるエージェントや動作にルーティングします。または、最後に分類器を使用して出力を決定します。
ファンアウトして統合
タスクを多くの小さなステップに分割し、各ステップでエージェントを実行し、それらの結果を統合します。これは、多数の小さなステップがある場合や、各ステップが干渉や相互汚染を防ぐために独自のクリーンなコンテキストウィンドウの恩恵を受ける場合に特に便利です。統合ステップはバリアとして機能し、すべてのファンアウトエージェントを待ってから、それらの構造化された出力を1つの結果にマージします。
敵対的検証
生成された各エージェントに対して、別の生成されたエージェントを実行し、その出力を評価基準や条件に対して敵対的に検証します。
生成してフィルタリング
トピックに関する多くのアイデアを生成し、評価基準や検証によってフィルタリングし、重複を排除して、最高品質でテスト済みのアイデアのみを返します。
トーナメント
作業を分割する代わりに、エージェントに競わせます。N個のエージェントを生成し、それぞれが異なるアプローチを使用して同じタスクを試みます。プロンプトまたはモデルが、判定エージェントを使用してペアワイズ方式で結果を判断し、勝者が決まるまで続けます。
完了するまでループ
作業量が不明なタスクの場合、固定回数のパスではなく、停止条件(新しい発見がない、ログにエラーがなくなったなど)が満たされるまでエージェントを生成し続けます。
ユースケース#
いつ、どのようにClaude Codeに動的ワークフローを作成させるかを創造的に考えてください。ワークフローは、技術的な作業以外でもさらに役立つことがあると私は感じています。

移行とリファクタリング#
Bun はワークフローを使用してZigからRustに書き換えられました。その詳細については、JarredのXスレッドをご覧ください。
重要なのは、タスクをコールサイト、失敗するテスト、モジュールなどに対して操作する必要のある一連のステップに分解することです。各修正に対してワークツリーでサブエージェントを起動し、修正を行わせ、別のエージェントに敵対的にレビューさせ、マージします。リソースを大量に消費するコマンドを使用しないようにエージェントに指示することで、マシンのリソースを使い果たすことなく最大限に並列化できます。
ディープリサーチ#
Claude Code内で動的ワークフローを使用するディープリサーチスキル(
/deep-research)を公開しました。具体的には、Web検索をファンアウトし、ソースを取得し、その主張を敵対的に検証し、引用付きのレポートを合成します。しかし、この種のリサーチはWeb検索だけに限りません。例えば、ClaudeにSlackのコンテキストからステータスレポートをまとめさせたり、コードベースを詳細に調査して機能の仕組みを調べさせたりすることもできます。
ディープ検証#

一方、参照するすべての事実主張を確認してソースを特定したいレポートがある場合は、1つのエージェントがすべての事実主張を特定し、各主張を詳細にチェックするサブエージェントを起動するワークフローを生成できます。また、検証エージェントがソースサブエージェントをチェックして、そのソースの品質が高いことを確認させることもできます。
ソート#

Claude Codeが評価するのが得意な定性的な測定基準(例:バグの重大度でソートされたサポートチケット)でソートしたいアイテムのリストがあるかもしれません。しかし、1000行以上を1つのプロンプトでソートしようとすると、品質が低下し、コンテキストに収まりません。代わりに、トーナメント、ペアワイズ比較エージェントのパイプライン(絶対評価よりも比較判断の方が信頼性が高い)、または並列でバケットランク付けしてからマージする方法を実行します。各比較は独自のエージェントであり、決定論的なループがブラケットを保持し、実行順序のみがコンテキストに残ります。
メモリとルールの遵守#

CLAUDE.md に記載してもClaudeが見逃したり苦戦したりする特定のルールセットがある場合は、検証エージェント(ルールごとに1つの検証エージェント)によってチェックされるルールのリストを含むワークフローを作成します。ルールが適切であることを確認するために懐疑的なペルソナのサブエージェントを作成すると、誤検出が多くなるのを防ぐのに役立ちます。逆方向も機能します。最近のセッションやコードレビューのコメントから、繰り返し行っている修正をマイニングし、並列エージェントでクラスタリングし、各候補を敵対的に検証し(このルールは実際のミスを防いだでしょうか?)、生き残ったものを
CLAUDE.md に還元します。根本原因調査#
デバッグは、いくつかの独立した仮説を立ててテストする場合に最も効果的ですが、1つのコンテキストウィンドウのみを使用している場合、Claudeは自己優先バイアスに陥る可能性があります。
ワークフローは、構造的にこれを防ぐために、異なる証拠から仮説を生成するエージェントを起動できます。例えば、ログ、ファイル、データ用の個別のエージェントなどです。各仮説は、検証者と反論者のパネルに直面させることができます。
これはコードだけの話ではありません。ワークフローは、営業(なぜ3月に売上が落ちたのか?)、データエンジニアリング(なぜこのパイプラインは失敗したのか?)、またはあらゆる事後分析演習に使用できます。
大規模なトリアージ#

すべてのチームには、人間が完全に処理できないサポートキュー、バグレポート、またはその他のバックログがあります。
トリアージワークフローは、各アイテムを分類し、既に追跡されているものと重複排除し、アクションを実行します。これは、修正を試みるか、人間のユーザーにエスカレーションすることを意味する場合があります。
トリアージワークフローに便利なパターンは隔離です。これには、信頼できないパブリックコンテンツを読み取るエージェントが高権限のアクションを実行することを禁止し、代わりに情報に基づいて行動する担当のエージェントが実行します。
トリアージワークフローを
/loop と組み合わせて、Claudeにこれを継続的に実行させます。探索とセンス#
ワークフローは、ソリューションへのさまざまなアプローチを探索する場合に役立ちます。特に、デザインやネーミングのようにセンスに基づいており、ルーブリックの恩恵を受ける場合に有効です。
Claudeに多数のソリューションを探索させ、レビューエージェントに良いソリューションとは何かのルーブリックを与えてみてください。レビューエージェントが基準を満たしたと感じた時点でタスクは完了です。ソリューションは、ルーブリックに基づいたトーナメントによって順序付けまたは選択することもできます。
評価#
ワークツリーで個別のエージェントを起動し、次に比較エージェントを起動して特定の出力をルーブリックと比較・評価することで、特定のタスクの軽量な評価を実行できます。例えば、作成したスキルを特定の基準に対して評価し、改良することができます。
モデルとインテリジェンスルーティング#
タスクに合わせて調整された分類エージェントを作成し、使用するモデルを決定します。これは、タスクに多くのツール呼び出しが含まれ、実行前の調査によって最適なモデルを特定できる場合に役立ちます。
例えば、「認証モジュールの仕組みを説明する」というタスクに最適なモデルは、認証モジュール内のファイル数とコードベースの形状によって異なります。分類エージェントがこの調査を行い、タスクの予想される複雑さに基づいてSonnetまたはOpusにルーティングできます。
動的ワークフローを使用すべきでない場合#
ワークフローは新しいものです。多くのユースケースで非常に優れた結果を生み出しますが、すべてのタスクに必要というわけではなく、トークンを大幅に多く消費する可能性があります。
ワークフローは、Claude Codeをこれまでにない方法で活用するために創造的に使用するのが最適です。通常のコーディングタスクでは、本当にそれ以上の計算リソースが必要かどうかを自問してみてください。例えば、ほとんどの従来のコーディングタスクに5人のレビュアーのパネルは必要ありません。
動的ワークフロー構築のヒント#
プロンプティング#
動的ワークフローに対して、上記で説明した特定のテクニックを使用した詳細なプロンプティングが最良の結果を生み出します。
ワークフローは大規模なタスクのためだけのものではありません。「クイックワークフロー」を使用するようにモデルにプロンプトできます。例えば、ある仮定に対する簡単な敵対的レビューを作成できます。
/goal と /loop の組み合わせ#
トリアージ、リサーチ、検証など、繰り返し可能なワークフローを使用する場合は、定期的に実行するために
/loop と、厳格な完了要件を設定するために /goal を組み合わせます。トークン使用量の予算#
動的ワークフローに明示的なトークン使用量の予算を設定して、タスクが使用するトークンを制限できます。「10kトークンを使用」のような予算をプロンプトに含めることで、上限を設定できます。
動的ワークフローの保存と共有#
ワークフローメニューで「s」を押すとワークフローを保存できます。これらを
~/.claude/workflows にチェックインするか、スキルを介して配布できます。
スキルを介して共有するには、JavaScriptワークフローファイルをスキルとフォルダに配置し、
SKILL.md で参照します。より柔軟性を持たせるために、スキル内のワークフローをそのまま実行する必要のあるスクリプトではなく、テンプレートとして考えるようにClaudeにプロンプトするとよいでしょう。
まったく新しい世界#
ワークフローは、Claude Codeを拡張するための便利な新しい方法です。これは出発点として考えてください。最適な使用方法についてはまだ多くの発見があります。あなたが見つけたことをぜひ教えてください。
Thariq Shihipar と Sid Bidasaria(@sidbid)は、Anthropicの技術スタッフであり、Claude Codeに取り組んでいます。