Guide
Migrating to deepcrew-ai
A concept map for teams coming from CrewAI or Google's Agent Development Kit (ADK), plus what deepcrew adds once you're here.
Migration
From CrewAI
| CrewAI concept | deepcrew equivalent | Notes |
|---|---|---|
Agent(role=, goal=, backstory=) | Agent(name=, system_prompt=) | Fold role/goal/backstory into one system prompt. |
Crew(process=Process.sequential) | WorkflowBuilder().add_agent(...).then(...) | Explicit DAG edges instead of implicit list order. |
Crew(process=Process.hierarchical) | Orchestrator(agents=[...]) | An LLM router picks single-agent or parallel fan-out. |
@tool / BaseTool | @tool on a plain function | Schema auto-generated from type hints. |
output_pydantic=Model | response_model=Model | Result lands on AgentResult.parsed; one repair attempt on invalid JSON. |
Task(human_input=True) | AgentHooks(approve_tool=...) | Per-tool-call, not per-task; return False to deny. |
Crew(verbose=True) | StreamPolicy.verbose() | Streaming events, not console printing. |
Before (CrewAI)
python
from crewai import Agent, Crew, Task, Process
researcher = Agent(role="Researcher", goal="Find facts", backstory="...")
crew = Crew(agents=[researcher], tasks=[Task(description="...", agent=researcher)],
process=Process.sequential)
result = crew.kickoff()
After (deepcrew)
python
from deepcrew import Agent, run_agent
researcher = Agent(name="researcher", model="openai/gpt-4o", system_prompt="You find facts.")
result = await run_agent(researcher, [{"role": "user", "content": "..."}])
Structured output
python
# CrewAI
researcher = Agent(role="Researcher", goal="...", output_pydantic=Report)
# deepcrew
researcher = Agent(name="researcher", model="openai/gpt-4o", response_model=Report)
result = await run_agent(researcher, messages)
result.parsed # a validated Report instance
Migration
From Google ADK
| ADK concept | deepcrew equivalent | Notes |
|---|---|---|
LlmAgent(model=, instruction=) | Agent(model=, system_prompt=) | model is a LiteLLM string, e.g. "openai/gpt-4o". |
ADK FunctionTool | @tool function or Skill | Simple callables become tools; multi-step capabilities become Skills. |
| ADK callbacks | AgentHooks + StreamEvent queue | Hooks intercept (can deny); events only observe. |
ADK Session / state | MemoryProvider | InMemory, File, or Redis-backed. |
ADK SequentialAgent/ParallelAgent | WorkflowBuilder | Independent DAG nodes run in parallel automatically. |
ADK LoopAgent | LoopConfig + run_agent_loop | Verifier-driven convergence rather than a fixed iteration count. |
Before (ADK)
python
from google.adk.agents import LlmAgent
agent = LlmAgent(model="gemini-2.0-flash", name="assistant", instruction="You are helpful.")
After (deepcrew)
python
from deepcrew import Agent, run_agent
agent = Agent(name="assistant", model="gemini/gemini-2.0-flash", system_prompt="You are helpful.")
result = await run_agent(agent, [{"role": "user", "content": "Hello!"}])
Migration
What deepcrew adds
- True token streaming with selectable visibility — every agent, tool call, memory op, retry, and verifier score is a
StreamEvent.StreamPolicycontrols what a given UI sees without changing execution. - Self-improving loop — a
Verifiercritiques each iteration and drives refinement, with adaptive early-stopping and self-consistency branching. - Bounded recursive spawning — agents dynamically spawn sub-agents mid-run via a
spawn_agentmeta-tool, capped by a hardmax_spawn_depth. - Skill distillation — a converged, high-confidence loop result can be distilled into a replayable
Skill, Voyager-style. - Multimodal input —
image()/pdf()/user_message()attach images and documents as standard content blocks.
See the Features index for the full list of what deepcrew-ai can do.