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 conceptdeepcrew equivalentNotes
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 functionSchema auto-generated from type hints.
output_pydantic=Modelresponse_model=ModelResult 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 conceptdeepcrew equivalentNotes
LlmAgent(model=, instruction=)Agent(model=, system_prompt=)model is a LiteLLM string, e.g. "openai/gpt-4o".
ADK FunctionTool@tool function or SkillSimple callables become tools; multi-step capabilities become Skills.
ADK callbacksAgentHooks + StreamEvent queueHooks intercept (can deny); events only observe.
ADK Session / stateMemoryProviderInMemory, File, or Redis-backed.
ADK SequentialAgent/ParallelAgentWorkflowBuilderIndependent DAG nodes run in parallel automatically.
ADK LoopAgentLoopConfig + run_agent_loopVerifier-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. StreamPolicy controls what a given UI sees without changing execution.
  • Self-improving loop — a Verifier critiques 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_agent meta-tool, capped by a hard max_spawn_depth.
  • Skill distillation — a converged, high-confidence loop result can be distilled into a replayable Skill, Voyager-style.
  • Multimodal inputimage()/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.