Digitorn
Digitorn
← Back to Learn
Migration guide

From CrewAI to Digitorn

From crew, agents, and tasks to one flat YAML.

220 lines in CrewAI60 lines in Digitorn YAML73% smaller

CrewAI made multi-agent setups feel approachable. You write a crew, a few agents, and the tasks that bind them. The structure is good but it stays trapped inside Python and the wiring still costs lines. Digitorn keeps the multi-agent shape and turns it into nested YAML.

CrewAI works best for one-off scripts. The minute you need scheduled runs, webhooks, real credentials, or a UI, you write the surrounding plumbing yourself. Digitorn gives you the same coordinator-and-specialists model with channels, cron, the Hub registry, credential vault, and a streaming UI already wired in.

Concept by concept

Every CrewAI primitive maps to a Digitorn equivalent. Where the mapping is not 1-to-1, the notes call out what changed.

CrewAIDigitornNotes
Crewagents[] (one coordinator)A crew is the coordinator agent. In Digitorn you mark one agent as the entry point, the rest are specialists.
Agentagents[] specialistEach specialist is a separate agent block with a brain, a system prompt, and a scoped tool list.
TaskAgent tool callWhen the coordinator calls Agent(specialist='research', prompt='...'), that is the task. No separate Task class.
Process (sequential, hierarchical)spawn semanticsSequential equals wait=true on Agent calls, hierarchical equals the default coordinator pattern, parallel comes free with concurrent Agent calls.
Tools (LangChain wrappers)modules[]Native modules avoid the LangChain wrapper layer. Same tools, no double indirection.
Memorymodules.memorymemory.remember and memory.recall are first-class actions any agent can use. Shared across the crew via the runtime.

Side-by-side code

Real apps in both stacks. The Digitorn version is what you would commit to a repo, no scaffolding hidden offscreen.

Research crew with a writer and a fact checker

CrewAI
agent.py
1from crewai import Agent, Task, Crew, Process2from langchain_anthropic import ChatAnthropic34llm = ChatAnthropic(model="claude-haiku-4-5", api_key=API_KEY)56researcher = Agent(7    role="Researcher", goal="Find facts about the topic",8    backstory="...", llm=llm, tools=[search_tool],9)10writer = Agent(11    role="Writer", goal="Compose a clear summary",12    backstory="...", llm=llm,13)1415task1 = Task(description="Research {topic}", agent=researcher)16task2 = Task(description="Write summary based on research", agent=writer)1718crew = Crew(agents=[researcher, writer], tasks=[task1, task2],19            process=Process.sequential)2021crew.kickoff(inputs={"topic": "agentic frameworks"})
Digitorn
app.yaml
1modules:2  web: {}34agents:5  - id: lead6    role: coordinator7    modules: [{agent_spawn: [Agent]}]8    brain: { model: claude-sonnet-4-6, credential: anthropic_main }9    system_prompt: |10      You coordinate research. Call Agent(specialist='researcher', ...) first,11      wait for it, then call Agent(specialist='writer', ...) with the findings.1213  - id: researcher14    modules: [{web: [search, fetch]}]15    brain: { model: claude-haiku-4-5, credential: anthropic_main }16    system_prompt: "Find sources and return facts with citations."1718  - id: writer19    modules: []20    brain: { model: claude-haiku-4-5, credential: anthropic_main }21    system_prompt: "Compose a clear summary from the research output."

The crew, agent, and task triple collapses into a list of agents. The lead's prompt explains the dispatch order, no Process enum needed. Switching to parallel research is a single sentence change.

What bites people

Subtle differences that look the same on paper and break on first run. Read these before you start porting.

Specialists are not Crew agents

A Digitorn specialist is just an agent block whose modules are exposed only when the coordinator calls Agent. There is no separate Crew object to instantiate.

Sequential vs hierarchical is a prompt, not a flag

Where CrewAI uses Process.sequential or Process.hierarchical, you simply describe the dispatch logic in the coordinator's system prompt. The runtime does not enforce a process, the prompt does.

Background by default

Agent calls return immediately with an agent_id unless you add wait=true. CrewAI is sequential by default, Digitorn is concurrent by default, plan accordingly.

Where CrewAI still wins
  • Tutorials and getting-started content with a strong narrative
  • Hierarchical processes where you want the framework to enforce order
  • Notebooks that demonstrate orchestration patterns step by step
Try it in 5 minutes

Install Digitorn and port one of your CrewAI agents

# 1. install runtime
curl -sSL https://digitorn.ai/install | sh

# 2. copy the YAML above into a file
mkdir -p ~/.digitorn/apps/from-crewai
# paste the YAML into app.yaml

# 3. deploy and chat
digitorn deploy from-crewai
digitorn dev chat from-crewai
Newsletter

Get the next post in your inbox.

Engineering notes from the Digitorn team. No marketing, no launch announcements, no "10 prompts that will change your life". Just the things we write that we'd want to read.

One-click unsubscribe. We never share your address. Powered by our own infrastructure, not a tracker.

Other migration guides

Python frameworkFrom LangChain/migrate-from/langchainAutonomous goal pursuerFrom Auto-GPT/migrate-from/autogptCoding assistantFrom Aider/migrate-from/aiderHosted assistant APIFrom OpenAI Assistants API/migrate-from/openai-assistants