Quickstart
Watch: Building CrewAI Agents & Flows with Coding Agent Skills
Install our coding agent skills (Claude Code, Codex, ...) to quickly get your coding agents up and running with CrewAI.
You can install it with npx skills add crewaiinc/skills
In this guide you will create a Flow that sets a research topic, runs a crew with one agent (a researcher using web search), and ends with a markdown report on disk. Flows are the recommended way to structure production apps: they own state and execution order, while agents do the work inside a crew step.
If you have not installed CrewAI yet, follow the installation guide first.
Prerequisites
- Python environment and the CrewAI CLI (see installation)
- An LLM configured with the right API keys — see LLMs
- A Serper.dev API key (
SERPER_API_KEY) for web search in this tutorial
Build your first Flow
-
Create a Flow project
From your terminal, scaffold a Flow project (the folder name uses underscores, e.g.
latest_ai_flow):crewai create flow latest-ai-flow cd latest_ai_flowThis creates a Flow app under
src/latest_ai_flow/, including a starter crew undercrews/content_crew/that you will replace with a minimal single-agent research crew in the next steps. -
Configure one agent in JSONC
Create
src/latest_ai_flow/crews/content_crew/agents/researcher.jsonc(create theagents/directory if needed). Variables like{topic}are filled fromcrew.kickoff(inputs=...).{ "role": "{topic} Senior Data Researcher", "goal": "Uncover cutting-edge developments in {topic}", "backstory": "You're a seasoned researcher who finds relevant information and presents it clearly.", "tools": ["SerperDevTool"], "settings": { "verbose": true } } -
Configure the crew in `crew.jsonc`
Create
src/latest_ai_flow/crews/content_crew/crew.jsonc:{ "name": "Research Crew", "agents": ["researcher"], "tasks": [ { "name": "research_task", "description": "Conduct thorough research about {topic}. Use web search to find recent, credible information.", "expected_output": "A markdown report with clear sections: key trends, notable tools or companies, and implications. Aim for 800-1200 words. No fenced code blocks around the whole document.", "agent": "researcher", "output_file": "output/report.md", "markdown": true } ], "process": "sequential", "verbose": true } -
Load the JSON crew (`content_crew.py`)
Replace the generated
content_crew.pywith a small loader that turnscrew.jsoncinto aCrew.# src/latest_ai_flow/crews/content_crew/content_crew.py from pathlib import Path from crewai.project import load_crew def kickoff_content_crew(inputs: dict): crew, default_inputs = load_crew(Path(__file__).with_name("crew.jsonc")) return crew.kickoff(inputs={**default_inputs, **inputs}) -
Define the Flow in `main.py`
Connect the crew to a Flow: a
@start()step sets the topic in state, and a@listenstep runs the crew. The task’soutput_filestill writesoutput/report.md.# src/latest_ai_flow/main.py from pydantic import BaseModel from crewai.flow import Flow, listen, start from latest_ai_flow.crews.content_crew.content_crew import kickoff_content_crew class ResearchFlowState(BaseModel): topic: str = "" report: str = "" class LatestAiFlow(Flow[ResearchFlowState]): @start() def prepare_topic(self, crewai_trigger_payload: dict | None = None): if crewai_trigger_payload: self.state.topic = crewai_trigger_payload.get("topic", "AI Agents") else: self.state.topic = "AI Agents" print(f"Topic: {self.state.topic}") @listen(prepare_topic) def run_research(self): result = kickoff_content_crew(inputs={"topic": self.state.topic}) self.state.report = result.raw print("Research crew finished.") @listen(run_research) def summarize(self): print("Report path: output/report.md") def kickoff(): LatestAiFlow().kickoff() def plot(): LatestAiFlow().plot() if __name__ == "__main__": kickoff()Tip
If your package name differs from
latest_ai_flow, change thekickoff_content_crewimport to match your project’s module path. -
Set environment variables
In
.envat the project root, set:SERPER_API_KEY— from Serper.dev- Your model provider keys as required — see LLM setup
-
Install and run
crewai install crewai runcrewai runexecutes the Flow entrypoint defined in your project (same command as for crews; project type is"flow"inpyproject.toml). -
Check the output
You should see logs from the Flow and the crew. Open
output/report.mdfor the generated report (excerpt):# AI Agents: Recent Landscape and Trends ## Executive summary … ## Key trends - **Tool use and orchestration** — … - **Enterprise adoption** — … ## Implications …Your actual file will be longer and reflect live search results.
How this run fits together
- Flow —
LatestAiFlowrunsprepare_topicfirst, thenrun_research, thensummarize. State (topic,report) lives on the Flow. - Crew —
kickoff_content_crewloadscrew.jsoncand runs one task with one agent: the researcher uses Serper to search the web, then writes the structured report. - Artifact — The task’s
output_filewrites the report underoutput/report.md.
To go deeper on Flow patterns (routing, persistence, human-in-the-loop), see Build your first Flow and Flows. For crews without a Flow, see Crews. For a single Agent and kickoff() without tasks, see Agents.
Check
You now have an end-to-end Flow with an agent crew and a saved report — a solid base to add more steps, crews, or tools.
Naming consistency
The names in crew.jsonc must match the files and task references you use:
agents: ["researcher"]loadsagents/researcher.jsonctasks[].agent: "researcher"assigns the task to that agent
Deploying
Push your Flow to CrewAI AMP once it runs locally. If the project has a git origin, AMP deploys from that repository (on GitHub, AMP's GitHub integration must be able to access it); with no origin, crewai deploy create uploads the project as a ZIP. From the project root:
crewai logincrewai deploy createcrewai deploy status
crewai deploy logscrewai deploy pushcrewai deploy list
crewai deploy remove -u <deployment_uuid>Tip
The first deploy usually takes around 1 minute. Full prerequisites and the web UI flow are in Deploy to AMP.
Step-by-step AMP deployment (CLI and dashboard).
Discuss ideas, share projects, and connect with other CrewAI developers.