Claude Agent SDKとCrewAIの違い — 役割を割り当てるか、ループに任せるか
CrewAIはロールとタスクを定義してチームで動かし、Claude Agent SDKはClaude Codeのエージェントループを組み込みます。モデル接続・ツール・実行制御・分業を並べて選び方を示します。
違いは「設計図を書くか、動くループを受け取るか」にある
Claude Agent SDKとCrewAIは、どちらもエージェントをコードから動かす道具です。ただ、開発者が最初に手にするものが違います。
CrewAIは、エージェントに役割(role)・目的(goal)・背景(backstory)を与え、仕事をタスクとして切り出し、チーム(Crew)にまとめて動かすフレームワークです。設計の中心は「誰に何を任せるか」です。
Claude Agent SDKは、Claude Codeのエージェントループ・ビルトインツール・コンテキスト管理を、PythonとTypeScriptから呼べるようにしたライブラリです。ループはすでに動いており、設計の中心は「何を許可し、どこで止めるか」になります。
| 比べる軸 | Claude Agent SDK | CrewAI |
|---|---|---|
| 設計の単位 | Claude Agent SDKプロンプトと許可設定、必要ならサブエージェント | CrewAIAgent(ロール)・Task・Crew・Flow |
| 次の一手を決める主体 | Claude Agent SDKClaudeがループの中で決める | CrewAIタスクの並びとプロセス(順次または階層) |
| 最初から持つもの | Claude Agent SDKファイル操作・コマンド実行・Web検索・フック・権限・セッション | CrewAIツールの仕組み・メモリ・ガードレール・チェックポイント |
| 接続できるモデル | Claude Agent SDKClaude Codeが動かすClaude(Claude API直のほか、Bedrock・Vertex AI・Foundry経由も可) | CrewAIOpenAI・Anthropic・Google・Azure・Bedrockなど |
| 向く仕事 | Claude Agent SDKコードやファイルを触って完結させる自律作業 | CrewAI役割分担した成果物の受け渡し |
CrewAIの中身は、ロールとタスクと進行役
CrewAIの紹介ページは、アプリの骨格をFlows、実働部隊をCrewsと説明しています。Flowはステップと状態の流れを決める「進行役」で、Crewはそこから呼ばれる自律エージェントのチームです。
Agentにはrole・goal・backstoryの3つが基本の属性として並びます。Taskはdescriptionとexpected_outputで仕事と完成形を書き、agentで担当を決めます。前のタスクの結果を使いたいときはcontextに渡します。
from crewai import Agent, Crew, Process, Task
researcher = Agent(
role="Research Analyst",
goal="Find and summarize information about specific topics",
backstory="You are an experienced researcher",
)
analyst = Agent(
role="Data Analyst",
goal="Analyze findings and identify key trends",
backstory="You excel at finding patterns",
)
research_task = Task(
description="Research the latest developments in AI",
expected_output="A list of recent AI developments",
agent=researcher,
)
analysis_task = Task(
description="Analyze the research findings",
expected_output="Analysis report of AI trends",
agent=analyst,
context=[research_task],
)
crew = Crew(
agents=[researcher, analyst],
tasks=[research_task, analysis_task],
process=Process.sequential,
)上の断片は、CrewAIのドキュメントにある定義例を組み合わせた形です。実行するにはAPIキーなどの設定が別に要ります。
プロセスはsequentialとhierarchicalの2種類です。順次実行ではタスクの定義順に進み、前のタスクの出力が次の文脈になります。階層実行ではマネージャー役のLLM(manager_llm)か専用エージェント(manager_agent)が、タスクの割り振りと出来のチェックを担います。
Claude Agent SDKの中身は、動いているループ
SDKの側は、設計図ではなく完成した1周の流れを渡してきます。Claudeがツール呼び出しを要求し、SDKが実行して結果を返す。この1往復が1ターンで、ツール呼び出しを含まない応答が出たところで終わります。ループの進行はClaudeが決め、コードが介入できるのはフックや権限コールバックの場面に限られます。
import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions
async def main():
async for message in query(
prompt="Fix the failing tests in auth.py",
options=ClaudeAgentOptions(
allowed_tools=["Read", "Edit", "Bash"],
max_turns=20,
max_budget_usd=2.0,
),
):
if hasattr(message, "result"):
print(message.result)
asyncio.run(main())役割も担当も書いていません。誰が何をするかはClaudeがループの中で決め、開発者が書くのは許可するツールと上限だけです。ビルトインツールには、ファイル操作(Read・Edit・Write)、検索(Glob・Grep)、Bash、WebSearch・WebFetch、サブエージェントを呼ぶAgentなどが含まれます。
インストールはpip install claude-agent-sdkで、Python 3.10以上かNode.js 18以上が前提です。
モデル接続: 選べるCrewAIと、Claude前提のSDK
モデルの選択肢は、2つの差がもっとも分かりやすく出る場所です。
CrewAIはOpenAI・Anthropic・Google Gemini・Azure・AWS Bedrockをネイティブ連携で扱い、それ以外のプロバイダーはLiteLLMを経由します。Ollamaで動かすローカルモデルや、OpenAI互換のAPIもbase_urlの指定で使えます。Claudeを使うなら次のように書きます。
from crewai import LLM
llm = LLM(
model="anthropic/claude-sonnet-4-6",
api_key="your-api-key", # ANTHROPIC_API_KEYでも可
max_tokens=4096, # Anthropicでは必須
)Anthropicのモデルではmax_tokensが必須パラメーターとして示されています。Agentに渡すときはAgent(llm=llm, ...)の形です。
CrewAIのドキュメントには、既定モデルの記述がページごとに揺れている箇所があります。LLM接続のページは「OPENAI_MODEL_NAMEが未設定ならgpt-4o-mini」と書き、Agentの属性表は「OPENAI_MODEL_NAMEまたはgpt-4」と書いています。llmを明示しないエージェントがどのモデルで動くかは、Claude目的で組むなら最初に固定しておく項目です。
Agent SDKは、Claude Codeのバイナリを動かすライブラリなので、動かすのはClaudeです。認証にはAPIキー(ANTHROPIC_API_KEY)を使います。Amazon BedrockならCLAUDE_CODE_USE_BEDROCK=1とAWSの認証情報、Vertex AIやMicrosoft Foundryもそれぞれの設定で使えます。またSDKは.envファイルを自動では読みません。サードパーティが製品にclaude.aiのログインやレート制限を載せることは、事前の承認がない限り認められていません。
ツール: 足していくCrewAIと、最初から持つSDK
CrewAIのツールは「エージェントが使える技能や関数」で、CrewAI Toolkitのツール、LangChainのツール、自作のBaseToolサブクラスをtoolsに渡して使います。キャッシュ、非同期、型付き出力も備えます。
見落としやすいのが失敗の扱いです。ツールが例外を出さずに「失敗」を返すと、エラー文は普通の結果としてエージェントに届き、実行は成功として記録されます。CrewAIはこれにToolFailureを返す方式を用意し、tool_failure_policyでignore・warn(既定)・raiseを選ばせます。
Agent SDKはファイル編集やコマンド実行を最初から持ちます。足したいツールは、@toolデコレーターで作り、create_sdk_mcp_serverでアプリ内のMCPサーバーにして渡します。外部のサービスはMCPで繋ぎます。
- CrewAI: ツールを集めて役割に配る発想
- SDK: 標準で揃ったツールに、必要なものだけ足す発想
コードを読み書きして検証する仕事では、前者は自作が増えやすく、後者は最初から手元にあります。逆にWeb検索やRAGなど既製ツールの顔ぶれを使いたい仕事は、CrewAIのToolkitが近道です。
実行制御: 暴走をどこで止めるか
どちらも「エージェントが走りすぎる」ことへの備えを持ちますが、止める場所が違います。
| 止めたいもの | CrewAI | Claude Agent SDK |
|---|---|---|
| 反復回数 | CrewAImax_iter(既定20) | Claude Agent SDKmax_turns |
| 費用 | CrewAIAgentの属性表に上限なし | Claude Agent SDKmax_budget_usd(サブエージェントの分も含む) |
| 実行時間・頻度 | CrewAImax_execution_time・max_rpm | Claude Agent SDKオプション表に上限なし |
| 出力の検証 | CrewAIタスクのguardrail(関数またはLLM) | Claude Agent SDKフックで検証して拒否 |
| 人の確認 | CrewAIhuman_input、Flowの@human_feedback | Claude Agent SDK権限の確認コールバック(canUseTool) |
| 途中再開 | CrewAIcheckpointとCrew.from_checkpoint() | Claude Agent SDKセッションのresumeとfork |
CrewAIの強みは、出力の検証が仕組みとして整っている点です。ガードレールは次のタスクへ渡す前に出力を検証し、失敗するとエージェントに差し戻し、既定で3回まで再試行します。
SDKの強みは、ツール呼び出しの手前で止める権限の流れです。評価は「フック → 拒否ルール → 確認ルール → 権限モード → 許可ルール → canUseTool」の順に進み、拒否ルールはbypassPermissionsモードでも効きます。たとえばBash(rm *)のようなスコープ付きの拒否は、モードに関係なくブロックされます。拒否をユーザーに見せる実装はpermission_deniedイベントの記事にまとめています。
options = ClaudeAgentOptions(
allowed_tools=["Read", "Grep", "Glob"],
disallowed_tools=["Bash(rm *)"],
permission_mode="dontAsk",
max_turns=15,
max_budget_usd=1.0,
)dontAskは、確認が要る呼び出しをすべて拒否するモードです。上の設定では、許可した読み取り系だけが走り、それ以外は聞かれずに止まります。無人の定期実行で「勝手に増える権限」を作らないための組み方です。
分業: マネージャーに配らせるか、サブエージェントに委ねるか
複数のエージェントに仕事を分ける場面でも、発想が分かれます。
CrewAIの階層プロセスでは、マネージャーがタスクを事前に決めずに能力に応じて割り振り、成果物を確認します。エージェント側はallow_delegationで他のエージェントへの委任を許すかどうかを決めます(既定は許さない)。
Agent SDKでは、agentsパラメーターにAgentDefinitionを渡し、description・prompt・tools・modelを書きます。呼び出すかどうかはClaudeがdescriptionを読んで決め、Agentツール経由で動きます。
- サブエージェントは新しい会話で始まり、親の履歴は渡りません。親に戻るのは最終メッセージだけです
toolsで絞れば、読み取り専用のレビュー役のように権限を狭められます- 並列実行ができ、独立した作業は一番遅いものの時間で終わります
- 入れ子の深さは既定で3層、同時実行は20までで、環境変数で変えられます
つまりCrewAIは「分業の構造を人が描く」、SDKは「分業の必要性をClaudeが判断し、人が上限と権限を決める」設計です。同じ分業でも、LangGraphのようにノードとエッジで遷移まで描く方式との距離はClaude Agent SDKとLangGraphの違いで、OpenAIのSDKとの対比はClaude Agent SDKとOpenAI Agents SDKの比較で整理しています。
状態の持ち方: Flowの永続化か、セッションの再開か
長い仕事は途中で止まります。再開の単位も両者で違います。
CrewAIのFlowは、状態(State)を非構造・構造化のどちらでも持てます。@persistによるメソッド単位・クラス単位の永続化があり、保存した状態から別の実行へフォークすることもできます。Crew単体なら、checkpoint=Trueでタスク完了ごとに.checkpoints/へ保存し、Crew.from_checkpoint()で完了済みのタスクをやり直さずに再開します。
Agent SDKの単位は会話そのものです。ClaudeSDKClientはマルチターンの会話を1プロセスで続け、continue_conversation=Trueは同じディレクトリの直近のセッションを引き継ぎます。特定のセッションを戻すなら、結果に含まれるセッションIDをresumeに渡します。元を残したまま別案を試すならforkです。
- 「どのタスクまで終わったか」を持つのがCrewAI
- 「どの会話の続きか」を持つのがSDK
工程が決まった定型業務は前者、対話しながら進める作業は後者が自然に収まります。
どちらを選ぶか
| こういう仕事なら | 向く選択 |
|---|---|
| コードベースを読み、直し、テストを回して完結させる | 向く選択Claude Agent SDK |
| 調べる人・まとめる人・チェックする人と、成果物を受け渡す | 向く選択CrewAI |
| Claude以外のモデルも同じ枠組みで使い分けたい | 向く選択CrewAI |
| 無人で動かし、許可と費用の上限を厳格にしたい | 向く選択Claude Agent SDK |
| 出力の形式を検証して再試行させたい | 向く選択CrewAI(ガードレール) |
| Anthropic側で動かしたい | 向く選択Managed Agents |
迷うときは、仕事の成果物が「ファイルやコードの変更」か「受け渡される文書やデータ」かで見ます。前者はSDK、後者はCrewAIの形にはまりやすい傾向があります。
組み合わせる場合の組み立て案
2つは排他ではありません。CrewAIのエージェントに、Agent SDKを呼ぶBaseToolを持たせる構成も考えられます。コードを触る工程だけをSDKに任せ、前後の調査と報告はCrewAIの役割に置く形です。
import asyncio
from crewai.tools import BaseTool
from claude_agent_sdk import query, ClaudeAgentOptions
class FixTests(BaseTool):
name: str = "fix_failing_tests"
description: str = "Run the Claude agent to fix failing tests."
def _run(self, instruction: str) -> str:
async def go() -> str:
result = ""
async for m in query(
prompt=instruction,
options=ClaudeAgentOptions(
allowed_tools=["Read", "Edit", "Bash"],
max_turns=20,
max_budget_usd=2.0,
),
):
if hasattr(m, "result"):
result = m.result
return result
return asyncio.run(go())上の例は同期の_runの中でasyncio.runを呼んでいます。Pythonでは、イベントループがすでに動いているスレッドからasyncio.runを呼ぶとRuntimeErrorになります。ループ上でツールが呼ばれる構成では、CrewAIが公式にサポートしているasync def _runで書き、queryを直接awaitする形に替えます。SDK側にmax_turnsとmax_budget_usdを置いておくと、CrewAIから呼んだ1回の費用と反復に上限が掛かります。
まとめ
CrewAIは「誰に何を任せるか」を人が設計し、Claude Agent SDKは「どこまで任せ、どこで止めるか」を人が決めます。モデルの選択肢と出力検証を取るならCrewAI、コードを触る自律作業と権限・費用の制御を取るならSDKです。両者はツールとして繋げる余地があるので、最初から二者択一にしなくても構いません。
関連する記事
Agent SDK をもっと見る →Claude Agent SDK入門 — Python / TypeScriptで最小エージェントを組む
Claude Agent SDKの違いをOpenAI Agents SDKと比較 — 委譲・ツール・セッション
Claude Agent SDKとStrands Agentsの違い — 認証・ツール・観測
Claude Agent SDKとMastraの違い — 完成したエージェントを借りるか、部品から組むか
Claude Agent SDKとLangGraphの違い — ループを任せるか、遷移を描くか
Cresta Conductorの評価設計 — Agent SDK製のエージェント構築エージェントをどう測るか