What is @start?
@start() marks the methods CrewAI should invoke first when a Flow kicks off. The decorator is call-shaped — you write @start(), not bare @start — because the framework reads optional arguments that tie execution to Flow state keys. With no arguments, the method runs on every kickoff; with a state field specified, it becomes a conditional entry useful when different triggers should hydrate the same graph.
Flows may register more than one @start method when you intentionally support multiple entry shapes, such as webhook replays versus operator-initiated runs. Each start method seeds downstream listeners through normal return values; there is no implicit fan-out, so duplicate starts usually mean orthogonal entry paths that converge later via @listen(and_(...)) patterns.
Treat @start bodies as idempotent seeders: they should validate kickoff inputs, initialize tracing metadata, and publish canonical defaults on Flow state. Heavy work still belongs in downstream nodes so retries and persistence boundaries stay predictable when you pair the Flow with @persist.
When to Use
Every Flow needs at least one @start method.
Use Cases
- • Flow entry
- • Conditional start based on state
- • Multiple start branches
Key Features
- ✓ Unconditional or conditional
- ✓ Multiple starts allowed
- ✓ Receives no upstream output
When NOT to Use
Intermediate steps — those use @listen.
Notes
Call syntax matters
@start is invalid; the decorator factory must be invoked so CrewAI can attach metadata. Static type checkers and IDEs also treat @start() as the supported surface.
Multiple starts and determinism
When several unconditional starts exist, understand the framework's dispatch order for your version. Prefer explicit state-gated starts if two seeds would otherwise race or duplicate side effects.
Kickoff inputs vs. state
Start methods often read kickoff payloads then write normalized fields onto Flow state. Keep that translation here so downstream @listen handlers consume a stable schema.
Pairing with persistence
Long-running flows should combine @persist with starts that tolerate resume tokens. Avoid generating irreversible external effects inside starts unless idempotency keys guard replays.
Import
from crewai.flow.flow import Flow, start
How to Apply
@start()
def begin(self):
return seed_value
What It Enables
- ✓ Flow execution entry
- ✓ Conditional starting logic
Code Examples
Unconditional start
class MyFlow(Flow):
@start()
def begin(self):
return 'hello'
Conditional start on a state flag
class InboundFlow(Flow):
@start('webhook_payload')
def from_webhook(self):
return self.state.webhook_payload['event_id']
Two explicit entry methods
class OpsFlow(Flow):
@start()
def manual(self):
return {'source': 'ui'}
@start('ticket')
def from_queue(self):
return {'source': 'queue', 'id': self.state.ticket}
Integration Patterns
Paired with @listen for downstream steps
Common Mistakes
❌ Forgetting the parentheses: @start
✅ Always call it: @start().
Related: Task class reference, Agent class reference, and the first Crew tutorial.
@start FAQ
What is @start in CrewAI?
Marks the entry point of a Flow — the first method to execute when the flow runs. @start() marks the methods CrewAI should invoke first when a Flow kicks off. The decorator is call-shaped — you write @start(), not bare @start — because the framework reads optional arguments that tie execution to Flow state keys. With no arguments, the method runs on every kickoff; with a state field specified, it becomes a conditional entry useful when different triggers should hydrate the same graph. Flows may register more than one @start method when you intentionally s…
Which module defines the CrewAI decorator @start?
DevShelfHub maps @start to Python module crewai.flow.flow. Pin your installed crewai version and match imports to the import snippet on this page.
When should I use @start?
Every Flow needs at least one @start method.
When should I avoid @start?
Intermediate steps — those use @listen.
How do I apply @start in Python?
@start() def begin(self): return seed_value
Where can I explore more CrewAI API reference pages?
Open the CrewAI API reference index on DevShelfHub to search classes, methods, and decorators, each with runnable examples, parameters, common mistakes, and cross-links.