diff --git a/docs/en/concepts/cli.mdx b/docs/en/concepts/cli.mdx
index e14c264a9..f664ce949 100644
--- a/docs/en/concepts/cli.mdx
+++ b/docs/en/concepts/cli.mdx
@@ -282,7 +282,25 @@ Watch this video tutorial for a step-by-step demonstration of deploying your cre
allowfullscreen
>
-### 11. API Keys
+### 12. Login
+
+Authenticate with CrewAI Enterprise using a secure device code flow (no email entry required).
+
+```shell Terminal
+crewai login
+```
+
+What happens:
+- A verification URL and short code are displayed in your terminal
+- Your browser opens to the verification URL
+- Enter/confirm the code to complete authentication
+
+Notes:
+- The OAuth2 provider and domain are configured via `crewai config` (defaults use `login.crewai.com`)
+- After successful login, the CLI also attempts to authenticate to the Tool Repository automatically
+- If you reset your configuration, run `crewai login` again to re-authenticate
+
+### 13. API Keys
When running ```crewai create crew``` command, the CLI will show you a list of available LLM providers to choose from, followed by model selection for your chosen provider.
@@ -310,7 +328,7 @@ See the following link for each provider's key name:
* [LiteLLM Providers](https://docs.litellm.ai/docs/providers)
-### 12. Configuration Management
+### 14. Configuration Management
Manage CLI configuration settings for CrewAI.
@@ -385,6 +403,10 @@ Reset all configuration to defaults:
crewai config reset
```
+
+After resetting configuration, re-run `crewai login` to authenticate again.
+
+
Configuration settings are stored in `~/.config/crewai/settings.json`. Some settings like organization name and UUID are read-only and managed through authentication and organization commands. Tool repository related settings are hidden and cannot be set directly by users.
diff --git a/docs/en/concepts/flows.mdx b/docs/en/concepts/flows.mdx
index 9d868ca5e..675fe5c7c 100644
--- a/docs/en/concepts/flows.mdx
+++ b/docs/en/concepts/flows.mdx
@@ -97,7 +97,13 @@ The state's unique ID and stored data can be useful for tracking flow executions
### @start()
-The `@start()` decorator is used to mark a method as the starting point of a Flow. When a Flow is started, all the methods decorated with `@start()` are executed in parallel. You can have multiple start methods in a Flow, and they will all be executed when the Flow is started.
+The `@start()` decorator marks entry points for a Flow. You can:
+
+- Declare multiple unconditional starts: `@start()`
+- Gate a start on a prior method or router label: `@start("method_or_label")`
+- Provide a callable condition to control when a start should fire
+
+All satisfied `@start()` methods will execute (often in parallel) when the Flow begins or resumes.
### @listen()
diff --git a/docs/en/concepts/knowledge.mdx b/docs/en/concepts/knowledge.mdx
index 588d74afc..1870155c0 100644
--- a/docs/en/concepts/knowledge.mdx
+++ b/docs/en/concepts/knowledge.mdx
@@ -24,6 +24,41 @@ For file-based Knowledge Sources, make sure to place your files in a `knowledge`
Also, use relative paths from the `knowledge` directory when creating the source.
+### Vector store (RAG) client configuration
+
+CrewAI exposes a provider-neutral RAG client abstraction for vector stores. The default provider is ChromaDB, and Qdrant is supported as well. You can switch providers using configuration utilities.
+
+Supported today:
+- ChromaDB (default)
+- Qdrant
+
+```python Code
+from crewai.rag.config.utils import set_rag_config, get_rag_client, clear_rag_config
+
+# ChromaDB (default)
+from crewai.rag.chromadb.config import ChromaDBConfig
+set_rag_config(ChromaDBConfig())
+chromadb_client = get_rag_client()
+
+# Qdrant
+from crewai.rag.qdrant.config import QdrantConfig
+set_rag_config(QdrantConfig())
+qdrant_client = get_rag_client()
+
+# Example operations (same API for any provider)
+client = qdrant_client # or chromadb_client
+client.create_collection(collection_name="docs")
+client.add_documents(
+ collection_name="docs",
+ documents=[{"id": "1", "content": "CrewAI enables collaborative AI agents."}],
+)
+results = client.search(collection_name="docs", query="collaborative agents", limit=3)
+
+clear_rag_config() # optional reset
+```
+
+This RAG client is separate from Knowledge’s built-in storage. Use it when you need direct vector-store control or custom retrieval pipelines.
+
### Basic String Knowledge Example
```python Code
diff --git a/docs/en/concepts/memory.mdx b/docs/en/concepts/memory.mdx
index 78401d8b5..632882d16 100644
--- a/docs/en/concepts/memory.mdx
+++ b/docs/en/concepts/memory.mdx
@@ -738,6 +738,17 @@ print(f"OpenAI: {openai_time:.2f}s")
print(f"Ollama: {ollama_time:.2f}s")
```
+### Entity Memory batching behavior
+
+Entity Memory supports batching when saving multiple entities at once. When you pass a list of `EntityMemoryItem`, the system:
+
+- Emits a single MemorySaveStartedEvent with `entity_count`
+- Saves each entity internally, collecting any partial errors
+- Emits MemorySaveCompletedEvent with aggregate metadata (saved count, errors)
+- Raises a partial-save exception if some entities failed (includes counts)
+
+This improves performance and observability when writing many entities in one operation.
+
## 2. External Memory
External Memory provides a standalone memory system that operates independently from the crew's built-in memory. This is ideal for specialized memory providers or cross-application memory sharing.
diff --git a/docs/en/concepts/tasks.mdx b/docs/en/concepts/tasks.mdx
index ac9073f13..722980c0d 100644
--- a/docs/en/concepts/tasks.mdx
+++ b/docs/en/concepts/tasks.mdx
@@ -61,6 +61,11 @@ crew = Crew(
| **Guardrail** _(optional)_ | `guardrail` | `Optional[Callable]` | Function to validate task output before proceeding to next task. |
| **Guardrail Max Retries** _(optional)_ | `guardrail_max_retries` | `Optional[int]` | Maximum number of retries when guardrail validation fails. Defaults to 3. |
+
+ The task attribute `max_retries` is deprecated and will be removed in v1.0.0.
+ Use `guardrail_max_retries` instead to control retry attempts when a guardrail fails.
+
+
## Creating Tasks
There are two ways to create tasks in CrewAI: using **YAML configuration (recommended)** or defining them **directly in code**.
@@ -432,7 +437,7 @@ When a guardrail returns `(False, error)`:
2. The agent attempts to fix the issue
3. The process repeats until:
- The guardrail returns `(True, result)`
- - Maximum retries are reached
+ - Maximum retries are reached (`guardrail_max_retries`)
Example with retry handling:
```python Code
diff --git a/docs/en/enterprise/features/traces.mdx b/docs/en/enterprise/features/traces.mdx
index 94e407413..3e8ba961e 100644
--- a/docs/en/enterprise/features/traces.mdx
+++ b/docs/en/enterprise/features/traces.mdx
@@ -141,6 +141,16 @@ Traces are invaluable for troubleshooting issues with your crews:
+## Performance and batching
+
+CrewAI batches trace uploads to reduce overhead on high-volume runs:
+
+- A TraceBatchManager buffers events and sends them in batches via the Plus API client
+- Reduces network chatter and improves reliability on flaky connections
+- Automatically enabled in the default trace listener; no configuration needed
+
+This yields more stable tracing under load while preserving detailed task/agent telemetry.
+
Contact our support team for assistance with trace analysis or any other CrewAI Enterprise features.
\ No newline at end of file
diff --git a/docs/en/enterprise/guides/automation-triggers.mdx b/docs/en/enterprise/guides/automation-triggers.mdx
index 872724b44..6fe8c30ad 100644
--- a/docs/en/enterprise/guides/automation-triggers.mdx
+++ b/docs/en/enterprise/guides/automation-triggers.mdx
@@ -96,6 +96,13 @@ class MyAutomatedCrew:
The crew will automatically receive and can access the trigger payload through the standard CrewAI context mechanisms.
+
+ Crew and Flow inputs can include `crewai_trigger_payload`. CrewAI automatically injects this payload:
+ - Tasks: appended to the first task's description by default ("Trigger Payload: {crewai_trigger_payload}")
+ - Control via `allow_crewai_trigger_context`: set `True` to always inject, `False` to never inject
+ - Flows: any `@start()` method that accepts a `crewai_trigger_payload` parameter will receive it
+
+
### Integration with Flows
For flows, you have more control over how trigger data is handled:
diff --git a/docs/en/guides/flows/mastering-flow-state.mdx b/docs/en/guides/flows/mastering-flow-state.mdx
index 4d1fac515..ac4b492ac 100644
--- a/docs/en/guides/flows/mastering-flow-state.mdx
+++ b/docs/en/guides/flows/mastering-flow-state.mdx
@@ -348,6 +348,31 @@ class SelectivePersistFlow(Flow):
## Advanced State Patterns
+### Conditional starts and resumable execution
+
+Flows support conditional `@start()` and resumable execution for HITL/cyclic scenarios:
+
+```python
+from crewai.flow.flow import Flow, start, listen, and_, or_
+
+class ResumableFlow(Flow):
+ @start() # unconditional start
+ def init(self):
+ ...
+
+ # Conditional start: run after "init" or external trigger name
+ @start("init")
+ def maybe_begin(self):
+ ...
+
+ @listen(and_(init, maybe_begin))
+ def proceed(self):
+ ...
+```
+
+- Conditional `@start()` accepts a method name, a router label, or a callable condition.
+- During resume, listeners continue from prior checkpoints; cycle/router branches honor resumption flags.
+
### State-Based Conditional Logic
You can use state to implement complex conditional logic in your flows:
diff --git a/docs/en/installation.mdx b/docs/en/installation.mdx
index f319d0a40..d7aef8960 100644
--- a/docs/en/installation.mdx
+++ b/docs/en/installation.mdx
@@ -30,6 +30,12 @@ Watch this video tutorial for a step-by-step demonstration of the installation p
If you need to update Python, visit [python.org/downloads](https://python.org/downloads)
+
+ **OpenAI SDK Requirement**
+
+ CrewAI 0.175.0 requires `openai >= 1.13.3`. If you manage dependencies yourself, ensure your environment satisfies this constraint to avoid import/runtime issues.
+
+
CrewAI uses the `uv` as its dependency management and package handling tool. It simplifies project setup and execution, offering a seamless experience.
If you haven't installed `uv` yet, follow **step 1** to quickly get it set up on your system, else you can skip to **step 2**.